Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Objektkoordinaten mit Lisp abfragen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Objektkoordinaten mit Lisp abfragen (1749 mal gelesen)
wwwilli
Mitglied
Ingenieur


Sehen Sie sich das Profil von wwwilli an!   Senden Sie eine Private Message an wwwilli  Schreiben Sie einen Gästebucheintrag für wwwilli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 03. Nov. 2016 19:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für wwwilli 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von wwwilli an!   Senden Sie eine Private Message an wwwilli  Schreiben Sie einen Gästebucheintrag für wwwilli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 03. Nov. 2016 20:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für wwwilli 10 Unities + Antwort hilfreich

Willst du das irgendwo einbauen oder genügen die Koordinaten im Textfenster?
(princ (caddr(getpoint"\nPunkt wählen:")))

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


Sehen Sie sich das Profil von wwwilli an!   Senden Sie eine Private Message an wwwilli  Schreiben Sie einen Gästebucheintrag für wwwilli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von wwwilli an!   Senden Sie eine Private Message an wwwilli  Schreiben Sie einen Gästebucheintrag für wwwilli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 03. Nov. 2016 21:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für wwwilli 10 Unities + Antwort hilfreich

Ersetze: (setq sStyleName (cdr (assoc 7 eList)))
Durch (setq sStyleName (rtos (caddr(cdr (assoc 10 eList)))2 2))
(Ungetestet, nur so reingetippt)

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

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 03. Nov. 2016 23:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für wwwilli 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von wwwilli an!   Senden Sie eine Private Message an wwwilli  Schreiben Sie einen Gästebucheintrag für wwwilli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Meldin an!   Senden Sie eine Private Message an Meldin  Schreiben Sie einen Gästebucheintrag für Meldin

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 05. Nov. 2016 11:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für wwwilli 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von wwwilli an!   Senden Sie eine Private Message an wwwilli  Schreiben Sie einen Gästebucheintrag für wwwilli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz