| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| | |
 | PNY auf der ISC, Hamburg | 22.-26. Juni 2026, eine Veranstaltung am 22.06.2026
|
|
Autor
|
Thema: Kontrollpunkte beliebiger Polylinie in Variable auslesen (1499 mal gelesen)
|
straubi Mitglied
 Beiträge: 5 Registriert: 10.08.2010
|
erstellt am: 10. Aug. 2010 16:48 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich möchte die Kontrollpunkte einer Polylinie, die ich zuvor auswählen kann, in eine Variable auslesen (eine Liste aller Kontrollpunkte der ausgewählten Polylinie) zur späteren Weiterverwendung. Jede Polylinie soll eine separate Liste erzeugen. Mein Ansatz war wie folgt - funktioniert aber nicht: (defun c:Test2() (setq Auswahlsatz (ssget '((0 . "LWPOLYLINE")))) (setq i1 0) (repeat (sslength Auswahlsatz) (setq ename (ssname Auswahlsatz i1)) (setq Elementdetails(entget ename)) (print Elementdetails) (while(not(=(cdr(assoc 0 St-Elementdetails)) "SEQEND")) (setq Kontrollpunkte (cdr(assoc 10 Elementdetails))) (setq ename (cdr(assoc -1 Elementdetails))) (setq Elementdetails(entget(entnext ename))) ) (setq i1 (1+ i1)) ) (setq Auswahlsatz nil) ) Könnt ihr mir helfen? Gruß Straubi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13533 Registriert: 30.11.2003 .
|
erstellt am: 10. Aug. 2010 16:59 <-- editieren / zitieren --> Unities abgeben:          Nur für straubi
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 10. Aug. 2010 17:34 <-- editieren / zitieren --> Unities abgeben:          Nur für straubi
Man muss dabei zwischen 2 Arten Plines unterscheiden POLYLINE (alt) und LWPOLYLINE (neu)
Code:
(defun GetPlineVertexPoints ( ename / edate Punktliste) (setq edate (entget ename)) (cond ;neue Polylinie ((= (cdr (assoc 0 edate)) "LWPOLYLINE") (foreach n1 edate (if (= (car n1) 10) (setq Punktliste (cons (cdr n1) Punktliste))) ) ) ; alte Polylinie ((= (cdr (assoc 0 edate)) "POLYLINE") (while (setq ename (entnext ename)) (setq edate (entget ename)) (if (assoc 10 edate) (setq Punktliste (cons (cdr (assoc 10 edate)) Punktliste))) ) ) ) (if Punktliste (reverse Punktliste) nil) )
Rauskommen tutu dabei so eine Liste, die Du in der (ssget "_WP" Punktliste) direkt verwenden kannst (ich nehme mal an, das ist eien Folgefrage deines vorigen Problems) ((1262.83 997.426) (1635.69 1557.75) (2110.84 862.289) (1605.99 535.982) (1602.69 891.953) (1404.71 684.303) (1556.5 1195.19) (1127.54 509.614)) diese Funktion rufst Du einfach in der Auswahlsatz schelife auf
Code: (setq Auswahlsatz (ssget '((0 . "LWPOLYLINE,POLYLINE")))) (setq i1 0) (repeat (sslength Auswahlsatz) (setq ename (ssname Auswahlsatz i1)) (setq PunktListe (GetPlineVertexPoints ename)) ; mach irgendwas mit der Punktliste gespeichert in der Variable Punktliste (setq i1 (1+ i1)) )
[Diese Nachricht wurde von fuchsi am 10. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 10. Aug. 2010 18:33 <-- editieren / zitieren --> Unities abgeben:          Nur für straubi
Korrigierte Fassung Beid er alten Polylinie muss man auf VERTEX abprüfen Code: (defun GetPlineVertexPoints ( ename / edate Punktliste) (setq edate (entget ename)) (cond ;neue Polylinie ((= (cdr (assoc 0 edate)) "LWPOLYLINE") (foreach n1 edate (if (= (car n1) 10) (setq Punktliste (cons (cdr n1) Punktliste))) ) ) ; alte Polylinie ((= (cdr (assoc 0 edate)) "POLYLINE") (while (and (setq ename (entnext ename)) (setq edate (entget ename)) (= (cdr (assoc 0 edate)) "VERTEX") ) (setq Punktliste (cons (cdr (assoc 10 edate)) Punktliste)) ) ) ) (if Punktliste (reverse Punktliste) nil) )
Man sollte halt eine Version doch nicht ungeteste, nur so aus dem Stegreif geschrieben hier posten.
[Diese Nachricht wurde von fuchsi am 10. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
straubi Mitglied
 Beiträge: 5 Registriert: 10.08.2010
|
erstellt am: 11. Aug. 2010 09:05 <-- editieren / zitieren --> Unities abgeben:         
|