| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Objektkoordinaten mit Lisp abfragen (1835 / mal gelesen)
|
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2014. VestraCAD. Win 7 SP 1, 64b, FD 1000 GB, 3,1 GHz, 16 GB.
|
erstellt am: 03. Nov. 2016 19:36 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich suche nach einer Möglichkeit, einzelne Eigenschaften von Objekten innerhalb von XRefs abzufragen. AutoCAD scheint das nicht zu können. XLIST reicht mir nicht. Meistens geht es bei mir um Höhen (Z-Koordinaten) von Punkten oder Blöcken, die in XRefs sind (aus Vermessungen). Ich hätte nun die Vorstellung, bevor ich etwas komplett Neues mache, die vorhandene XLIST.LSP der Expresstools ein wenig zu verändern, so dass mir da für Punkte und Blöcke statt des Linientyps die Z-Koordinate angegeben wird. Den Linientyp brauche ich sowieso da nicht. Da ich in meinem Alter nicht mehr ernsthaft zu lispeln anfangen möchte, bitte ich um einen Hinweis, wie die Z-Koordinate von diesen Objekten (Point, Block)wohl auf Lisp heißen könnte. Wahrscheinlich müsste ich auch noch einen String draus machen, ums in sLineType zu setzen... Hilfsweise nehme ich auch gern einen Hinweis auf ein Lisp-Lehrbuch. MfG, wwwilli [P.S. 4.11.2016: Ich weiß nicht was mit dem Thread los ist, bei mir werden die Antworten nicht angezeigt, aber über 'Antwort verfassen' wird es lesbar. Thema ist für mich befriedigend erledigt.] [Diese Nachricht wurde von wwwilli am 04. Nov. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 03. Nov. 2016 19:51 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Das XList habe ich mir jetzt nicht angesehen - das vorweg. Trivial ist die Aufgabe nicht. Die Z-Koordinate kann eine ganz andere sein, als das Objekt selber ausweist. Nimmst du einen Block, zeichnest eine Linie beginnend auf Z=0 und endend auf Z=100. Fügst dann eine Blockreferenz auf Z=2000 ein, dann ist die Z-Koordinate der gepickten Linie nach wie vor Start 0 und Ende = 100. Wenn die Blockreferenz auch noch in Z-Richtung skaliert ist, ist auch das Ende Linie nicht einfach durch Addition der Z-Koordinate der Blockreferenz zu ermitteln. Ebenso verhält sich das beim XRef. nentsel gibt dir das verschachtelte Entity zurück und die Hierarchie in der es verschachtelt ist. Grundsätzlich kannst du aus dieser Rückgabe von nentsel alles herleiten. Dazu brauchst du noch zusätzlich entget, assoc, transform und die Basisfunktionen zum Listenhandling. Es ist an der Stelle eher eine Frage der Ablaufplanung des Programms also die Verknüpfung der Befehle als die Befehle selbst. Ob du mit diesen Stichworten zurechtkommst, vor dem Hintergrund, dass du nicht ernsthaft in Lisp einsteigen möchtest ... ??? Grüße! Holger
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2014. VestraCAD. Win 7 SP 1, 64b, FD 1000 GB, 3,1 GHz, 16 GB.
|
erstellt am: 03. Nov. 2016 20:14 <-- editieren / zitieren --> Unities abgeben:
Hm, das mit dem String hab ich, rtoa. Mir geht es wirklich nur um zwei Zeilen, die die Z-Koordinate eines Blocks bzw. eines Punkts lesen. Die Struktur übernehme ich 100% aus dem vorhandenen .lsp. Das mag ungut erscheinen, mehr geht gerade nicht. Für die 3D-Angabe von Vermesserobjekten gelten Deine Bedenken nicht, denke ich. Ich brauch ja auch nichts Akademisches. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 03. Nov. 2016 20:21 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2014. VestraCAD. Win 7 SP 1, 64b, FD 1000 GB, 3,1 GHz, 16 GB.
|
erstellt am: 03. Nov. 2016 20:29 <-- editieren / zitieren --> Unities abgeben:
XLIST hat an dieser Stelle schon ein Objekt und liest die Eigenschaften zum späteren Anzeigen aus. An dieser Stelle hacke ich mich rein, greife für Blöcke oder Punkte die Z-Koordinate ab, wandle sie zum String um und lasse sie später als "LineType" anzeigen. So ist jedenfalls der Plan. Also hier brauche ich dann so etwa einen ersatz für "(cdr (assoc 7 eList))", so dass die Z-Koordinate rauskommt: Code: ;If the object is text or mtext, find out the style name (if (or (= "TEXT" sObjectType) (= "MTEXT" sObjectType)) (setq sStyleName (cdr (assoc 7 eList))) );end if
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2014. VestraCAD. Win 7 SP 1, 64b, FD 1000 GB, 3,1 GHz, 16 GB.
|
erstellt am: 03. Nov. 2016 20:47 <-- editieren / zitieren --> Unities abgeben:
eList ist eine zuvor ausgelesene Liste von Eigenschaften des ausgewählten Objekts, wenn ich recht verstehe. Da muss es eine feste Reihenfolge geben, an welcher Stelle welche Eigenschaft steht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 03. Nov. 2016 21:33 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Nov. 2016 23:25 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
So einen "Versuch" darf man eigentlich nicht unterstützen, da müssen ja zufällig 20 Parameter stimmen damit das Ergebnis zufällig das Gewünschte ist. Oben ergänzen wo eDATA zur Verfügung steht (setq ZVAL (rtos(cadddr(assoc 10 eLIST))2)) Unten vor den Aufruf der Dialoge einfügen (setq sObjectType (strcat sObjectType " (Z= " ZVAL " )")) Damit bekommt man eine Anzeige hin, aber nur wenn 10 Sterne richtig am Himmel stehen, erhält man auch das gewünschte Ergebnis. Vorausgesetzt man hat sich überhaupt für die Koordinaten eine Blockreferenz innerhalb einer Xref interessiert. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2014. VestraCAD. Win 7 SP 1, 64b, FD 1000 GB, 3,1 GHz, 16 GB.
|
erstellt am: 04. Nov. 2016 16:41 <-- editieren / zitieren --> Unities abgeben:
Hallo, so, das geht jetzt ganz gut. Danke Euch. Ich habe nur ein paar Zeilen in Xlist.lsp ergänzt (unten im Zeilen mit 'my0077' markiert, alles davor und danach unverändert). Damit wird mir bei Punkten und Blöcken die Z-Koordinate als "LineType" angezeigt; der Linientyp von Objekten in XRefs interessiert mich voraussichtlich nicht. Für meine Zwecke ist das völlig ausreichend, damit kann ich XLIST für die genannten Zwecke benutzen. Ich wollte noch den vorher an den beiden Stellen vorhandenen Wert von sLineType mit in die Ausgabe bringen (über concatenate), das habe ich aber nicht geschafft, da könnte die eine oder andere Klammer gefehlt haben ;-). Es bleibt für die AutoCAD-WishList, dass man mit einfachsten Mitteln (Taste+Klick o.ä.) auch in Standard-AutoCAD die Eigenschaften von Elementen in XRefs angezeigt kriegen sollte. MfG, wwwilli Code: ;If the object is a block, call an insert a block and find out the block name ;and the z coordinate ;my0077 (if (= "INSERT" sObjectType) (progn (setq sObjectType "BLOCK" sBlockname (cdr (assoc 2 eList)) sLineType (rtos(cadddr(assoc 10 eList))2 3) ;my0077 ) );end progn );end if ;If the object is a point, find out the z coordinate ;my0077 (if (= "POINT" sObjectType) ;my0077 (setq sLineType (rtos(cadddr(assoc 10 eList)) 2 3));my0077 );end if ;my0077 ;If the object is text or mtext, find out the style name
Ein Problem habe ich hier noch mit der Anzeige vom Thread, da wird ab der 1. Antwort nichts mehr angezeigt. Sonst könnte ich noch Points vergeben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 05. Nov. 2016 11:15 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hallo, also auf deine Aussage hin Zitat: Da ich in meinem Alter nicht mehr ernsthaft zu lispeln anfangen möchte,
möchte ich dir sagen das du das mit bravur gemeistert hast und du da vor deinem Alter keine Angst haben musst Wenn du mit dem Ergebniss arbeiten kannst hat doch alles geklappt. Da gebe ich die sogar Points ------------------ Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2014. VestraCAD. Win 7 SP 1, 64b, FD 1000 GB, 3,1 GHz, 16 GB.
|
erstellt am: 07. Nov. 2016 23:22 <-- editieren / zitieren --> Unities abgeben:
@Meldin: Danke für die Blumen. (Das Verfahren "Wie komme ich zu einem eigenen Programm, ohne eine Ahnung vom Programmieren zu haben" hat sich seit Fortran IV nicht wesentlich geändert. Nur das Internet hat seit Kurzem die Methode deutlich beschleunigt.) ;-) @cadffm: Mich würden doch Deine Bedenken interessieren, dass das nur zufällig funktionieren würde. MfG wwwilli [Diese Nachricht wurde von wwwilli am 07. Nov. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|