| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Blockdefinition korrigieren (1534 mal gelesen)
|
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 24. Jul. 2006 08:33 <-- editieren / zitieren --> Unities abgeben:
Servus Ein Zeichnung enthält ca. 2500 Inserts, teilweise mit Attributen (eines oder mehrere). Leider wurden die Blöcke ohne die Attribute definiert, die Attribute an die Inserts anderweitig angefügt. Beim Sprengen der Inserts verschwinden auch die Attribute und mit WBLOCK wird auch nur die Blockdefinition exportiert. Hat jemand eine Idee - oder kennt jemand ein Tool - mit dem ich mir das händische Neudefinieren der Blöcke erspare. Muß mit dieser Zeichnung weiterarbeiten und brauche dazu "richtige" Definitionen.
------------------ Gruß, Ernst Meine Homepage Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 24. Jul. 2006 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Hallo Ernst, ein Tool hab ich zwar nicht, aber das kann man ja basteln. Was muß das Tool können ? 1. Alle Attribute zusammensuchen und nach Blockname gruppieren. 2. an alle Blockdefinitionen die fehlenden Attribute anhängen. Am Besten unter Berücksichtigung von Abstand und Drehwinkel vom Einfügepunkt, Skalierfaktor, ... Also wenn keiner was in der Schublade hat, bastel ich mal was zusammen. Dauert aber bis heute Mittag (ich muß ja zwischendurch auch mal was arbeiten). Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 24. Jul. 2006 09:19 <-- editieren / zitieren --> Unities abgeben:
Servus Andreas Zitat: ...wenn keiner was in der Schublade hat, bastel ich mal was zusammen...
Das wäre natürlich super. Ich hab versucht, diverse Tools, wie Holgers Blockdef_forLOAD.LSP so umzubiegen, dass sie nicht mit der Blockdefinition sondern mit dem Insert arbeiten. Muss aber zugeben, dass ich mir mit (mapcar '(lambda)... etwas schwer tu. Ich bin mir auch nicht so ganz im Klaren, welche Daten/Gruppencodes (entmake) unbedingt braucht und welche nicht (bzw. welche stören) ------------------ Gruß, Ernst Meine Homepage Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 24. Jul. 2006 12:15 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
zum Blockreferenzen auflösen und Erhaltung der Attributwerte reicht vielleicht schon BURST aus den Etools... ansonsten ...haben gleichnamige Blockreferenzen wenigstens in jedem Fall die gleichen Attribute? ------------------ - 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 |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Jul. 2006 12:29 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
@CADmium, wenn ich raten darf: NEIN ! @all. Prog müßte so aussehen: Blocktabelle durchhangeln und dabei für Block für Block: Alle Inserts finden, alle deren Attribute zusammensuchen. Block neudefinieren mit allen gefundenen Attributen. Anschließend noch ein Attrefresh, am einfachsten den Inserts alle verwendeten Attribute dranklatschen falls am jeweiligen noch nicht enthalten - damit alle Insert´s der Blockdef. entsprechen. So ist es wenigstens innerhalb einer DWG "ordentlich". Wenn man es gaanz genau nimmt müßte das eigentlich über alle DWG´s hinweg passieren. Und wieder grüßen die Applikationen.. Beispiel Zeichnung A + B , Block "B1" In A wurde nie eine Montagehöhe vergeben, also enthält kein Insert das Attrib "Montagehöhe" - In Zeichnung B wurde aber mal die Montagehöhe vergeben = Inserts von "B1" haben ein Attribute "Montagehöhe" . Somit würde sich die Blockdef. "B1" in Zeichnung A&B unterscheiden. <würg> Zusatz - Wer mal suchen möchte.. Zu dem Burst - es gibt noch was viel beeseres im www, ATT2TXT glaube ich - da bleibt das Insert erhalten wenn gewünscht (wird dann nur der Attributwert gelöscht und als Text an alter Position platziert) [Diese Nachricht wurde von cadffm am 24. Jul. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 24. Jul. 2006 13:11 <-- editieren / zitieren --> Unities abgeben:
Grüß Euch Dass die Blockreferenzen die gleichen Attribute haben ist sehr wahrscheinlich (hab noch nix gegenteiliges bemerkt, aber auch nicht alle 2 1/2 tausend inserts untersucht). Eher besteht die Gefahr, dass die Attributanzahl unterschiedlich ist (einmal mit Höhe, einmal ohne). Dass ich eventuell eine Definition händisch korrigieren muss, kann ich verkraften. BURST oder ATT2TXT nützt mir nix - ich möchte mir eine *.DWT mit den richtigen Blockdefinitionen anlegen. Auf dieser Basis kann ich dann weitere Zeichnungen bearbeiten ------------------ Gruß, Ernst Meine Homepage Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 24. Jul. 2006 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Hallo Ernst, probier das mal aus. Ich habs mal kurz durchlaufen lassen, sollte gehn. Wenn nicht - melde dich ! Gruß Andreas (defun c:blk_redef (/ filter satz n ent_name ent_data blk_bez px sx sy sz w att_list ) (defun edit_ent_data (ent_data) (setq ent_data (subst (cons 40 (/ (cdr (assoc 40 ent_data)) sy)) (assoc 40 ent_data) ent_data ) ) (setq ent_data (subst (cons 41 (/ (cdr (assoc 41 ent_data)) sx)) (assoc 41 ent_data) ent_data ) ) (setq ent_data (subst (cons 50 (- (cdr (assoc 50 ent_data)) w)) (assoc 50 ent_data) ent_data ) ) (setq ent_data (subst (cons 10 (mapcar '/ (mapcar '- (cdr (assoc 10 ent_data)) px) (list sx sy sz) ) ) (assoc 10 ent_data) ent_data ) ) (if (assoc 11 ent_data) (setq ent_data (subst (cons 11 (mapcar '/ (mapcar '- (cdr (assoc 11 ent_data)) px) (list sx sy sz) ) ) (assoc 11 ent_data) ent_data ) ) ) (setq ent_data (list (cons 0 "ATTDEF") (cons 100 "AcDbEntity") (assoc 67 ent_data) (assoc 8 ent_data) (assoc 62 ent_data) (assoc 6 ent_data) (cons 100 "AcDbText") (assoc 10 ent_data) (assoc 40 ent_data) (cons 1 "") (assoc 50 ent_data) (assoc 41 ent_data) (assoc 51 ent_data) (assoc 7 ent_data) (assoc 71 ent_data) (assoc 72 ent_data) (assoc 11 ent_data) (cons 100 "AcDbAttributeDefinition") (cons 3 (cdr (assoc 2 ent_data))) (assoc 2 ent_data) (assoc 70 ent_data) (assoc 73 ent_data) (assoc 74 ent_data) ) ) ent_data ) (setq data_list (list)) (setq filter (list (cons 0 "INSERT") (cons 66 1))) (if (setq satz (ssget "x" filter)) (progn (setq n (1- (sslength satz))) (repeat (sslength satz) (setq ent_data (entget (setq ent_name (ssname satz n)))) (setq blk_bez (cdr (assoc 2 ent_data))) (setq px (cdr (assoc 10 ent_data))) (if (assoc 41 ent_data) (setq sx (cdr (assoc 41 ent_data))) (setq sx 1.0) ) (if (assoc 42 ent_data) (setq sy (cdr (assoc 41 ent_data))) (setq sy 1.0) ) (if (assoc 43 ent_data) (setq sz (cdr (assoc 41 ent_data))) (setq sz 1.0) ) (setq w (cdr (assoc 50 ent_data))) (while (/= (cdr (assoc 0 ent_data)) "SEQEND") (if (= (cdr (assoc 0 ent_data)) "ATTRIB") (progn (if (setq att_list (assoc blk_bez data_list)) (progn (setq att_list (cdr att_list)) (if (car (vl-remove 'nil (mapcar '(lambda (data) (equal (cdr (assoc 2 ent_data)) (cdr (assoc 2 data)) ) ) att_list ) ) ) (print "ja") (progn (print "nein") (setq ent_data (edit_ent_data ent_data)) (setq att_list (cons ent_data att_list)) ) ) (setq att_list (cons blk_bez att_list)) (setq data_list (subst att_list (assoc blk_bez data_list) data_list ) ) ) (progn (setq ent_data (edit_ent_data ent_data)) (setq att_list (cons blk_bez (list ent_data))) (setq data_list (cons att_list data_list)) ) ) ) ) (setq ent_data (entget (setq ent_name (entnext ent_name)))) ) (setq n (1- n)) ) (setq blk_data (tblnext "BLOCK" t)) (while blk_data (setq makeblk_lst (list blk_data)) (setq blk_bez (cdr (assoc 2 blk_data))) (setq ent_name (cdr (assoc -2 blk_data))) (setq kill_list nil) (while ent_name (setq ent_data (entget ent_name)) (if (= (cdr (assoc 0 ent_data)) "ATTDEF") (setq kill_list (cons (cdr (assoc 2 ent_data)) kill_list)) ) (setq makeblk_lst (cons ent_data makeblk_lst)) (setq ent_name (entnext ent_name)) ) (setq att_list (cdr (assoc blk_bez data_list))) (setq att_list (vl-remove-if '(lambda (data) (if (member (cdr (assoc 2 data)) kill_list) t nil ) ) att_list ) ) (foreach ent_data att_list (setq makeblk_lst (cons ent_data makeblk_lst)) ) (setq makeblk_lst (cons (list (cons 0 "ENDBLK")) makeblk_lst)) (foreach data (reverse makeblk_lst) (entmake data) ) (setq blk_data (tblnext "BLOCK")) ) ) ) (princ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 24. Jul. 2006 13:41 <-- editieren / zitieren --> Unities abgeben:
Na da hast Du Dir aber ganz schön viel arbeit gemacht. Besten Dank - werds gleich testen [Diese Nachricht wurde von Geos am 24. Jul. 2006 editiert.]
[Diese Nachricht wurde von Geos am 24. Jul. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 24. Jul. 2006 14:12 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas Das Programm bricht mit: Fehler: Fehlerhafte Assoziationsliste: (nil nil (100 . "AcDbText") (10 0.693608 2.06143 0.0) (40 . 2.5) (1 . "") (50 . 0.176514) (41 . 3.33333) (51 . 0.0) (7 . "SIM") (71 . 0) (72 . 0) (11 -2.27271e+006 -1.74539e+007 0.0) (100 . "AcDbAttributeDefinition") (3 . "BEZ") (2 . "BEZ") (70 . 0) (73 . 0) (74 . 0)) ab. Soweit ich feststellen konnte, dürfte das Problem hier liegen: (setq ent_data (list (cons 0 "ATTDEF") (cons 100 "AcDbEntity") (assoc 67 ent_data) (assoc 8 ent_data) (assoc 62 ent_data) (assoc 6 ent_data) (cons 100 "AcDbText") (assoc 10 ent_data) (assoc 40 ent_data) (cons 1 "") (assoc 50 ent_data) (assoc 41 ent_data) (assoc 51 ent_data) (assoc 7 ent_data) (assoc 71 ent_data) (assoc 72 ent_data) (assoc 11 ent_data) (cons 100 "AcDbAttributeDefinition") (cons 3 (cdr (assoc 2 ent_data))) (assoc 2 ent_data) (assoc 70 ent_data) (assoc 73 ent_data) (assoc 74 ent_data) ) ) ent_data ) Da habe ich dann auch immer meine Probleme, weil "er" die Assoziationsliste anmeckert, aber nicht sagt, was "ihm" nicht passt.
------------------ Gruß, Ernst Meine Homepage Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 24. Jul. 2006 19:01 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
...wenn z.B. Farbe eines Objektes von Layer ist , spart sich ACAD den GC 62 und (assoc 62 ent_data) liefert dann "nil". Ein "nil" aber in der entmake-Liste führt natürlich zu einem Fehler ... ------------------ - 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 |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 24. Jul. 2006 20:01 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Hallo Ernst, ich hab das vorhin einfach mal ohne viel zu überlegen runtergetippt. Versuch mal das hier einzubauen. Wo - sollte klar sein. (if (null (assoc 62 ent_data)) (setq ent_data (append ent_data (list (cons 62 256)))) ) (setq ent_data (list (cons 0 "ATTDEF") (cons 100 "AcDbEntity") (assoc 8 ent_data) (assoc 62 ent_data) (assoc 6 ent_data) (cons 100 "AcDbText") (assoc 10 ent_data) (assoc 40 ent_data) (cons 1 "") (assoc 50 ent_data) (assoc 41 ent_data) (assoc 51 ent_data) (assoc 7 ent_data) (assoc 71 ent_data) (assoc 72 ent_data) (assoc 11 ent_data) (cons 100 "AcDbAttributeDefinition") (cons 3 (cdr (assoc 2 ent_data))) (assoc 2 ent_data) (assoc 70 ent_data) (assoc 73 ent_data) (assoc 74 ent_data) ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 25. Jul. 2006 10:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas Danke für Deine Mühe. Ich konnt's erst jetzt testen - der Abbruch erfolgt immer noch: ; Fehler: Fehlerhafte Assoziationsliste: (nil (100 . "AcDbText") (10 -2.5001 2.55216 0.0) (40 . 3.0) (1 . "") (50 . 0.0556457) (41 . 4.0) (51 . 0.0) (7 . "ISOCP") (71 . 0) (72 . 0) (11 -2.72695e+006 -2.09442e+007 0.0) (100 . "AcDbAttributeDefinition") (3 . "***") (2 . "***") (70 . 0) (73 . 0) (74 . 0)) Um Deine Zeit nicht noch mehr in Anspruch zu nehmen (hab schon ein schlechtes Gewissen) werde ich versuchen, den Fehler einzugrenzen - vielleicht liegts ja auch an meiner DWG. ------------------ Gruß, Ernst Meine Homepage Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 25. Jul. 2006 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Hallo Ernst, kanst du mir mal die Zeichnung (oder einen Teil davon) zukommen lassen ? Das interessiert mich schon, weil in den Listen mit den Objektdaten so komische Werte stehen : (3 . "***") (2 . "***") und dieses nil am Anfang. Das muß doch zu machen sein, geht nicht - gibts nicht Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 25. Jul. 2006 13:28 <-- editieren / zitieren --> Unities abgeben:
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 25. Jul. 2006 22:13 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
So - das musses jezt aber sein ! Der Gruppencode 6 mußte raus aus der Liste. Bitte austauschen: (setq ent_data (list (cons 0 "ATTDEF") (cons 100 "AcDbEntity") (assoc 8 ent_data) (assoc 62 ent_data) (cons 100 "AcDbText") (assoc 10 ent_data) (assoc 40 ent_data) (cons 1 "") (assoc 50 ent_data) (assoc 41 ent_data) (assoc 51 ent_data) (assoc 7 ent_data) (assoc 71 ent_data) (assoc 72 ent_data) (assoc 11 ent_data) (cons 100 "AcDbAttributeDefinition") (cons 3 (cdr (assoc 2 ent_data))) (assoc 2 ent_data) (assoc 70 ent_data) (assoc 73 ent_data) (assoc 74 ent_data) ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 26. Jul. 2006 07:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas Super, jetzt läufts. (Kein Reklamation - nur zur Info: Block "PP" wird nicht koorigiert - hat 2 Attribs / mit 1 definiert) Nochmals herzlichen Dank. (Wäre viel mehr als 10 U's wert, aber mehr als 10 pro Thread geht offensichtlich net)
------------------ Gruß, Ernst Meine Homepage Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 26. Jul. 2006 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Hallo Ernst, danke freut mich. Aber bei mir geht auch der Block PP. Der hatte ein unsichtbares Attribut PNUM und bekommt dann noch zwei Attribute *** und HOEHE. Naja an dem Programm kann ja noch rumgeschraubt werden. Ich denke den einen Block hast du schneller zu Fuß neu definiert. Viel Spass noch damit und bis zum nächsten Mal Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 26. Jul. 2006 11:46 <-- editieren / zitieren --> Unities abgeben:
|