Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Auswahl aller Objekte auf bestimmten Layern

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:  Auswahl aller Objekte auf bestimmten Layern (1494 mal gelesen)
Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

erstellt am: 29. Mrz. 2006 13:49    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 Forum,

mit folgendem (aus diesem Forum stammenden; Danke!!)

Code:
(sssetfirst (setq A(ssget "_X" (list(cons 8 (cdr(assoc 8 (entget (car
(entsel)))))))))A)

kann ich alle Objekte eines Layers auswählen.
Wie muss ich den Code nun verändern, damit ich mehrere Layer angeben kann? Oder wird das zu aufwendig?

mfg didi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 29. Mrz. 2006 13: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 Goofy007 10 Unities + Antwort hilfreich

so z.B:
(sssetfirst (setq A(ssget "_X" '((8 . "LAYER1,LAYER2,LAYER3"))))A)

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

erstellt am: 29. Mrz. 2006 14:37    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 Thomas,

danke für die rasche Antwort.
Leider hab ich meine Frage nicht exakt genug formuliert.
Ich möchte die Layer nicht anhand ihrer Namen definieren, sondern duch anklicken auswählen. Wobei die Anzahl vorher nicht bekannt ist, sondern durch beenden der Auswahl definiert werden soll.

Ich hoffe ich bin mit meiner Bitte nicht zu unverschämt, aber ich verstehe zu wenig von Lisp um mir da eine Schleife bauen zu können.

mfg Didi

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: 29. Mrz. 2006 14:48    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 Goofy007 10 Unities + Antwort hilfreich

Hallo Didi,

ok, dann wollen wir mal helfen, dass das Lisp-Wissen wächst.
Du brauchst also eine Schleife die Beendet wird, wenn kein Objekt mehr gewählt wurde.
Das ist dann eindeutig (while
Du brauchst was zur Objektwahl: (entsel ..)
Du brauchst was, um den Layer rauszubekommen: (cdr(assoc 8 (entget ..
Und du brauchst was, um den String zu basteln, der die Layernamen entält.
(setq laySTRING (strcat laySTRING "," LAYERNAME))
und im Ganzen müsste das so, oder so ähnlich aussehen:

(while (setq obj(entsel "Qobjekt wählen: "))
(setq layername(cdr(assoc 8 (entget (car obj))))
laySTRING (if laySTRING layername (strcat laySTRING "," layername)))
)

ungeprüft und gleich hier in den Beitrag greingetippt, daher mal scheuen, ob sich nicht doch kleine Fehler eingeschlichen haben.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 29. Mrz. 2006 15:44    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 Goofy007 10 Unities + Antwort hilfreich

Hallo Didi,
vielleicht hilft Dir auch folgender Gedankenansatz weiter, es werden  alle Layern der ausgewählten Elemente als Liste in den ssget-Filter eingebracht, beim Schnelltest hat es bei mir fuktioniert.
Code:

(defun C:test  (/)
  (sssetfirst
    (setq A (ssget "_X"
  (append (append (list
    (cons -4 "<OR"))
  (aws_list))
  (list (cons -4 "OR>"))
  )))
    A)
  )


(defun aws_list (/)
  (mapcar '(lambda (A)
    (cons 8 A))
  (layer_auswahl)))

(defun layer_auswahl  (/ aws n liste)
  (princ "\nWählen Sie Objekte aus:")
  (if (setq aws (ssget))
    (progn
      (setq n 0)
      (repeat (sslength aws)
(if
  (not
    (member (cdr (assoc 8 (entget (ssname aws n)))) liste))
  (setq liste
  (cons (cdr (assoc 8 (entget (ssname aws n))))
liste)))
(setq n (+ n 1)))))
  liste)


------------------
viele Grüße

Jörn

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

erstellt am: 29. Mrz. 2006 16:06    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,

@ Jörn: Danke, aber Holger hat mein Problem schon gelöst.

@ Holger, Danke, jetzt hab ich nicht nur eine neue (sehr hilfreiche) Funktion, sondern bin auch noch stolz drauf was gelernt zu haben.
Ich hoffe es ist keine Anmaßung, aber ich musste deinen Code etwas abändern. Der Eintrag in meinem Menümacro sieht nun so aus:

Code:
^C^C_select ^C(setq laystring nil)(sssetfirst (setq A(ssget "_X" (list(cons 8 (while (setq obj(entsel "Objekt wählen: "))(setq layername(cdr(assoc 8 (entget (car obj)))))(setq laySTRING (if laySTRING (strcat laySTRING "," layername) layername)))))))A)

Das select^C brauche ich um die vorherige Auswahl aufzuheben.
(setq laystring nil) habe ich einfgefügt um die Variable zu initialisieren.
Vor der ersten laySTRING hab ich ein "(setq" eingefügt, und beim "if" habe ich die Werte umgedreht.(Wie du siehst habe ich deine verstecken Aufgaben gelöst  )
Die vielen Klammern verwirren mich immer noch, aber das Macro macht was es soll.
Deine Erklärungen waren super, eigenlich sind 10 Units zu wenig, aber mehr kann ich dir leider nicht überweisen!

mfg Didi

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: 29. Mrz. 2006 16: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 Nur für Goofy007 10 Unities + Antwort hilfreich

hmm, das waren jetzt keine versteckten Aufgaben <grins> .. ich habe es wirklich nur schnell runtergetippt und da passieren eben solche Dinge, zumal man hier nicht so die rechte Unterstützung beim proggen hat, wie im VLIDE. (wäre ja mal ein Hinweis für Andreas <lach>

Aber es freut mich zu lesen, dass es nicht nur stupide übernommen, sondern auch verstanden wurde - das ist ja das Ziel dieses Forums, Wissen austauschen.

Und positiver Nebeneffekt ist: Jetzt ist noch ein Beitrag da, den du mit 10Us bewerten kannst ;-)

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 29. Mrz. 2006 16:17    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 Goofy007 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Brischke:

Und positiver Nebeneffekt ist: Jetzt ist noch ein Beitrag da, den du mit 10Us bewerten kannst ;-)

IMHO werden dir bloß einmal die 10 gutgeschrieben ..

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

erstellt am: 29. Mrz. 2006 16:49    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 nochmal,

Da ich nun schon Spaß daran habe, hab ich noch etwas rumgebastelt.
Um das Ganze lesbarer zu machen hab ich mein Macro geändert:

Code:
^C^C_select ^C(cond ((null C:LaySel) (load "LaySel"))) LaySel;

und mir eine Datei namens LaySel.lsp geschrieben, welche folgenden Code enthält:
Code:
; Selektieren aller Elemente auf den gepickten Layern
;
(defun C:LaySel (/)
  (setq laystring nil)
  (setq layername nil)
  (while (setq obj(entsel "Objekt wählen: "))
    (setq layername(cdr(assoc 8 (entget (car obj)))))
    (setq laySTRING (if laySTRING (strcat laySTRING "," layername) layername))
  )
  (sssetfirst (setq A(ssget "_X"(list(cons 8 laySTRING))))A)
)

(princ "\nStarten mit laysel")


Also nochmals Danke an alle, hat Spaß gemacht, und ist eine nützliche Erweiterung der CAD-Umgebung.

mfg Didi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 29. Mrz. 2006 18:00    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 Goofy007 10 Unities + Antwort hilfreich

Die Lösung von Holger ist sicherlich die einfachere und verständlichere Lisp-Lösung. Trotzdem möchte ich hier auf die Vorzüge von Jörns Code hinweisen, um seine Leisutng zu würdigen.

Deine (aus Holgers Tipps entstanden Version) muss (wegen entsel) jedes Objekt einzeln anwählen, ssget erreicht durch Auswahlfenster mit 2 Mausklicks unendlich viele Objekte/Layer.
Außerdem wird in Jörns Code jeder Layer nur einmal im Suchstring angegeben, bei deinem Code wird durch Anpicken von 10 Objekten auf dem gleichen Layer, der Layername 10x im Suchstring aufgeführt (hat aber keine praktischen Nebenwirkungen - mehr des Prinzips wegen).


------------------
Mit freundlichem Gruß

Udo Hübner

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