| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Im Block Layer der Elementen ändern. (547 mal gelesen)
|
Nano Mitglied
Beiträge: 179 Registriert: 25.10.2004
|
erstellt am: 14. Feb. 2009 14:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Versuche von einem gewählten Block die bestehenden Layer umzubenennen. Die Layers sind vorhanden. (defun C:test (name / elem layer_liste) (setq name (car (entsel "Wähle Block: "))) (setq elem (tblobjname "BLOCK" name)) (while (setq elem (entnext elem)) (if (= (cdr (assoc 8 (entget elem))) "LALA") (entmod (subst (cons 8 "LOLO" (assoc 8 (entget elem ))(entget elem )))) ) ) ) Gruss Nano Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 14. Feb. 2009 14:32 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 14. Feb. 2009 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
|
Nano Mitglied
Beiträge: 179 Registriert: 25.10.2004
|
erstellt am: 14. Feb. 2009 15:22 <-- editieren / zitieren --> Unities abgeben:
|
Nano Mitglied
Beiträge: 179 Registriert: 25.10.2004
|
erstellt am: 14. Feb. 2009 15:54 <-- editieren / zitieren --> Unities abgeben:
Hallo Udo Es solte eigendlich so gehen. Glaube das ich noch in dieser Zeile ein Fehler habe. (entmod (subst (cons 8 "L_ZUL" (assoc 8 (ENTGET ent)) (ENTGET ent)))) Hast ein Tip?? Gruss Nano (DEFUN C:TEST() (SETQ ta605ent (ENTSEL "\nWÄHLE: ")) (IF (SETQ ent (car ta605ent)) (WHILE (AND (SETQ ent (ENTNEXT ent)) (/= (CDR (ASSOC 0 (ENTGET ent))) "SEQEND") ) (IF (= (CDR (ASSOC 8 (ENTGET ent))) "L_AUL") (entmod (subst (cons 8 "L_ZUL" (assoc 8 (ENTGET ent)) (ENTGET ent)))) ) ) ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 14. Feb. 2009 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
stimmt, da hast du einen Fehler drinn. In welcher Umgebung schreibst du denn? Nimm den integrierten VLIDE, da bekommst du vergessene Klammern ganz schnell raus. (entmod (subst (cons 8 "L_ZUL") (assoc 8 (ENTGET ent)) (ENTGET ent) ) ) 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 |
Nano Mitglied
Beiträge: 179 Registriert: 25.10.2004
|
erstellt am: 14. Feb. 2009 16:32 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmals Danke Udo, im Forum habe verschiedenes gefunden und zusammengefügt. Möchte gerne dies noch > (setq Jblock (tblnext "BLOCK" t)) mit ein Aufforderung: Block wählen. Dies sucht alle Blöcke in der Zchn. >(setq Jblock (tblnext "BLOCK" t))
Bin froh für Tips. Hier das Beispiel. (DEFUN C:AL (/ Jblock blk blkdaten) (setq Jblock (tblnext "BLOCK" t)) (while Jblock (setq blk (tblobjname "BLOCK" (cdr (assoc 2 Jblock)))) (while (setq blk (entnext blk)) (if (= (cdr (assoc 8 (entget blk))) "L_AUL") (entmod (AL1 (entget blk))) ) ) (setq Jblock (tblnext "BLOCK")) ) (command "_.regen") ) (SETQ ta605ent (ENTSEL "\nWÄHLE: ")) (DEFUN AL1 (blkdaten / liste) (setq liste (subst (cons 8 "L_ZUL") (assoc 8 blkdaten) blkdaten)) (if (assoc 62 liste) ;;wenn GC 62 nicht vorhanden über append anhängen (subst (cons 62 256) (assoc 62 liste) liste) (append liste (list (cons 62 256)))) )[b][/b]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 14. Feb. 2009 16:43 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
Hallo Nano, du weißt nicht genau, was du da tust - Kann das sein? Du solltest dir zunächst mal genau klar werden was du überhaupt vor hast, und dann auch ganz genau auf die Wortwahl achten! Weiter oben schreibst du, dass du einen Layer umbenennen willst. Dem Code zufolge willst du allerdings der BlockREFERENZ (Objekt: INSERT) eine andere Layereigenschaft zuweisen. Wenn das dein Ziel ist, dann ist dein Ansatz mit tblnext schon falsch, weil du damit nicht auf die BlockREFERENZEN zugreifst, sondern auf die BlockDEFINITIONEN (Objekt: BLOCK). Du beschreibst dein Ziel damit, dass du einen Block einfügen, und der so erzeugten BlockREFERENZ einen anderen Layer zuweisen. Was willst du tatsächlich? 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 |
Nano Mitglied
Beiträge: 179 Registriert: 25.10.2004
|
erstellt am: 14. Feb. 2009 17:09 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 14. Feb. 2009 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
Hallo nano, mein Name ist seit langem Holger - ich gehe aber davon aus, dass du mich meinst. So ganz klar ist es immernoch nicht, weil du nicht klar angibst, ob nun die Blockreferenz oder die Blockdefinition geändert werden soll? Egal - für beides hast du dafür alles in den Beiträgen drinnen. Dein Tool brauch also folgende Schritte: 1) Objekt wählen -> (entsel) 2) Name ermittelen des Blockes (cdr(assoc 2 (entget SelElem)));SelEleme ist das Element was unter 1) gewählt wurde 3) Nun die Blockdefinition durchlaufen, um die Blockelemente zu ermitteln Die SUBRoutine dafür hast du ja schon weiter oben (defun BLK:GetElemes (nam / #el# blkl erg ergli) (if (= 'STR (type nam)) (setq #el# (tblobjname "BLOCK" nam)) (setq #el# nam) ) (while (and (setq #el# (entnext #el#)) (/= "SEQEND" (cdr(assoc 0(entget #el#)))) ) ;in #el# hast du nun das Element des blocks, was mit (entmod(subst ...)) geändert werden kann (setq blkl (cons #el# blkl)) ) blkl ) Nun solltest du es aber hinbekommen .. ?? Welchen Editor nutzt du denn... im VLIDE kannst du auch debuggen, was für die Fehlersuche sehr hilfreich ist. 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 |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 14. Feb. 2009 19:55 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
So geändert, würde der von dir gepostete (zusammenkopierte) Code funktionieren: Code: (defun C:test (/ name elem layer_liste) (setq name (cdr (assoc 2 (entget (car (entsel "Wähle Block: ")))))) (setq elem (tblobjname "BLOCK" name)) (setq mainelem elem) (while (setq elem (entnext elem)) (if (= (strcase (cdr (assoc 8 (entget elem)))) "LALA") (entmod (subst (cons 8 "LOLO") (assoc 8 (entget elem)) (entget elem)) ) ) ) )
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |