| |
| 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: Daten mit assoc auslesen (1889 mal gelesen)
|
CADblue Mitglied
Beiträge: 117 Registriert: 20.07.2011 ACAD18,Linear19
|
erstellt am: 20. Jul. 2011 11:05 <-- editieren / zitieren --> Unities abgeben:
Hi an alle!!! Ich wollte mir einen Code schreiben der mir den Diagonalenschnittpunkt eines Rechtecks als bezug nimmt. Problem ist nur wenn ich mit "entsel" die Koordinaten aller einzelnen Gruppencodes anzeigen lasse also speziell den code "10" werden mir 4 Punkte mit dem code 10 gelistet. Wenn ich diese aber jetzt mit assoc auslesen will, zeigt es mir nur den ersten an. Mit welcher Methode kriege ich auch die anderen 3 Koordiaten??? mfg blue Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 20. Jul. 2011 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für CADblue
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 20. Jul. 2011 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für CADblue
@CADmium, ich glaube Deine Zeile alleine verwirrt ein bißchen, ich habe es so im Gefühl, daß blue noch nicht allzu tief im LISP drinsteckt (vielleicht irre ich mich ja auch) Also, wie die Zeilen von CADmium, nur ein bißchen ausführlicher: Variante 1: mit viele (unnötigen) Zwischenvariablen
Code:
(defun c:test ( / LISTE OBJ P1 P2 P3 P4 SP)(setq obj(car(entsel "Poly wählen"))) (setq liste (entget obj)) ;;;mit vl-remove-if alle ungleich 10 rausschmeißen (setq liste (vl-remove-if '(lambda(A)(/= (car A)10))liste)) ;;;wenn es ein Rechteck ist hast Du genau 4 Punkte (setq p1 (cdr(car liste))) (setq p2 (cdr(cadr liste))) (setq p3 (cdr(caddr liste))) (setq p4 (cdr(cadddr liste))) (setq sp(inters p1 p3 p2 p4)) (command "_Point" sp) )
Variante 2: ein bißchen mehr verschachtelt, und dann geht das dann auch schon in die Richtung von CADmiums Zeile
Code:
(defun c:test1( / LISTE OBJ) (if(setq obj(car(entsel "Poly wählen"))) (progn (setq liste (mapcar 'cdr(vl-remove-if '(lambda(A) (/= (car A)10))(entget obj)))) (command "_Point" (inters (car liste)(caddr liste) (cadr liste)(cadddr liste))))))
------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 20. Jul. 2011 11:43 <-- editieren / zitieren --> Unities abgeben: Nur für CADblue
Da das Herausfiltern mehrerer gleicher GC's öfters benötigt wird, wäre es sinnvoll, hierfür eine extra Funktion zu schreiben, (wie z.B. HIER ohne vl-Funktionen). Oder Du nimmst Cadmiums Code: Code: (defun multi-assoc (ename gc/ ) (mapcar 'cdr(vl-remove-if-not '(lambda(X)(=(car X) gc))(entget ename))) )
Aufguf dann z.B.Code: (defun c:test ( / OBJ) (setq obj(car(entsel "Poly wählen"))) (setq punkte (multi-assoc obj 10)) )
Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de [Diese Nachricht wurde von wronzky am 20. Jul. 2011 editiert.] [Diese Nachricht wurde von wronzky am 20. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADblue Mitglied
Beiträge: 117 Registriert: 20.07.2011 ACAD18,Linear19
|
erstellt am: 20. Jul. 2011 13:28 <-- editieren / zitieren --> Unities abgeben:
|