Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Block im Block sprengen

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 im Block sprengen (4117 mal gelesen)
Jungspunt
Mitglied



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

Beiträge: 21
Registriert: 14.06.2009

erstellt am: 14. Jun. 2009 14:10    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

Hi

Ich habe bei Cadwiesel eine Lisp gefunden wie man die Layer innerhalb eines Blockes
auf Layer 0 setzt und als Layerfarbe vonLayer.
Damit Nehmen die Blöcke automatisch die Farbe des Layers an.

Bei meine Blöcken geht das aber leider nicht, denn es befinden sich innerhalb des Blockes
noch Blöcke die auch gesprengt werden müssen. Damit würde sich dann auch
der Layer automatisch auf 0 Setzen.

Wie muss ich jetzt die Lisp erweitern damit das geht?

Code:

;Redefines ALL objects in any block in the drawing on layer 0.
;(c)Jay Garnett (email jgarnett@enteract.com) Written 1/14/97
;web page http://www.enteract.com/~jgarnett/lispfactory.htm
;Updated 1/25/97 - added select mode
;
;NUKE.LSP redefines all objects in a block on layer 0, with color and linetype
;set to BYLAYER.  NUKED blocks will then take on the properties of the layer
;that they are inserted on. The routine works by modifing objects in the block table,
;so the blocks never have to be exploded.
;
;The global method redefines ALL objects in every block in the current drawing,
;except dimensions, hatching or xrefs, even if they are on a layer that is
;frozen or turned off.
;
;The select method redefines blocks selected with any standard selection method,
;as well as any blocks nested in the selected block(s).

(defun To-0( BLCK / BNAME BLIST E EDATA SPIN TMP )
 
  ;;; Prints a pinwheel on the command line
  (defun Spin ( )
      (setq SYM
        (cond
            ((= SYM nil) "-")
            ((= SYM "-") "\\")
            ((= SYM "\\") "|")
            ((= SYM "|") "/")
            ((= SYM "/") "-")
        )
      )
      (princ (strcat "\rScanning... " SYM "                                    "))
  );end spin
 
  (if (=(type BLCK)(read "LIST"))(setq TMP(car BLCK) BLIST(cdr BLCK) BLCK TMP TMP nil))
  (setq BLCK(tblsearch "BLOCK" BLCK))
  (if
      (and
        (/=(logand(cdr(assoc 70 BLCK))1)1)  ;skips annomyous blocks
        (/= (logand(cdr(assoc 70 BLCK))4)4) ;skips xrefs
      );and
      (progn
        (setq E (cdr (assoc -2 BLCK)))
        (while E
            (if (=(cdr(assoc 0 (entget E))) "INSERT") ;If the object is a block
              (progn
                  (setq BNAME(cdr(assoc 2(entget E)))) ;save the name to a list
                  (if (not (member BNAME BLIST))
                    (if (not BLIST)(setq BLIST (list BNAME)) ;create the list if it doesn't exist
                        (setq BLIST(append BLIST(list BNAME)))
                    );if
                  );if
              );progn     
            );if
            (setq EDATA (entget E))
            (if(assoc 62 EDATA) ;Resets object color to BYLAYER if it isn't.
              (setq EDATA(subst(cons 62 256)(assoc 62 EDATA)EDATA))
            );if
            (if(assoc 6 EDATA) ;Resets object linetype to BYLAYER if it isn't.
              (setq EDATA(subst(cons 6 "BYLAYER")(assoc 6 EDATA)EDATA))
            );if
            (setq EDATA(subst (cons 8 "0")(assoc 8 EDATA)EDATA));changes layer to 0
            (entmod EDATA);updates entity
            (setq E (entnext E));get next enitiy, nil if end of block
            (Spin)
        );end while E
      );progn
  );if
  BLIST; returns names of any nested blocks
);defun


(defun C:NUKE( / BLK_NM CHOICE E EDATA IDX PK_BLK SS)
  (command "._undo" "m")
  (setq CHOICE "S")
  (initget "G S")
  (setq CHOICE(getkword (strcat "\n<G>lobal or <S>elect block: <" CHOICE "> ")))
  (if(not CHOICE)(setq CHOICE "S"))
  (if (= (strcase CHOICE) "G")
      ;global nuke
      (while (setq BLK_NM(tblnext "BLOCK" (null BLK_NM)))
        (TO-0 (cdr(assoc 2 BLK_NM)))
      );while
      ;nuke selected block
      (progn
        (prompt "\nSelect Block(s) to Nuke: ")
        (setq SS(ssget '((0 . "INSERT"))))
        (setq IDX 0)
        (repeat (sslength SS)
            (setq BLK(cdr(assoc 2 (entget(ssname SS IDX)))))
            (cond
              (PK_BLK (setq PK_BLK(append PK_BLK (list BLK))))
              (T (setq PK_BLK(list BLK)))
            );cond
            (setq IDX(1+ IDX))
        );repeat
        (while PK_BLK
            (setq PK_BLK(To-0 PK_BLK))
        );while
      );progn
  );if
  (command "._regen")
  (princ "\rFinished                  ")
  (princ)
);defun
(prompt"\nNUKE zum Starten.")(princ)



Danke

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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 14. Jun. 2009 21:46    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 Jungspunt 10 Unities + Antwort hilfreich

Hallo Jungspunt!
Zitat:
Original erstellt von Jungspunt:
Ich habe bei Cadwiesel eine Lisp gefunden wie man die Layer innerhalb eines Blockes auf Layer 0 setzt und als Layerfarbe vonLayer.


Du meinst wahrscheinlich "Elemente innerhalb eines Blockes", oder? Außerdem macht es grundsätzlich mehr Sinn (abgesehen von Ausnahmen), wenn man die Farbe von Elementen auf Layer 0 innerhalb von Blöcken auf "vonBlock" stellt und nicht auf "vonLayer".

Zitat:
Original erstellt von Jungspunt:
Bei meine Blöcken geht das aber leider nicht, denn es befinden sich innerhalb des Blockes noch Blöcke die auch gesprengt werden müssen. Damit würde sich dann auch der Layer automatisch auf 0 Setzen.


Was bedeutet in deinem Satz "auch"? Und wieso stört das Ursprungen die Layer-Eigenschaft? Wenn ich ursprunge, bleiben die Blockelemente auf dem Layer, auf dem sie auch vorher waren. Was willst du genau? -> bitte genaue Beschreibung.

------------------
Gruß, Stephan
www.stbartl.at

"Every thing should be made as simple as possible but not simpler." - Albert Einstein

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: 15. Jun. 2009 08:04    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 Jungspunt 10 Unities + Antwort hilfreich

@Jungspunt
genau DAS macht das gepostete Lisp ! Ob die Blockreferenzen
verschachtelt, unverschachtelt oder garnicht in der Datei vorkommen
ist uninteressant, "jeder Block" wird überarbeitet.

AUSNAHME: anonyme Blöcke (1.Zeichen im Blocknamen ist ein Sternchen)
Diese werden von Nuke "vorsichtshalber" nicht bearbeitet, denn diese
werden auch für die Darstellung von Bemaßungen etc. benötigt.


Also: Dein Problem sind NICHT verschachtelte Blöcke ! höchstens Unbenannte..

Test: Im Lisp folgende Zeile mit einem Semikolon auskommentieren und durch
nachstehende Zeile ersetzen:

Code:
alt =>        ;(/=(logand(cdr(assoc 70 BLCK))1)1)  ;skips annomyous blocks
neu =>        (not(wcmatch (cdr(assoc 2 BLCK)) "`*D#*"))

------------------
die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk)

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

Jungspunt
Mitglied



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

Beiträge: 21
Registriert: 14.06.2009

erstellt am: 15. Jun. 2009 22:10    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

cadffm un dautocart. Es geht damit leider auch nicht. Wenn ich den Block anschließend öffne dann
ist zwar innerhalb des blockes alles auf Layer 0 gestellt. Trotzdem nimmt der Block nicht
die Layerfarbe an. (Ist ziemlich paradox ich weiß)

Es muss unbedingt alles gesprengt werden innerhalb des Blockes.

Warum das so ist weiß ich auch nicht der block ist ein Element das mit Pit Cad erstellt wurde.
Einer Erweiterung für Autocad.
Die hab ich aber nicht.

Bisher musste ich also immer um den Block die Layerfarbe aufzuzwingen den Block öffnen und darin alles
2 mal sprengen. Dann gings.

Vielleicht gibt es eine Möglichkeit die lisp von Jay daraufhin anzupassen.
Ich wäre dafür sehr dankbar.

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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 15. Jun. 2009 22:47    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 Jungspunt 10 Unities + Antwort hilfreich

Wenn du dir sicher bist, wie sich die Zeichnung verhalten sollte, sie es aber nicht so tut, dann häng bitte eine Bsp-Zeichnung an. So wäre es leichter, das Problem nachzuvollziehen. Danke.

------------------
Gruß, Stephan
www.stbartl.at

"Every thing should be made as simple as possible but not simpler." - Albert Einstein

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

Jungspunt
Mitglied



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

Beiträge: 21
Registriert: 14.06.2009

erstellt am: 30. Jun. 2009 20: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


kugelhahn.zip

 
Hi

hat leider etwas länger gedauert hier nun die dwg mit dem Block

[Diese Nachricht wurde von Jungspunt am 30. Jun. 2009 editiert.]

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: 30. Jun. 2009 21:19    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 Jungspunt 10 Unities + Antwort hilfreich

kannste die auch in einer älteren Version gespeichert ranhängen ?

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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 01. Jul. 2009 13: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 Jungspunt 10 Unities + Antwort hilfreich


kugelhahn.zip

 
Hab es mal als 2004er-Datei abgespeichert.

Es dürfte daran liegen, dass du, Jungspunt, als innerste Elemente (der Blöcke) überall Vielflächennetze hast, deren Unterelemente wiederum auf dem Layer "3H_RU-VL" liegen und anscheinend die Farbe "vonLayer" haben.
Wenn ich die Netze ursprunge, passt wieder alles. Warum die Netze aber so sind, liegt warscheinlich in der Frage, wie sie erzeugt wurden. Mit entmod kann man die Layer und Farbe vielleicht ändern. Mit der normalen AutoCAD-Benutzer-Oberfläche hab ich keinen Weg gefunden, allerdings kenn ich mich mit Vielflächennetzen nicht so gut aus.

------------------
Gruß, Stephan
www.stbartl.at

"Every thing should be made as simple as possible but not simpler." - Albert Einstein

[Diese Nachricht wurde von autocart am 01. Jul. 2009 editiert.]

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 01. Jul. 2009 14:42    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 Jungspunt 10 Unities + Antwort hilfreich

Hallo,
interessantes Verhalten...
mit
(setq EDATA(subst (cons 8 "0")(assoc 8 EDATA)EDATA));changes layer to 0
passiert nix
dann
(setq EDATA(subst (cons 8 "AM_0")(assoc 8 EDATA)EDATA));changes layer to AM_0
weiß  --> es geht
und nun nochmal
(setq EDATA(subst (cons 8 "0")(assoc 8 EDATA)EDATA));changes layer to 0
und es geht doch   

... habe aber gerade nicht die Zeit es mir genauer anzuschauen

mfg heiko


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

autocart
Mitglied
Technischer Redakteur


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

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 01. Jul. 2009 17:43    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 Jungspunt 10 Unities + Antwort hilfreich

also...

nix entmod, da wird man ja wahnsinning!

ActiveX ist hier das Zauberwort. (vl-load-com) und dann für jedes Vielflächennetz:

Code:
(setq ename ...); hier irgentwie den ename des Vielflächennetzes finden - ich hab's testweise mit (car(entsel)) gemacht, ist aber für die Automatisierung natürlich nicht zu empfehlen
(vla-put-layer (vlax-ename->vla-object ename) "0")

Am einfachsten wäre vielleicht im obigen Lisp die Zeile
(setq EDATA(subst (cons 8 "0")(assoc 8 EDATA)EDATA));changes layer to 0
auszukommentieren und nach
(entmod EDATA);updates entity
die Zeile
(vla-put-layer (vlax-ename->vla-object E) "0")
einzubauen und am Anfang des lisp muss noch irgentwo
(vl-load-com)
stehen

EDIT: Und wenn du als Farbe "vonBlock" willst, musst du noch als weiter Zeile nach (entmod EDATA)
(vla-put-color (vlax-ename->vla-object E) "0")
einbauen und am besten die entsprechenden Zeilen, wo die Farbe entmodet wird auskommentieren. Den Linientyp, der da auch im lisp vorkommt, behandle ich jetzt nicht.

EDIT2: Bzgl. BricsCAD (für die, die es interessiert):
In Bcad funkt es grundsätzlich auch, nur hat (zumindest) der äußerste Block noch irgenteinen Datenbank-Fehler, sodass das Bcad-entnext zunächst die einzelnen "Insert"-Objekte IM Block nicht fand (und sich dadurch optisch gar nichts änderte). Ich musste zuerst eine Prüfung (engl. Audit) machen und gefundene Fehler beheben (Bcad fand übrigens 3 Fehler, Acad nur 1en). Danach funkte es in Bcad auch OHNE ActiveX (also nur mit entmod) super. In Acad konnte ich es ohne ActiveX gar nicht lösen, auch dann nicht, wenn ich die von Bcad "reparierte" Zeichnung lud. So haben beide Programme ihre Vor- und Nachteile.

------------------
Gruß, Stephan
www.stbartl.at

"Every thing should be made as simple as possible but not simpler." - Albert Einstein

[Diese Nachricht wurde von autocart am 02. Jul. 2009 editiert.]

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

Jungspunt
Mitglied



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

Beiträge: 21
Registriert: 14.06.2009

erstellt am: 02. Jul. 2009 21:24    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

Hey super,danke für eure Hilfe

Habs so geändert wie von autocart
vorgeschlagen. Damit gehts.

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