| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Polylinie / entmake / entlast (1255 mal gelesen)
|
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 25. Aug. 2009 10:29 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich ermittle die Liste der Gruppencodes einer Polylinie mit der Funktion entget und ändere in der Liste den Layer. Danach übergebe ich die geänderte Liste der Funktion entmake. Zurück bekomme ich dann eine Liste, wodurch ich annehme, dass eine neue Polylinie erstellt wurde. Führe ich dann die Funktion entlast aus, bekomme ich aber keine Polylinie, sondern eine anderes Objekt zurück. Hier eine Ausschnitt meiner Programmierung: (setq lentgettmp (entget eblocksubele)) (setq llayeralt (assoc 8 lentgettmp)) (setq llayerneu (cons 8 clayerschraff)) (setq lentmaketmp lentgettmp) (setq ilpos (listenpos_ermitteln lentmaketmp llayeralt 0 2)) (setq lentmaketmp (listeninhalt_ersetzen lentmaketmp ilpos llayerneu)) (setq lentkamekon (entmake lentmaketmp)) (if (/= lentkamekon nil) (setq etmp (entlast)) ) ; if Wie muss eine gültige Liste für die Funktion entmake einer Polylinie aussehen? Danke im Voraus und vele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 25. Aug. 2009 10:36 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
Hi Bernd, schau mal hier und in der Hilfe ist entmake auch recht gut erklärt. Edit: entget liefert dir "zuviel" (Objektname...) schau dir mal deine Liste an und subst oder vla-copy... und vla-put.. ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) [Diese Nachricht wurde von Dorfy am 25. Aug. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 25. Aug. 2009 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
ist das eine LW- oder eine 2D-Polylinie, die du entmaken willst ? Bei einer 2D-Polylinie mußt du die Vertexes auch erzeugen ... Wenn du da nicht so fit bist, kopiere einfach die 1.PL mittels Copy-Command-aufruf und ändere den Layer der neu erzeugten dann auch mit (command "_change" ... z.B: (progn (setq LASTOBJ(entlast)) (setq PL (car(entsel "\nPolylinie: "))) (command "_copy" PL "" '(0 0 0)'(0 0 0)) (command "_change" (entnext LASTOBJ) "" "_p" "_Layer" "0" "") ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 25. Aug. 2009 11:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Heiko, danke für Deine Information. Zitat: Original erstellt von Dorfy:
schau mal hier und in der Hilfe ist entmake auch recht gut erklärt.Edit: entget liefert dir "zuviel" (Objektname...) schau dir mal deine Liste an und subst oder vla-copy... und vla-put..
ich habe aus der Liste von entget die Gruppencodes 66 und 70 gelöscht. Die noch vorhandenen Gruppencodes für Objektname und handle werden laut Hilfe zu entmake ignoriert. Totzdem hat es nicht funktioniert. Ich habe ja die Vertexes nicht (siehe Beitrag von Thomas). Ich versuche nun seinen Vorschlag umzusetzen. Viele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 25. Aug. 2009 12:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, danke für Deinen Vorschlag. Zitat: Original erstellt von CADmium: ist das eine LW- oder eine 2D-Polylinie, die du entmaken willst ? Bei einer 2D-Polylinie mußt du die Vertexes auch erzeugen ... Wenn du da nicht so fit bist, kopiere einfach die 1.PL mittels Copy-Command-aufruf und ändere den Layer der neu erzeugten dann auch mit (command "_change" ...z.B: (progn (setq LASTOBJ(entlast)) (setq PL (car(entsel "\nPolylinie: "))) (command "_copy" PL "" '(0 0 0)'(0 0 0)) (command "_change" (entnext LASTOBJ) "" "_p" "_Layer" "0" "") )
bei mir funktioniert der copy-Befehl nicht. Als Information bei "Objekte wählen:" in der Befehlszeile erhalte ich "<Unzulässig Objektname: 7E496428>". Mein zu kopierende Objekt ist vom Typ "POLYLINE", allerdings ist es ein Unterobjekt vom Objekt "BLOCK". Ich vermute, dass deshalb der copy-Befehl nicht funktioniert, oder? Als einzige Möglichkeit könnte ich die Koordinaten der Polylinie ermitteln und damit eine neue erstellen. Viele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 25. Aug. 2009 12:23 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
naja .. um 2d-Polylinien zu kopieren und die Kopie gleich auf einen neuen Layer zu packen sollte das gehen : (if(and(setq PL(car(entsel "\nPolylinie: "))) (setq DATA(entget PL)) (member '(100 . "AcDb2dPolyline") DATA) (setq LAYER "0") ) (progn (setq DATA(subst (cons 8 LAYER) (assoc 8 DATA)DATA)) (entmake (vl-remove-if '(lambda(x) (member (car X) '(-1 330 5))) DATA)) (setq PKT PL) (while (and(setq PKT(entnext PKT)) (setq PDATA (entget PKT)) (=(cdr(assoc 0 PDATA))"VERTEX") ) (entmake (subst(cons 8 LAYER) (cdr(assoc 8 PDATA))PDATA)) ) (entmake '((0 . "SEQEND"))) ) )
.. mit vla-Funktionen gehts natürlich noch etwas einfacher, aber das ist ein anderes Thema.. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 25. Aug. 2009 12:43 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
hi, na dann noch ne zeile in vl (vla-put-layer (car(vlax-invoke (vla-get-Activedocument (vlax-get-Acad-Object)) 'CopyObjects (list (vlax-ename->vla-object (car (entsel)))) )) "Neuer_Layer") ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 25. Aug. 2009 13:10 <-- editieren / zitieren --> Unities abgeben:
|