| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Attribut Eingabeaufforderung ändern im Block (2583 / mal gelesen)
|
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 07. Sep. 2018 09:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich habe folgendes Problem: für einen Kunden müssen unsere eingefügten Blöcke ein wenig modifiziert werden. D.h. ich muss den Attributnamen und die Eingabeaufforderung ändern. Der Attributname lässt sich ja noch leicht finden mit den Bit. Aber welchen Bit hat die Eingabeaufforderung? ((-1 . <Objektname: 1e1603d04c0> ) (0 . "INSERT") (330 . <Objektname: 1e126680750> ) (5 . "2B2C") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Gerät") (100 . "AcDbBlockReference") (66 . 1) (2 . "DAW_HP-Z4") (10 310.0 205.0 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) _$ Weiß jemand weiter? Vielen Dank! Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Sep. 2018 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 07. Sep. 2018 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
AutoLisp, DXF-Code 3 in der entsprechenden Attributdefinition, bei den Blockreferenzen bist du falsch. Dort wo du auch den Namen der Attributdefinition ändern mußtest (mußtest = >wenns ordentlich werden soll). VL, PromptString
___________ Befehl: BLOCK? Startet... Enter block name <Return to select>: www Enter an entity type <Return for all>: Press ESC to exit or any key to continue. ((0 . "BLOCK") (2 . "www") (70 . 2) (4 . "Blockbeschreibung<hier eintragen>") (10 0.0 0.0 0.0) (-2 . <Objektname: 7ff73ec1d570> )) ((-1 . <Objektname: 7ff73ec1d570> ) (0 . "CIRCLE") (330 . <Objektname: 7ff73ec1d540> ) (5 . "267") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10 0.0 0.0 0.0) (40 . 5.12718) (210 0.0 0.0 1.0)) ((-1 . <Objektname: 7ff73ec1d580> ) (0 . "ATTDEF") (330 . <Objektname: 7ff73ec1d540> ) (5 . "268") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbText") (10 -1.77081 -1.09047 0.0) (40 . 2.5) (1 . "V1") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Standard") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "E1") (2 . "A1") (70 . 0) (73 . 0) (74 . 0) (280 . 1)) ____ Steinalt, aber zur Veranschauung http://ww3.cad.de/foren/ubb/Forum145/HTML/000482.shtml
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Sep. 2018 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
|
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 07. Sep. 2018 12:35 <-- editieren / zitieren --> Unities abgeben:
Hallo und schon einmal vielen Dank für die Hilfe! Ich bin jetzt mit dem Befehl (tblsearch "BLOCK" HP_Z4") rangegangen. Dort bekomme ich auch die Attributabfrage, allerdings habe ich noch ein wenig Probleme beim zurückschreiben meiner geänderten Einträge. Das Hauptproblem allerdings ist, dass nun auch die Werte der Attribute überschrieben werden mit dem "ersten" Eintrag... Gibt's da keine andere Möglichkeit? Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Sep. 2018 12:56 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
|
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 07. Sep. 2018 14:01 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, Dein Programm ist sehr gut, allerdings passiert auch hier das mein ausgewähltes Attribut auf den Vorgabewert gesetzt wird, nachdem ich den Namen geändert habe. Zudem möchte ich nicht jeden Block einzeln auswählen, sondern möchte, dass jeder Block untersucht wird. Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Sep. 2018 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
|
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 10. Sep. 2018 09:46 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, ich habe jetzt mal eine DWG und meine gebastelte LSP angehängt. Dein Programm funktioniert halt auch zum Teil. Wir haben sogenannte Geräteblöcke nach dem Kundenstandard. Diese werden bei uns ausgelesen und mit Kabelnummern versehen. Das Problem entsteht bei der Übergabe der Doku an den Kunden hier sollen die Blöcke nicht mehr einheitliche Attributnamen haben, sonder wo jetzt der Gerätename (Attribut DEVISE)steht soll dann DAW stehen. Ich hoffe das ist verständlich. Mein Problem bei Deinem Programm ist, dass die Eintrage (Attributwert) verändert werden. Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 10. Sep. 2018 13:24 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
|
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 10. Sep. 2018 14:11 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 10. Sep. 2018 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
|
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 14. Sep. 2018 08:17 <-- editieren / zitieren --> Unities abgeben:
Hallo! Irgendwie bin ich mit meinem Problem noch nicht weiter gekommen! Ich habe immer noch das Problem, wenn ich den Attributnamen und die Eingabeaufforderung geändert habe und diese Einträge mit entmake und entupd zurückschreibe, dann wird mein Attributwert leider auf den Ursprungswert zurückgesetzt und der Eintrag geht verloren! Kann mir da jemand weiter helfen? Grüße Sven
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005 HP ZBook Intel Core 12.Gen i7 2,3GHz 32GB RAM Windows 11 Pro AutoCAD 2024
|
erstellt am: 14. Sep. 2018 09:48 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 14. Sep. 2018 10:59 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
|
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 14. Sep. 2018 11:07 <-- editieren / zitieren --> Unities abgeben:
|
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005 HP ZBook Intel Core 12.Gen i7 2,3GHz 32GB RAM Windows 11 Pro AutoCAD 2024
|
erstellt am: 18. Sep. 2018 15:31 <-- editieren / zitieren --> Unities abgeben:
Hallo! Leider bin ich mit meinem Problem immer noch nicht weiter gekommen. Ich stecke immer noch an der Stelle fest, wo ich die neuen Einträge an das Attribut übergeben habe. Schreibe ich diesen Datensatz mit entmod zurück, dann sehe ich in der DWG keine Veränderung. Erst wenn ich diesen Block in Ursprung setzte oder neu einfüge, dann sehe ich den neuen Attributnamen und die Anfrage. Ich möchte jedoch gleich in allen eingefügten Blöcken diese Änderungen sehen, ohne das die eingetragenen Werte überschrieben werden, sowie in den Tool von CADmium. Kann mir jemand weiterhelfen? Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 18. Sep. 2018 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
Die Eingabeaufforderung kommt nur von der Attributdefinition (also von dem ATTDEF in deinem BLOCK), Der Attributname ist Eigenschaft von deinen Attributen (also die bestehenden Attribute deiner Blockreferenzen), wie auch von der Attributdefinition in deinem Block, welche als Vorlage für Attribute an neuen Blockreferenzen dient. Möchtest du die Eingabeaufforderung ändern: BLOCK->ATTDEF->Gruppencode DXF 3 Möchtest du den Attributnamen für Attribute zukünftiger Blockreferenzen ändern, ändere die Blockdefinition: BLOCK->ATTDEF->Gruppencode DXF 2 Möchtest du den Attributnamen für Attribute an bestehnden Blockreferenzen ändern, ändere die Attribute aller gewünschten Blockreferenzen: INSERT->ATTRIB->Gruppencode DXF 2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 19. Sep. 2018 07:26 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
Hallo Sven, ich habe mal ein Beispiel gemacht: In der Variablen BlockName musst Du Deinen Blocknamen eintragen. In der Liste AttListe wird - unter "Name" der alte Attributname und dann der neue Attributname eingetragen. - unter "Eingabeaufforderung" nur im 2.ten Wert die neue Eingabeaufforderung eingetragen. Code:
(defun c:test( / ATTLISTE AWS BLOCKNAME N VLA-ATT VLA-ATTDEF) (setq BlockName "BATPKT" AttListe '(("Name" "Hoehe" "z-Wert") ("Eingabeaufforderung" nil "Geben Sie den z-Wert ein") )) (if(setq vla-AttDef (test:vlaAttDef BlockName (cadr(assoc "Name" AttListe)))) (progn ;;;Name in AttDefinition ändern (vla-put-TagString vla-AttDef (caddr(assoc "Name" AttListe))) ;;;Eingabeaufforderung in Definition ändern (vla-put-PromptString vla-AttDef (caddr(assoc "Eingabeaufforderung" AttListe))) ;;;Auswahlsatz mit allen Blöcken in Zeichnung (if (setq aws (ssget "_X" (list (cons 0 "INSERT") (cons 2 BlockName) ))) (progn (setq n 0) (repeat (sslength aws) (if(setq vla-att(test:vlaAtt (vlax-ename->vla-object(ssname aws n)) (cadr(assoc "Name" AttListe)))) ;;:wenn alter AttributName vorhanden in Blockreferenz ;;;dann den Attributname ändern (vla-put-TagString vla-att (caddr(assoc "Name" AttListe))) ) (setq n (+ n 1))) ) ) ) ) ) (defun test:vlaAttDef (BlockName Attname / LISTE) (if (tblsearch "BLOCK" BlockName) (vlax-for ITEM (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))BlockName) (if (and(= (vla-get-Objectname ITEM) "AcDbAttributeDefinition") (=(strcase(vla-get-TagString ITEM)) (strcase Attname))) (setq vla-AttDef ITEM)))) vla-AttDef) (defun test:vlaAtt (vla-obj Attname / elem list_att) (if (=(vla-get-hasattributes vla-obj):vlax-true) (cadr(assoc(strcase AttName) (mapcar '(lambda(A) (list(strcase(vlax-get A 'TagString))A)) (vlax-safearray->list (vlax-variant-value (vla-getattributes vla-obj))))) ) ) )
Starten des Codes mit "test", Ergebnisse auf Plausibilität prüfen, bei mir hat es funktioniert. ------------------ viele Grüße Jörn http://www.bosse-engineering.com Attribute freistellen Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 19. Sep. 2018 11:19 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, vielen Dank dafür, aber die Einträge in die entsprechenden Gruppencodes zu bekommen ist nicht mein Problem. Das hat bereits geklappt! Beim Zurückschreiben (z. B. mit Attsync) kam aber immer der ursprünglich festgelegte Wert als Eintrag zurück in alle Blöcke. Also: BLOCK->ATTDEF->Gruppencode DXF 1 wird übernommen! Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005 HP ZBook Intel Core 12.Gen i7 2,3GHz 32GB RAM Windows 11 Pro AutoCAD 2024
|
erstellt am: 19. Sep. 2018 11:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, vielen Dank für Dein Beispiel! Es funktioniert, wenngleich ich auch noch nicht genau verstehe warum. Mir sind diese VisualLisp Funktionen leider noch nicht alle bekannt, so dass ich mich da nicht ran traue! Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 19. Sep. 2018 12:50 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
@Sven Wenn du dem Weg (den Antworten) folgen würdest, so würdest du überhaupt kein Attsync "zu übernehmen" benötigen und die Werte wprden sich nicht ändern. Ich kann ausschliessen dass du in der Sache unseren Ausführungen gefolgt bist, denn ein anschliessendes UNNÖTIGES Attsync hätte dann keine Attributwert-Änderung zur Folge. Hier noch mal was du gemacht hast: Änderung der Blockdefinition inkl. Änderung von Attributdefinitions-Namen. Anschließend ein Attsync. Was passiert dabei: Alte Attribute der Blockreferenzen werden gelöscht und neue Attribute (mit anderen Namen) werden erstellt. Beim erstellen von Attributen wird der Vorgabewert übernommen(daher die Änderung des Attributwertes). Umgehen kann man dies, wie oben angesprochen, indem man selbst die Attribute der Blockreferenzen umbenennt. Also nicht nur die Attdef im Block ändert, sondern auch Gruppencode 2 der ATTRIB an den INSERT Objekte der Zeichnung. VLisp: Letztendlich ist es egal ob AutoLisp oder mit VLisp Erweiterung, der Weg ist grundsätzlich gleich.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 19. Sep. 2018 13:09 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, das tut mir leid, aber ich habe die Lösung so nicht gefunden. Ich weiß dass ich kein Attsync nehmen soll, aber was dann? Die Gruppencodes habe ich geändert, aber wir zurückschreiben? Bei meinen Blöcken/Attributen hat sich so nichts getan. Halt nur mit Attsync. Viellicht brauche ich eine Brille, ich finde die Lösung nicht... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 19. Sep. 2018 13:52 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
Was liefert dir folgende Zeile zurück wenn du auf dein Versuchskaninchen-Attribut klickst: (setq VERSUCHSKANINCHEN (entget(car(nentsel)))) Was passiert wenn du über BEDIT den Namen (und Eingabeaufforderung) der zugehörigen Attributdefinition änderst und anschließen das Versuchskaninchen-Attribut wie folgt änderst: (entmod(subst '(2 . "NEUERNAME")(assoc 2 VERSUCHSKANINCHEN) VERSUCHSKANINCHEN)) Beim einfügen neuer Blockreferenzen sollte nun alles wie gewünscht verlaufen und unser bereits bestehendes Versuchskaninchen sollte ebenfalls den neuen Attributnamen anzeigen, mit dem alten/unveränderten Attribwert. Ist es nicht so?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 19. Sep. 2018 15:26 <-- editieren / zitieren --> Unities abgeben:
Wenn ich über BEDIT die Einträge manuell ändere, dann sind diese auch nicht sichtbar, wenn ich hinterher den Block mit EATTedit anschaue. Nur in der Eingabeaufforderung steht plötzlich nichts mehr. Wenn ich jetzt mit ATTSYNC den Block auswähle sind die geänderten Attributname und Eingabeaufforderung sichtbar, allerdings überschreibt er bei allen eingefügten Blöcken die eingetragenen Werte. Das Gleiche passiert halt, wenn ich das über mein Programm ablaufen lasse. Wenn ich dann den Block neu einfüge, dann ist es gleich richtig, allerdings ist im Wert natürlich dann nur der Vorgabewert zu sehen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 19. Sep. 2018 15:51 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
An welchem Teil meiner Antwort stolperst du? LinkZurAntwortOben "Wenn ich über BEDIT die Einträge manuell ändere," GUT
" dann sind diese auch nicht sichtbar, wenn ich hinterher den Block mit EATTedit anschaue.Nur in der Eingabeaufforderung steht plötzlich nichts mehr." 1. In dem Moment verfügt dein Block über keine Attributdefinition mit gleichem Namen wie dieses Attribut, also kann auch keine Eingabeaufforderung aus der Blockdefinition ermittelt werden. 2. Der Name des Attributes wurde in dem Moment nicht nicht geändert, also siehst du logischerweise "den alten" Namen.
"Wenn ich jetzt mit ATTSYNC den Block auswähle " Solltest du das machen? Ich habe dies nicht geschrieben -> LinkZurAntwortOben
" sind die geänderten Attributname und Eingabeaufforderung sichtbar, allerdings überschreibt er bei allen eingefügten Blöcken die eingetragenen Werte." Das habe ich hier im Detail erklärt -> https://ww3.cad.de/foren/ubb/Forum145/HTML/004621.shtml#000021
"Das Gleiche passiert halt, wenn ich das über mein Programm ablaufen lasse." Weil du das gleiche machst in deinem Programm, also ist es gut wenn das Ergebnis identisch ist.
"Wenn ich dann den Block neu einfüge, dann ist es gleich richtig, " Logisch, nach geänderter Blockdefinition werden alle neuen Blockreferenzen mit den Attributen gemäß der aktuell(geänderten) Blockdefinition erstellt.
" allerdings ist im Wert natürlich dann nur der Vorgabewert zu sehen." Was ich hier erklärt hatte -> https://ww3.cad.de/foren/ubb/Forum145/HTML/004621.shtml#000021
Dir ist einfach nicht bewußte dass Attribute(hängen an Blockreferenzen) NICHTS mit der Blockdefinition zutun haben. Dialog wie eattext zeigen die Eingabeaufforderung der aktuellen Attributdefiniton an, WENN eine vorhanden ist mit gleichem Namen. Bitte gehe doch mal in der (original, nicht verkorksten) DWG meine Antwort durch und berichte! Hier noch mal der direkte Link um nichts zu verwechseln https://ww3.cad.de/foren/ubb/Forum145/HTML/004621.shtml#000023 Allgemeiner Lesetip http://ww3.cad.de/foren/ubb/Forum54/HTML/013223.shtml
Ich kann an den Fakten nichts ändern, drauf schlagen würde also nicht helfen, sorry.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 20. Sep. 2018 11:38 <-- editieren / zitieren --> Unities abgeben:
Was liefert dir folgende Zeile zurück wenn du auf dein Versuchskaninchen-Attribut klickst: (setq VERSUCHSKANINCHEN (entget(car(nentsel))))Bevor mein Programm und nachdem mein Programm durchgelaufen ist steht dort halt: ((-1 . <Objektname: 1a838d62ce0> ) (0 . "ATTRIB") (330 . <Objektname: 1a838d62cc0> ) (5 . "2B2E") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "T35") (100 . "AcDbText") (10 310.0 210.0 0.0) (40 . 3.5) (1 . "DAW1") (50 . 0.0) (41 . 0.9) (51 . 0.0) (7 . "ISO-35") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "DEVISE") (70 . 0) (73 . 0) (74 . 0) (280 . 0)) Stehen sollte dort aber nach folgenden Zeilen aus meinem Programm: (setq unter-blk-datenb (subst (cons 2 neutext) (assoc 2 unter-blk-datenb) unter-blk-datenb)) (setq unter-blk-datenb (subst (cons 3 "INTAK") (assoc 3 unter-blk-datenb) unter-blk-datenb)) (entmod unter-blk-datenb) Dieses hier: ((-1 . <Objektname: 1a81c893c10> ) (0 . "ATTDEF") (330 . <Objektname: 1a838d62c10> ) (5 . "6BB1") (100 . "AcDbEntity") (67 . 0) (8 . "T35") (100 . "AcDbText") (10 0.0 5.0 0.0) (40 . 3.5) (1 . "CPU") (50 . 0.0) (41 . 0.9) (51 . 0.0) (7 . "ISO-35") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "INTAK") (2 . "DAW") (70 . 0) (73 . 0) (74 . 0) (280 . 0)) Allerdings ist hier schon der Fehler, dass im Gruppercode 1 der Vorgabewert drin steht. Diesen möchte ich aber nicht haben, sondern den jetzigen Eintrag behalten!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005 HP ZBook Intel Core 12.Gen i7 2,3GHz 32GB RAM Windows 11 Pro AutoCAD 2024
|
erstellt am: 20. Sep. 2018 11:51 <-- editieren / zitieren --> Unities abgeben:
Hallo CADffm, gernerell denke ich, dass wir aneinander vorbei reden. Ich bin mir schon bewusst, wie sich ein Block verhält und was mit Attributen in bestimmten Fällen passiert oder eben nicht, dafü arbeite ich auch schon zu lange mit AutoCAD. Allerdings liegt das Programmieren mit Lisp oder VisualLisp leider nicht in meinem täglichen Aufgabengebiet. Da habe ich deutlich Nachholbedarf, auch bei den Begrifflichkeiten. Deshalb hoffe ich ja auf Hilfe bei meinem Problem! Mein Problem mit dem ATTSYNC (entmod/entupd) ist mir klar, nur wie kann ich es umgehen? Du kannst mir wieder vorwerfen ich lese die Antworten nicht, aber ich sehe leider keine Anwort auf meine Frage! Vielen Dank! Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 20. Sep. 2018 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
Keine Ahnung warum du nicht einfach mal dieser Anleitung folgst: http://ww3.cad.de/foren/ubb/Forum145/HTML/004621.shtml#000023 ich war&bin in der Hoffnung es würde dann KLICK machen. Hier mal eine (schlechte) Aufnahme wenn ich es machen: http://recordit.co/qY91UahwsT Den Namen(dxf2) und die Eingabeaufforderung(dxf3) kannst du gerne später mit Lisp machen wie bisher, es geht in der Anleitung&gif nur darum einmal erfolgreich ein Attribut geändert zu haben."gernerell denke ich, dass wir aneinander vorbei reden." Eigentlich nein. "Mein Problem mit dem ATTSYNC (entmod/entupd) ist mir klar, nur wie kann ich es umgehen? Angenommen es wäre dir klar, dann sind dies die Antworten welche du nicht als diese erkennst:
Zitat: die Änderungen werden an der Blockdefinition und deren Referenzen vorgenommen
Zitat: Mit separater Änderung in Blockdefinition und allen Referenzen ... wie im von mir geposteten Tool.
Zitat: ... Der Attributname ist Eigenschaft von deinen Attributen (also die bestehenden Attribute deiner Blockreferenzen), wie auch von der Attributdefinition in deinem Block, welche als Vorlage für Attribute an neuen Blockreferenzen dient. ... Möchtest du den Attributnamen für Attribute zukünftiger Blockreferenzen ändern, ändere die Blockdefinition: BLOCK->ATTDEF->Gruppencode DXF 2Möchtest du den Attributnamen für Attribute an bestehnden Blockreferenzen ändern, ändere die Attribute aller gewünschten Blockreferenzen: INSERT->ATTRIB->Gruppencode DXF 2
"Du kannst mir wieder vorwerfen ich lese die Antworten nicht, aber ich sehe leider keine Anwort auf meine Frage!" Mehr Mühe wie bisher möchte ich mir nicht machen. Da keine konkreten Rückfragen zu den jeweiligen Antworten kamen mu0 man davon ausgehen du hast alles verstanden, denn ansonsten würdest du ja nachfragen und dich auf die konkrete Aussagen beziehen. Zitat: Möchtest du die Eingabeaufforderung ändern: BLOCK->ATTDEF->Gruppencode DXF 3Möchtest du den Attributnamen für Attribute zukünftiger Blockreferenzen ändern, ändere die Blockdefinition: BLOCK->ATTDEF->Gruppencode DXF 2 Möchtest du den Attributnamen für Attribute an bestehnden Blockreferenzen ändern, ändere die Attribute aller gewünschten Blockreferenzen: INSERT->ATTRIB->Gruppencode DXF 2
Zitat: Umgehen kann man dies, wie oben angesprochen, indem man selbst die Attribute der Blockreferenzen umbenennt. Also nicht nur die Attdef im Block ändert, sondern auch Gruppencode 2 der ATTRIB an den INSERT Objekte der Zeichnung.
Und jetzt frage bitte ganz explizit nach dem Teil den du nicht verstehst, daraus könnte ein Dialog entstehen der dich zum Ziel bringt, so kann man ganz konkret und GERNE auf genau diesen Punkt eingen. PS: Wenn noch mal eine Aussage kommt bei der ersichtlich ist du bist nur den halben Weg gegangen oder aber hast wieder keine konkrete Frage gestellt, bin ich auch raus - ein oder zwei funktionierende Programme hast du ja schon und im Forum finden sich sicher noch 5 Stück. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 20. Sep. 2018 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
|
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 21. Sep. 2018 10:19 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, vielen Dank für Deine Geduld, jetzt habe ich tatsächlich meinen Fehler gefunden! Ich bin fehlgeleitet durch die ersten beiden Posts, nur an der Blochdefinition am werkeln gewesen. jetzt habe ich es ein wenig geändert, so dass die Eingabeaufforderung in der Blockdefinition für alle ändere, während ich den Blocknamen im Blockinsert ändere. Habe wohl ein wenig auf dem Schlauch gestanden. Allerdings taucht ein Problem noch immer auf: Meine Eingabeaufforderung ist immer leer bei den eingefügten Blöcken, nach dem auch der Name geändert ist. Ich kann ja mal kurz berichten, was ich jetzt mache: Zuerst bild ich einen Auswahlsatz über alle eingefügten Blöcke. (setq blk-aws (ssget "X" '((0 . "INSERT")))) Wenn der richtige Block gefunden ist, dann nehme ich mir den Blocknamen und bilde einen neuen Auswahlsatz um den Blockinsert zu bearbeiten. (setq blk-aws2 (tblsearch "BLOCK" blkname)) Wenn ich am richtigen Attribut angekommen bin, dann schreibe ich die neue Eingabeaufforderung rein. (setq unter-blk-datenb (subst (cons 3 "INTAK") (assoc 3 unter-blk-datenb) unter-blk-datenb)) Anschließend schreibe ich es in die Blockdefinition zurück. (entmod unter-blk-datenb) (entupd (cdr (assoc -1 unter-blk))) Jetzt steht überall die richtige Eingabeaufforderung. Jetzt bearbeite ich noch alle Blöcke des selben Typs und tausche den Attributnamen gegen den neuen Namen aus. (setq unter-blk (subst (cons 2 neutext) (assoc 2 unter-blk) unter-blk)) Anschließend schreibe ich es auch hier wieder zurück. (entmod unter-blk) (entupd (cdr (assoc -1 unter-blk))) Jetzt ist in jedem Block die EIngabeaufforderung leer! Auch wenn ich das letzte entupd rausnehme oder die Abfolge ändere (also zuerst alle Blockeinserts und dann die Definition) , bleibt das Ergebnis leider gleich. Da habe ich meinen Fehler noch nicht entdeckt. Ich hoffe Du kannst ihn sehen! Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 21. Sep. 2018 10:37 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
Freut mich wenn du weiter gekommen bist, nur deiner Beschreibung ist noch etwas schwer zu folgen denn du verwechselst Block mit Blockreferenz und daher ist man unsicher "was sonst noch". Mit SSGET wählst du NIE Blöcke aus, nur Blockreferenzen=INSERT/attributs Mit Tblobjname kommst du an die Blockdefinition=BLOCK/attdefs In deinem Text steht es etwas durcheinander m.M.
"Meine Eingabeaufforderung ist immer leer" Deine Beschreibung (die Lisp-Ausdrücke) klingen gut, aber die Aussage Eingabeaufforderung=Leer läßt nur einen einzigen Schluß zu: Deine aktuelle Blockdefinition enthält keine Attributdefinition mit diesem Namen! Den Acad schaut nach dem Attributname, sucht in der BlockDef nach einem Attdef dieses Namens und falls vorhanden wird gc3 angezeigt, falls dieser leer ist wird gr2 angezeigt. Wenn nichts angezeigt wird, dann gibt es kein ATTDEF was zu deinem ATTRIB passt. Dies wäre meine vorsichtige Aussage ohne deine DWG-Daten&Code zu kennen, bitt prüfe GANZ GENAU die Werte des dxf 2 in Attdef und Attrib. Eine allgemeine Anmerkung habe ich an dieser Stelle noch: Deine DWG zeigte auch "dynamische Blöcke", auf diesen besonderen Umstand bist du IMHO auch noch nicht vorbereitet, daher teste bitte zunächst immer nur mit "normalen Blöcken". Denn solange du mit normalen Blöcken kämpfst brauchst du dich mit dem Thema Struktur dynamischer Blöcke nicht befassen. Feedback wäre schön.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 21. Sep. 2018 14:28 <-- editieren / zitieren --> Unities abgeben:
So, jetzt läuft es endlich! Auch auf die Gefahr hin, dass ich wieder falsche Begriffe benutze, möchte ich die Rückmeldung mit meinen Worten versuchen. Ich habe jetzt folgendes gemacht: Zuerst habe ich in der Blockdefinition die Gruppencodes 2 und 3 für die Attribute geändert und nur mit entmod zurück geschrieben. Anschließend habe ich die Attribute im Insert/Blöcke nocheinmal auf den richtigen Namen gesetzt und wieder nur mit entmod zurück geschrieben. Ich hoffe es ist so einigermaßen verständlich, was ich gemacht habe! Was mir Probleme gemacht hat, war die Frage wie ich verhindern kann, dass meine eingetragenen Attributwerte überschrieben werden, wenn ich den Block mit dem Blockeditor ändere. Also nochmals vielen Dank! Grüße Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 21. Sep. 2018 14:36 <-- editieren / zitieren --> Unities abgeben: Nur für Big Sven
|