|  |  | 
|  | 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:  Auswahl aller Objekte auf bestimmten Layern (1811 mal gelesen) | 
 | Goofy007 Mitglied
 Vermessungstechniker
 
    
 
      Beiträge: 578Registriert: 06.11.2004
 |    erstellt am: 29. Mrz. 2006 13:49  <-- editieren / zitieren -->    Unities abgeben:            
  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
 
         
 
  
 
      Beiträge: 13533Registriert: 30.11.2003
 . |    erstellt am: 29. Mrz. 2006 13:51  <-- editieren / zitieren -->    Unities abgeben:           Nur für Goofy007   
  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
 
    
 
      Beiträge: 578Registriert: 06.11.2004
 |    erstellt am: 29. Mrz. 2006 14:37  <-- editieren / zitieren -->    Unities abgeben:            
  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
 
         
 
  
 
      Beiträge: 4201Registriert: 17.05.2001
 AutoCAD 20XX, defun-tools (d-tools.eu) |    erstellt am: 29. Mrz. 2006 14:48  <-- editieren / zitieren -->    Unities abgeben:           Nur für Goofy007   
  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 und AutoLISPler
 
      
 
      Beiträge: 1781Registriert: 11.10.2004
 Window 11ACAD 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: 29. Mrz. 2006 15:44  <-- editieren / zitieren -->    Unities abgeben:           Nur für Goofy007   
  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
 
    
 
      Beiträge: 578Registriert: 06.11.2004
 |    erstellt am: 29. Mrz. 2006 16:06  <-- editieren / zitieren -->    Unities abgeben:            
  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
 
         
 
  
 
      Beiträge: 4201Registriert: 17.05.2001
 AutoCAD 20XX, defun-tools (d-tools.eu) |    erstellt am: 29. Mrz. 2006 16:14  <-- editieren / zitieren -->    Unities abgeben:           Nur für Goofy007   
  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
 
         
 
  
 
      Beiträge: 13533Registriert: 30.11.2003
 . |    erstellt am: 29. Mrz. 2006 16:17  <-- editieren / zitieren -->    Unities abgeben:           Nur für Goofy007   
 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
 
    
 
      Beiträge: 578Registriert: 06.11.2004
 |    erstellt am: 29. Mrz. 2006 16:49  <-- editieren / zitieren -->    Unities abgeben:            
  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 | 
                       
| 
  
 | | Anzeige: | Infos zum Werbeplatz >> |  | pissuCAD CAD APP für Tiefbau, Umwelt Since 1985, AnkiSOFT Software developes software to design infrastructure projects.
pissuCAD has been developed for Wastewater Network Design. It is for Drawing / Modelling / Planning / Design / Analyze / Simulation the wastewater network.
The software works under AutoCAD or ZWCAD.
 | 
 | 
 | CAD-Huebner Ehrenmitglied V.I.P. h.c.
 Verm.- Ing., ATC-Trainer
 
 
  
 
      Beiträge: 9812Registriert: 01.12.2003
 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11 |    erstellt am: 29. Mrz. 2006 18:00  <-- editieren / zitieren -->    Unities abgeben:           Nur für Goofy007   
  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 |