ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!
Hallo WNJT,
zuerst ... nimm bitte nicht nentsel sondern entsel.
Unterschied: nentsel pickt "nested Entities" deshalb das "n" davor. Das bedeutet dass wenn du ein Element anklickst dass sich in einem Block befindet, dieses auch zurückbekommst. Für deinen Fall ist das aber nicht gut, weil du ja die Mitte von Linien brauchst und die Mitte einer Linie in einem Block ist leider woanders. Eine solche Linie befindet sich, genaugenommen, in der Blockdefinition und nicht an der Stelle der Zeichnung an der du sie siehst. Damit bekommst du natürlich auch die Koordinaten aus der Blockdefinition und nicht die die du brauchst.
Zu deiner Frage mit ssget:
ssget liefert dir einen Auswahlsatz und nicht wie entsel eine Liste die unter anderem den Elementnamen enthält.
Um die Elementnamen aus dem Auswahlsatz zu bekommen gibt es verschiedene Möglichkeiten.
ssname Gibt den Objektnamen (Entitynamen) des indizierten Elements eines Auswahlsatzes zurück
(ssname satz n)
ssnamex Ruft Informationen darüber ab, wie ein Auswahlsatz erstellt wurde.
So steht das in der Hilfe, ist aber erst mal etwas undurchsichtig.
Wenn man aber ssnamex ohne Index aufruft (ssnamex satz) dann bekommt man eine Liste mit Listen (ja, hört sich komisch an) und in jeder dieser "Unterlisten" steht an zweiter Stelle (VORSICHT, es gibt natürlich (leider) Ausnahmen) der gesuchte Elementname. Man muss also nur von jeder dieser Unterlisten das zweite Element nehmen und fertig. Mach ich übrigens auch so, weil es echt bequem ist.
(mapcar 'cadr (ssnamex satz))
Jetzt zu den Ausnahmen:
Steht da kein Elementname (warum ist hier erst mal egal, anderes Thema) muss der Eintrag weg.
(vl-remove-if-not
'(lambda (dummy) (= (type dummy) 'ENAME))
(mapcar 'cadr (ssnamex satz))
)
Und das ist erst mal das was du brauchst. Damit bekommst du eine Liste mit Elementnamen zum weiterverarbeiten.
Um diese Liste Element für Element abzuarbeiten kannst du foreach verwenden.
Außerdem würde ich die Mitte zwischen zwei Punkten anders ermitteln.
Koordinaten addieren und durch zwei teilen. Das funktioniert dann sogar 3D.
(mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2))
p1
p2
)
Ich hab in meinen Beispielen mapcar verwendet. Das MUSST du dir unbedingt anschauen, das ist wirklich wichtig für zukünftige Programme weil du sonst gerade bei der Verarbeitung von Listen keinen Spaß hast.
So, dann erst mal schönes Wochenende
------------------
Geht nicht, gibts nicht
Gruß
Andreas
http://kraus-cad.de
[Diese Nachricht wurde von Andreas Kraus am 01. Sep. 2023 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP