| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: vla-ss items sortieren und neu zusammensetzen (1716 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 04. Dez. 2013 09:56 <-- editieren / zitieren --> Unities abgeben:         
Mir ist die Arbeitsweise mit vla-objekten unbekannt. Ich möchte erreichen, dass die gewählten Objekte (Schraffuren) nach der Erstellungszeit (Objekthandle) sortiert werden und der vla-ss neu erzeugt wird. Ich weiss nicht, ob das der richtige Weg ist, vielleicht geht es einfacher. Ich möchte aus der sortierten Liste NewList die Items zum neuen SS acsel hinzufügen Code: (ssget '((0 . "HATCH"))) (setq acdoc (vla-get-activedocument (vlax-get-acad-object))) (setq ss (vla-get-ActiveSelectionSet acDoc)) (vlax-for itm ss (setq RawList (append RawList (list (cons itm (vla-get-Handle itm))))) ) (setq NewList (vl-sort RawList (function (lambda (E1 E2) (< (cdr E1) (cdr E2))))))(setq acsel (vla-add (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object)) ) "MyName" ) ) ;set the counter to zero (setq ctr 0) ;count the number of objects and loop (repeat (vla-get-count ss) ;retrieve each object (setq item (car (nth ctr NewList))) ;??? (vla-AddItems (car (nth ctr NewList)) acsel) ;increment the counter (setq ctr (1+ ctr)) );repeat ; Nach run der Funktion (vla-delete acsel)
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 04. Dez. 2013 11:37 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 06. Dez. 2013 15:47 <-- editieren / zitieren --> Unities abgeben:         
Danke - mir fehlt nur das entspr. handling. Hänge daran fest. Versteh nicht ganz was der array für eine Funktion ausführt. Deshalb habe ich blind hier einfach ein paar Zeilen zusammengehauen, ohne ... Code: (setq acsel (vla-add (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object)) ) "MyName" ) ) (setq ctr 0) (setq ssl (vla-get-count ss)) (setq newArray (vlax-make-safearray vlax-vbObject (cons 0 (1- ssl))) n 0 ) (while (< ctr ssl) (setq item (car (nth ctr NewList))) (vlax-safearray-put-element newArray n item) (setq ctr (1+ ctr)) )
Was fehlt meinem vlSelSet, damit er auch gefüllt wird? ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 06. Dez. 2013 17:07 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
Ohne es wirklich zu prüfen, viel leicht das 3.Schlagwort ? Ich sehe zumindest in deinem Post nicht wo du den Array dem vlSelSet übergibst. Einarray macht übrigens nichts, das ist im www aber sicher ausführlicher beschrieben, daher halte ich mich mal zurück. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 07. Dez. 2013 17:01 <-- editieren / zitieren --> Unities abgeben:         
Die Frage war eben das, wie kann man einen array an den ss übergeben? Auf afraLISP gibt es jede Menge infos, nur wird bei der selection immer "onScreen" ausgewiesen. Gibt es da noch eine andere Möglichkeit. Da meine Objekte ja nun mal schon ausgewählt wurden, entsprechend ID sortiert und jetzt an den neuen ss übergeben werden sollen. Ist mit der array collection eine eigenützige ActiveX ss gemeint. Oder zu was braucht man den überhaupt. Vllt sollte die Frage ersteinmal geklärt werden. Danke! ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 07. Dez. 2013 19:42 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
|
archtools Mitglied
  
 Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 07. Dez. 2013 20:14 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
Zitat: Original erstellt von cadplayer: Mir ist die Arbeitsweise mit vla-objekten unbekannt. Ich möchte erreichen, dass die gewählten Objekte (Schraffuren) nach der Erstellungszeit (Objekthandle) sortiert werden und der vla-ss neu erzeugt wird.
Wozu brauchst Du den Auswahlsatz als VLA-SS? Die Entities in einem beliebigen Auswahlsatz nach Handle zu sortieren ist eine extrem triviale Sache. Was willst Du damit dann machen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 08. Dez. 2013 10:28 <-- editieren / zitieren --> Unities abgeben:         
Danke, weiss nicht was gemeint ist mit "unglaublich", ist i.d.F auch egal. ... Ich wollte halt mal einen anderen Weg gehen, mir scheint es aber auch eher sehr aufwendig zu sein mit vla-ss zu arbeiten. Vom Prinzip her wollte ich die Schraffuren, die ich über ssget einnsammle gleich direkt an Code: (strcat field "%<\\AcObjProp Object(%<\\_ObjId " (_objectid obj) ">%).Area>% + ")
übergeben, um die Textfields zu den Schraffur-flächen-grössen zu generieren. Der ganze Sinn der Sache ist. Mit den Flächen möchte ich Volumen für Erdarbeiten ermitteln. Mit ssget sammle ich alle ein, mit der Sortfunktion ordne ich sie entsprechend der Erstellungszeit. Ein distanceFaktor zwischen den Schraffuren gibt mir die jeweiligen Volumen zu den Schraffuren aus. Da die Ausgabe der Schraffuren in Stationsrichtung der einzelnen Querprofile erzeugt wurden, lässt sich dadurch die Einzelauswahl aller Schraffurn zur Volumenberechnung vermeiden (Auswahl mit Fenster möglich). ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 08. Dez. 2013 12:35 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
"gleich direkt" .. du übergibst das Objekt doch auch erst wieder einer anderen Funktion (_objectid), wenn diese mit ename nichts anfangen kann, dann überarbeite sie dahingehend das sie es kann. So sollte es egal sein pb du VLA-OBJECT oder ENAME übergibst um die ObjectID zu ermitteln. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 09. Dez. 2013 08:53 <-- editieren / zitieren --> Unities abgeben:         
Ich bin davon ausgegangen, dass die ObjectID verantwortlich für die Erstellungszeit des Objektes. Ist sie aber nicht, wie ich jetzt festgestellt habe. Zu meinem Vorgang, ich habe Schraffuren (eine nach der anderen) erzeugt bei denen ich mittels field die Flächengrössen ausgebe, diese dann weite zur Volumenermittlung hergenommen werden. Wähle ich die Schraffuren einzeln in meine sset, dann erhalte ich ein korrektes Ergebnis. Wähle ich aber alle mit einmal, ist das Ergebnis falsch, weil die Reihenfolge der Objekte im sset falsch ist. Um einmal, die Objekt zu sortieren und in einen vla-sset zu legen habe ich nach langerer Prozedur (vorhergehend) folgende Funktion erstellt Code: (defun sort-ss-VlaObjectID (ss);;; (ssget '((0 . "HATCH"))) ; Erstellt ein vla-sset von gewählten Objekten (setq acdoc (vla-get-activedocument (vlax-get-acad-object))) (setq ss (vla-get-ActiveSelectionSet acDoc)) ; Erstellt ein DXF-sset Sortierung (setq NewSs (ssadd)) ; Speichert die ObjectID in die Rohdatenliste (vlax-for itm ss (setq RawList (append RawList (list (cons itm (vla-get-Handle itm))))) ) ; Sortiert die Rohdaten nach ObjectID (setq NewList (vl-sort RawList (function (lambda (E1 E2) (< (cdr E1) (cdr E2)))))) ; Löscht den vla-sset (vla-delete ss) ; Erstellt einen neuen vla-sset (setq acsel (vla-add (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object)) ) "MyName" ) ) ; Speichert die geordneteten Objekte in den vla-sset (foreach item NewList (vlax-invoke acsel 'additems (list (car item))) ) acsel )
Poblem 1) Sortierung nach Erstellungszeit der Schraffur Problem 2) Der vla-sset "acsel" soll nach Gebrauch wieder gelöscht werden, damit er bei wdh. Aufruf der Funktion nicht existiert
Code: (vla-delete acsel)
löscht in dem Falle nicht korrekt, weil nach Inspektion er immernoch vorhanden ist. ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
  
 Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 09. Dez. 2013 11:22 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
Zitat: Original erstellt von cadplayer: Ich bin davon ausgegangen, dass die ObjectID verantwortlich für die Erstellungszeit des Objektes. Ist sie aber nicht, wie ich jetzt festgestellt habe.
Das kann sie logischerweise nicht sein, weil Du ja schließlich eine DWG in einer andere übernehmen kannst. Mir erschließt sich immer noch nicht der Sinn Deines Vorgehens. Irgenwie scheint Dein Ziel zu sein, eine möglichst komplizierte Vorgehensweise realisieren zu wollen. Du bist in Lisp. Da empfiehlt es sich, ausnahmslos mit Listen von Entities anstatt mit PickSets zu arbeiten. Picksets haben in Lisp zahlreiche unerwünschte Seiteneffekte, während Du auf Listen all die schönen Lisp-Funktionen für Listen anwenden kannst. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 09. Dez. 2013 15:08 <-- editieren / zitieren --> Unities abgeben:         
Nein, ich will die Funktion verbessern, indem man nicht einzeln die Schraffuren wählen muss, sondern gleich als Gesamtauswahl. Da war jetzt meine Frage: wie kann ich die Schraffuren ordnen. Da die weitere Berechnung im Sinne der Arbeitsweise, wann die Schraffuren erzeugt wurden, ermittelt werden soll. Klingt kompliziert, is es aber nicht, da ich eben nur nach Zutat ordnen nach was, fragen will. ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
  
 Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 09. Dez. 2013 15:10 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
Zitat: Original erstellt von cadplayer: Nein, ich will die Funktion verbessern, indem man nicht einzeln die Schraffuren wählen muss, sondern gleich als Gesamtauswahl.
Dazu ist das VLA-SSET völlig unnötig. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 09. Dez. 2013 15:48 <-- editieren / zitieren --> Unities abgeben:         
|
archtools Mitglied
  
 Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 09. Dez. 2013 15:54 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
Zitat: Original erstellt von cadplayer: frage nicht gelesen oder nicht verstanden? wie ordnet man items im sset nach erstellungsreihefolge?
1. Du hast keine Kontrolle darüber, wie ein PickSet aufgebaut ist. Du kannst aber eine Liste von Entities nach allen Kriterien sortieren, die Du aus den Entity-Daten heraus lesen kannst. Ich arbeite u.a. deshalb immer mit Listen von Entities anstelle von PickSets. 2. Das Erstellungsdatum wird normalerweise nicht im Entity gespeichert, also kannst Du nicht danach sortieren. 3. Du kannst beispielsweise unter AppName "DATUM" das Erstellungsdatum am Entity speichern. Dann kannst Du die Entities, die unter Deiner Kontrolle erzeugt wurden, auch danach sortieren. Ergänzung: Du kannst die ganze Datenbank von vorne bis hinten durchlaufen. Darin sollten die Elemente in der Reihenfolge ihrer Erzeugung stehen. Der Auswahlsatz (ssget "X") ist meines Wissens in AutoCAD nach Entstehung sortiert, in BricsCAD aber ist er in anderer Reihenfolge. [Diese Nachricht wurde von archtools am 09. Dez. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 09. Dez. 2013 16:00 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
Antwort1: Gar nicht Antwort2: Man erstellt einen (neuen) Auswahlsatz mit den Objekten in gewünschter Reihenfolge (das was du umgesetzt hast)Antwort3: Da du aber für dein weiteres Vorgehen gar keinen Auswahlsatz benötigst, hat Tom geschrieben... das du das nicht benötigst <recht treffend also>. Du hast eine Liste von Objekten (handle, ename oder vla-object ist ja Wurscht), mit der Liste kannst du weiterarbeiten. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
 
 Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 09. Dez. 2013 17:41 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
|
cadffm Moderator 良い精神
       

 Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 09. Dez. 2013 18:04 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 10. Dez. 2013 10:44 <-- editieren / zitieren --> Unities abgeben:         
Danke ersteinmal für eure Vorschläge, die allesamt sehr hilfreich für mich waren. Die Sortierung nach Handle scheint mir auch die bessere Variante zu sein. Für mein Hauptproblem eine Funktion zu finden einen vla-Auswahlsatz zu bauen, habe ich folgende Funktion erweitert nach meinen Wünschen. Da ich gezwungen bin mit einem vla-sset zu arbeiten und nicht nachfolgende Funktionen im Programm umschreiben wollte. Diese Funktion macht einem das Leben leichter vla-sset aus dxf-sset zu erstellen Code: (defun DXF-SS->VLA-SS (SSET SSNAM / CNT EOBJ NEWSS SAFE SSET SSLST SSOBJ) (setq CNT 0 SSOBJ (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object) ) ) ) (if (vl-catch-all-error-p (vl-catch-all-apply '(lambda (X) (setq NEWSS (vla-add X SSNAM))) (list SSOBJ) ) ) (progn (vla-delete (vla-item SSOBJ SSNAM)) (setq NEWSS (vla-add SSOBJ SSNAM)) ) ) (if SSET (progn (setq SAFE (vlax-make-safearray vlax-vbObject (cons 0 (- (sslength SSET) 1)))) (repeat (sslength SSET) (setq EOBJ (vlax-ename->vla-object (ssname SSET CNT) ) CNT (1+ CNT) ) (setq SSLST (cons EOBJ SSLST)) ) (vlax-safearray-fill SAFE SSLST) (vla-additems NEWSS (variant SAFE)) ) ) NEWSS )
[Diese Nachricht wurde von cadplayer am 10. Dez. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |