| |
| 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: Block auflösen - Elemente auf Layer setzen (1399 / mal gelesen)
|
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 21. Nov. 2018 11:32 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Gemeinde, folgende Sachlage: In meiner Zeichnung gibt es ca. 1000 Blöcke auf unterschiedlichen Layern. Diese möchte ich gern auflösen und die, aus den Blöcken, zurückgebliebenen Objekte (Linien, Punkte, etc.), wieder auf den ursprünglichen Layer des Ex-Blockes setzen (da diese ja nun auf "0" gesetzt wurden). Sprich: Block (Layer=X) auflösen -> Objekte bleiben zurück (Layer=0) -> Objekte auf Layer "X" setzen. Vorab habe ich auch schon etwas gebastelt. Hierbei wird eine Liste mit allen Blöcken erstellt (anonyme Blöcke werden heraus genommen): Code:
(defun C:testblock (/) ;Blockliste erstellen (while (setq Objekt (tblnext "Block" (null Objekt))) (setq Blockliste (cons (cdr (assoc 2 Objekt)) Blockliste)) );end while ;Blockliste ohne anonyme Blöcke (setq Zaehler 0) (repeat (length Blockliste) (setq Temp (nth Zaehler Blockliste)) (setq Zaehler (1+ Zaehler)) (if (or (= (substr Temp 1 1) "*") (= (substr Temp 1 1) "_")) (princ) (setq Blockliste_x (cons Temp Blockliste_x)) );end if );end repeat
);end defun
Was mir jetzt noch fehlt, wäre: Ein Schleife in dem ich jeden Block durchgehe. - merke den Layer - löse den Block auf - "_P" nimm dir die Objekte und setze sie auf Layer X Dafür habe ich auch schon einen kleinen Ansatz, aber das funktioniert so noch nicht :P :
Code:
(setq Zaehler 0) (repeat (length Blockliste_x) (setq Blockname (nth Zaehler Blockliste_x)) (setq derblock (ssget "X" (list '(0 . "Block")(cons 2 Blockname)))) (setq LayerBlock (cdr (assoc 8 Blockname))) (command "_explode" derblock "") (setq Zaehler (1+ Zaehler)) );end repeat
Vielleicht kann mir da jemand einen Tipp geben? Grüße Silcono Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 505 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 21. Nov. 2018 11:53 <-- editieren / zitieren --> Unities abgeben: Nur für silcono
Versuche es einfach mal mit dem Autocad-Befehl "BURST" Burst ist Bestandteil der Express-Tools. Aufruf aus Lisp: (C:BURST) ------------------ Gruß aus Wien Bernhard
[Diese Nachricht wurde von Bernhard GSD am 21. Nov. 2018 editiert.] [Diese Nachricht wurde von Bernhard GSD am 21. Nov. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 21. Nov. 2018 11:54 <-- editieren / zitieren --> Unities abgeben: Nur für silcono
Du erstellst einen Auswahlsatz von Blockreferenzen, denke daran: Explode löst in der automatisierten Anwendung nur eine Blockreferenz auf. Lösung: Verwenden eine Schleife für alle Objekte in dem Auswahlsatz oder kontrollierter Einsatz von qaflags. Frage: Muß es Lisp sein? Muß es ganz neu sein? Wenn einfach nur Befehl XPLODE nutzen würdest, mit der Option "von Hauptblock übernehmen" wird genau das gemacht. In der Automatisierung etwas schwierig zu nutzen, entweder über Macro, Script oder Lisp-Workaround gehen (via vla-sendcommand). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 21. Nov. 2018 12:01 <-- editieren / zitieren --> Unities abgeben:
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 21. Nov. 2018 12:05 <-- editieren / zitieren --> Unities abgeben: Nur für silcono
wenn du den command Befehl nutzen willst, musst du dir zuerst das letzte Element merken (lastent) dann den Block auflösen und dann die nun entstandenen Elemente durchgehen mit (entnext) So kannst du jedem Element den Layer zuweisen, wie du möchtest. Alternativ kannst du aber auch vla-explode nutzen, das gibt dir eine Liste aller in der Blockref enthaltenen Objekte zurück. Es wird eine Kopie der Brockref aufgelöst. dann musst du aber noch die verbliebene Original Blockref löschen ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 21. Nov. 2018 12:06 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 21. Nov. 2018 12:16 <-- editieren / zitieren --> Unities abgeben: Nur für silcono
Da ist aber deine Methode besser, einfach auf den vorherigen Auswahlsatz zurückgreifen, denn der wurde beim Explode von Acad brav gefüttert. ABER Ich sehe noch zwei Probleme bei deinem ursprünglichen Plan: Du erstellt einen Auswahlsatz für Blockreferenzen eines Blockes, egal auf welchem Layer diese liegen, (setq derblock (ssget "X" (list '(0 . "Block")(cons 2 Blockname)))) wie willst du dann wissen auf welchen Layer du die explodierten Objekte legen sollst/mußt? und die Zeile (setq LayerBlock (cdr (assoc 8 Blockname))) macht sicher wohl nichts sinnvolles? Wie es hätte gehen können, Beispiel Modellbereich - Für Alle = Auswahlsatz aller Blockreferenzen im Modllbereich - Wenn Namen nicht <dein Namenfilter> - dann Layer der Blockreferenz merken - Explode - Objekte des vorherigen Auswahlsatzes auf gemerkten Layer legen
Aber wenn du die Sache anders gelöst bekommen hast, um so besser.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 21. Nov. 2018 13:38 <-- editieren / zitieren --> Unities abgeben:
|