Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Block auflösen - Elemente auf Layer setzen

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:  Block auflösen - Elemente auf Layer setzen (1343 / mal gelesen)
silcono
Mitglied
Planer


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

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



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

Beiträge: 482
Registriert: 29.08.2002

AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)

erstellt am: 21. Nov. 2018 11:53    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 silcono 10 Unities + Antwort hilfreich

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
良い精神




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: 21. Nov. 2018 11:54    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 silcono 10 Unities + Antwort hilfreich

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


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

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

Oh man, das ist peinlich. :P

Danke euch beiden!!! U10 für euch 
Die Funktionen ersparen mir so einiges.

Ich muss mich bei der Suche besser ausdrücken.

Schönen Tag noch!
Grüße
Silcono

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 21. Nov. 2018 12:05    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 silcono 10 Unities + Antwort hilfreich

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


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

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

Danke CADwiesel!

Dies ist auf jeden Fall interessant für zukünftige LISP-Projekte.

Danke 

Gruß
Silcono

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: 21. Nov. 2018 12:16    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 silcono 10 Unities + Antwort hilfreich

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


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

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

@cadffm

Ich nimm mal deine Anmerkungen mit auf den Weg und versuch neben der einfachen Lösung, auch selbst eine zu basteln.
Da lernt man dann doch auch immer wieder dazu.

Danke 

Grüße
Silcono

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