| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Autodesk Fusion: Grundlagen - Online, ein Seminar am 23.06.2025
|
Autor
|
Thema: Alles auf vonBlock (1590 / mal gelesen)
|
Balrok Mitglied Technischer Zeichner
Beiträge: 437 Registriert: 02.06.2005 Win10, 64Bit AutoCad Architcture 2021 LiNear 2021 EPLAN P8
|
erstellt am: 22. Okt. 2020 12:09 <-- editieren / zitieren --> Unities abgeben:
Hallo ihr Lieben, ich habe da mal eine Frage und muss euer Wissen anzapfen. Ich wollte nuke so umschreiben, dass er mir alles auf vonBlock legt anstatt auf vonLayer. Irgendwas mache aber falsch. Kann mir da jemand weiterhelfen? ;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. BNUKED 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 BYBLOCK if it isn't. (setq EDATA(subst(cons 62 256)(assoc 62 EDATA)EDATA)) );if (if(assoc 6 EDATA) ;Resets object linetype to BYBLOCK if it isn't. (setq EDATA(subst(cons 6 "BYBLOCK")(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:BNUKE( / 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 bnuke (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 BNuke: ") (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"\BNUKE zum Starten.")(princ)
Grüße Balrok Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 22. Okt. 2020 12:43 <-- editieren / zitieren --> Unities abgeben: Nur für Balrok
Wenn die ganzen Hinweise und Codes zum Thema NUKE BYBLOCK oder NUKE VONBLOCK auf CAD.de nicht ausreichen, [Google: site:cad.de nuke vonblock] / [Google: site:cad.de nuke byblock]was ist denn mit dem Befehl SetNestedObjectsByBlock ? Kurz zum Problem, oder zumindest zu einem der Probleme im Code:
(if(assoc 62 EDATA) ; Wenn eine Farbe ungleich VonLayer zugeordnet ist, dann... (setq EDATA(subst(cons 62 256)(assoc 62 EDATA)EDATA)) ; setze die Farbe VonLayer );if Ich dachte du willst VonBlock? );if (if(assoc 6 EDATA) ; Wenn ein Linientyp ungleich VonLayer zugeordnet ist, dann... (setq EDATA(subst(cons 6 "BYBLOCK")(assoc 6 EDATA)EDATA)) ; Und bei VonLayer soll es bei "VonLayer" bleiben? );if Da fehlt also noch Einiges. Was ist mir SETNESTEDOBJECTSBYBLOCK (sodern man davon ausgehen darf das alle ACA nutzen)? Der wäre einfach zu steuern, ignoriert auch die Eigenschaft "Transparenz", also ziemlich das was Nuke machen würde.. für Layer0,Farbe,Linientyp,Linienstärke Bis auf die "Global"Funktion, die ist nicht 1:1 vorhanden, man MUSS Blockreferenzen wählen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Balrok Mitglied Technischer Zeichner
Beiträge: 437 Registriert: 02.06.2005 Win10, 64Bit AutoCad Architcture 2021 LiNear 2021 EPLAN P8
|
erstellt am: 22. Okt. 2020 14:03 <-- editieren / zitieren --> Unities abgeben:
Was ist mir SETNESTEDOBJECTSBYBLOCK (sodern man davon ausgehen darf das alle ACA nutzen)? Wer denkt sich denn so einen langen Befehl aus? Ist genau was ich brauche. Ich habe bei google gesucht, allerdings mit den falschen Stichwörtern. Heraus kam immer nuke aber nichts anderes. DANKE schon mal. Hat man die Möglichkeit den Befehl auch abzukürzen, oder ist das kompliziert? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 22. Okt. 2020 14:14 <-- editieren / zitieren --> Unities abgeben: Nur für Balrok
PGP Datei? Zudem: Der Befehl steht dir ja jedes Mal zur Verfügung wenn du Blockreferenzen markierst und das Kontextmenü aufrufst .. Ich halte mich aber besser raus, ich habe nämlich keine Ahnung von deinem Programm(ACA), sorry. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Balrok Mitglied Technischer Zeichner
Beiträge: 437 Registriert: 02.06.2005 Win10, 64Bit AutoCad Architcture 2021 LiNear 2021 EPLAN P8
|
erstellt am: 23. Okt. 2020 06:54 <-- editieren / zitieren --> Unities abgeben:
Danke dir. Was meinst Du denn mit PGP-Datei? ...und wieso kennst Du dich nicht mit ACA aus. AutoCad Architecture ist doch nur eine zusätzliche Funktion für AutoCad. Das Grundprogramm ist doch das selbe. Grüße Balrok Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 23. Okt. 2020 08:09 <-- editieren / zitieren --> Unities abgeben: Nur für Balrok
> Hat man die Möglichkeit den Befehl auch abzukürzen, oder ist das kompliziert? >> PGP Datei? >>> Was meinst Du denn mit PGP-Datei?[F1] PGP -> Befehlsaliasse hätte man dort nichts gefunden: Google: AutoCAD PGP > Ich halte mich aber besser raus, ich habe nämlich keine Ahnung von deinem Programm(ACA), sorry. >> ...und wieso kennst Du dich nicht mit ACA aus. >>> weil ich dies nie gelernt oder angewendet habe (Ausnahme: Im Kurs ADT3.0 schon mal gezeigt bekommen) >> AutoCad Architecture ist doch nur eine zusätzliche Funktion für AutoCad. >>> Genau, abgesehen von den Kleinigkeiten welche auch den "AutoCAD Standard" beeinflussen. >> Das Grundprogramm ist doch das selbe. >>> Richtig, in dem Kernprodukt bin in weiten Teilen fit, aber nicht in ACA. Ich weiß also nicht wo ACA-Funktionalität das AutoCAD-Standardverhalten beeinflußt, kenne die Befehle/Funktionen und Menüs nicht, .. Kurz: Keine Ahnung von Architecture. SETNESTEDOBJECTSBYBLOCK zum Beispiel ist kein AutoCAD-Befehl.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Balrok Mitglied Technischer Zeichner
Beiträge: 437 Registriert: 02.06.2005 Win10, 64Bit AutoCad Architcture 2021 LiNear 2021 EPLAN P8
|
erstellt am: 23. Okt. 2020 08:59 <-- editieren / zitieren --> Unities abgeben:
|
Balrok Mitglied Technischer Zeichner
Beiträge: 437 Registriert: 02.06.2005 Win10, 64Bit AutoCad Architcture 2021 LiNear 2021 EPLAN P8
|
erstellt am: 26. Apr. 2023 08:13 <-- editieren / zitieren --> Unities abgeben:
Ich muss das Thema leider nochmal aufgreifen und euer Wissen anzapfen. Ich habe die nuke-LISP nun so umgestalten können, dass die LISP nun alle Elemete des Blocks auf Layer 0 setzt, den Linientyp ausklammert (d.h., was vorher eine gestrichelte Liene war ist immer noch eine gestrichelte Linie), aber leider setzt er mir meine Farbe nicht auf VonBlock! Was muss ich da noch verändern? Normalerweise müsste das doch so richtig sein? Die Zeilen die ich verändert habe ist die (if(assoc 62 EDATA) ;Resets object color to BYBLOCK if it isn't. (setq EDATA(subst(cons 62 "BYBLOCK")(assoc 62 EDATA)EDATA)) Diese beiden Zeilen stehen weiter unten. (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 BYBLOCK if it isn't. (setq EDATA(subst(cons 62 "BYBLOCK")(assoc 62 EDATA)EDATA)) );if ;(if(assoc 6 EDATA) ;Resets object linetype to BYBLOCK if it isn't. ;(setq EDATA(subst(cons 6 "BYBLOCK")(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)
Kann mir jemand helfen? Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 26. Apr. 2023 08:25 <-- editieren / zitieren --> Unities abgeben: Nur für Balrok
|
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 26. Apr. 2023 08:30 <-- editieren / zitieren --> Unities abgeben: Nur für Balrok
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Zitat: Original erstellt von cadffm: (if(assoc 6 EDATA) ; Wenn ein Linientyp ungleich VonLayer zugeordnet ist, dann... (setq EDATA(subst(cons 6 "BYBLOCK")(assoc 6 EDATA)EDATA)) ; Und bei VonLayer soll es bei "VonLayer" bleiben? );if.
Das gilt natürlich auch heute noch, auch für Farbe (statt Linientyp), Objekte mit TrueColor/Farbbuch Farben sind noch nicht berücksichtigt, Transparenz? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |