| |
| 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: Zugriff auf Attribut-Werte im Block (2256 mal gelesen)
|
Cad22goetz Mitglied
Beiträge: 5 Registriert: 26.07.2013 Win, Bricscad V13
|
erstellt am: 26. Jul. 2013 21:01 <-- editieren / zitieren --> Unities abgeben:
Hallo an die Runde, habe folgende Herausforderung: in den Zeichnungsdateien ist auf 12 Layouts ein Block "Schriftfeld" positioniert, der mit Attributen zur Projektbeschreibung versehen ist. 12 mal der gleiche Block für verschiedene Blattgössen bzw. Druckerkonfigurationen. Bearbeiten der Attribute mit refbearb (_refedit) funktioniert gut, nach schliessen mit _refclose haben alle Schriftfelder die gleichen Eintragsdaten zum Projekt (Messe, Halle, Standnummer etc.) Will nun in eine .dcl Maske die aktuellen Einträge des Schriftfeldblocks einlesen, dem User die Möglichkeit geben in der .dcl Maske Einträge zu modifizieren und diese Änderungen wieder in die Attribute des Schriftfelds einlesen.... allein, keine Ahnung wie ich im setq meine Variabeln "befüllen" kann und wie diese in die Attribute wieder auslesen? Jemand ne Idee? GG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 29. Jul. 2013 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für Cad22goetz
Zitat: Original erstellt von Cad22goetz: ... keine Ahnung wie ich im setq meine Variabeln "befüllen" kann und wie diese in die Attribute wieder auslesen?
Wie weit bist du denn gekommen? Wie sieht dein Code im Moment aus? Wo hakt es konkret? Grüße Holger ------------------ Holger Brischke Freier C#.NET-Workshop Ende Oktober geplant. Bei Interesse bitte melden! CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 29. Jul. 2013 09:59 <-- editieren / zitieren --> Unities abgeben: Nur für Cad22goetz
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 29. Jul. 2013 10:02 <-- editieren / zitieren --> Unities abgeben: Nur für Cad22goetz
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Jul. 2013 10:04 <-- editieren / zitieren --> Unities abgeben: Nur für Cad22goetz
|
Cad22goetz Mitglied
Beiträge: 5 Registriert: 26.07.2013 Win, Bricscad V13
|
erstellt am: 29. Jul. 2013 22:14 <-- editieren / zitieren --> Unities abgeben:
Danke euch für die hints. @CADmium: ist mir noch ein wenig zu komplex. suche noch nach einer simplen eierlegenden Wollmilchsau, dein Vorschlag wäre aber durchaus ein Plan B @cadffm, richtig, ich vergass zu erwähnen, es geht tatsächlich um konstante Attribute (sonst würde das mit dem "spiegeln" auf 12 Layouts nicht klappen) @Brischke: Drechsele mit (vla-getconstantattributes) rum, bin mir aber da in der Syntax nicht sicher. Experimentiere noch und bin nach wie vor für jeden Hinweis dankbar. GG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cad22goetz Mitglied
Beiträge: 5 Registriert: 26.07.2013 Win, Bricscad V13
|
erstellt am: 31. Jul. 2013 22:59 <-- editieren / zitieren --> Unities abgeben:
So, Taste mich also weiter durch das Thema konstante Attribute. Backe kleine Brötchen und versuche über ein kleines Test-Script an die erwünschten Werte zu kommen. (defun C:Test () (vl-load-com) (setq SFname (ssget"X"'((2 . "Schriftfeld_BS_MM"))) SFename (ssname SFname 0) vlaBlkRefObj (vlax-ename->vla-object SFename) vlaAttObjs (vla-GetConstantAttributes vlaBlkRefObj) vlaArray (vlax-variant-value vlaAttObjs) vlaAttObj (vlax-safearray-get-element vlaArray 1) Attename (vlax-vla-object->ename vlaAttObj) ;Attname (ssget "X"'((-2 . Attename))) ) ; end setq (princ Attename) ) wie zu sehen ist hab ich die letze Zeile im setq auf ; gesetzt, da sie mir nur die Meldung ; error : bad argument type <(-2 . ATTENAME)> ; expected ENTITYNAME at [DXF/XED DATA] liefert. das finde ich erstaunlich. Da die Abfrage über printc für die Variable Attename die Antwort <Entity name: 01f20860><Entity name: 01f20860> liefert. Das heisst in meiner Welt, dass ich doch an (ssget"X"'((-2 . Attename))) eine Entity name übergebe, oder??? Schön wäre jetzt der Zugriff auf die <Entity name: 01f20860> weil ich dort meine Information (konstantes Attribut) vermute zu lokalisieren. was ist da nur falsch??? GG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 01. Aug. 2013 06:09 <-- editieren / zitieren --> Unities abgeben: Nur für Cad22goetz
Hallo Cad22goetz, ich habe den Eindruck, dass du noch nicht so ganz weist, wie du mit den Funktionen und DXF-Gruppencodes umgehen sollst. Ich habe deinen Code mal geändert, vielleicht hilft dir das?
Code:
(vl-load-com) (defun C:Test ( / SF_Name auswahlsatz SF_Ename SF_vlEname SF_constAttsArray SF_constAttsList SF_constAttsEnameList SF_constAttTagsList SF_constAttValuesList) (setq SF_Name "Schriftfeld_BS_MM" auswahlsatz (ssget"X" (list (cons 2 SF_Name))) SF_Ename (ssname auswahlsatz 0) SF_vlEname (vlax-ename->vla-object SF_Ename) SF_constAttsArray (vla-GetConstantAttributes SF_vlEname) SF_constAttsList (vlax-safearray->list(vlax-variant-value SF_constAttsArray)) SF_constAttsEnameList (mapcar 'vlax-vla-object->ename SF_constAttsList) SF_constAttTagsList (mapcar '(lambda (E) (cdr(assoc 2 (entget E))) ) SF_constAttsEnameList ) SF_constAttValuesList (mapcar '(lambda (E / ed) (setq ed (entget E)) (cons (cdr(assoc 2 ed))(cdr(assoc 1 ed))) ) SF_constAttsEnameList ) ) ; end setq (princ SF_constAttTagsList) (terpri) (princ SF_constAttValuesList) (princ) )
Grüße! Holger ------------------ Holger Brischke Freier C#.NET-Workshop Ende Oktober geplant. Bei Interesse bitte melden! CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cad22goetz Mitglied
Beiträge: 5 Registriert: 26.07.2013 Win, Bricscad V13
|
erstellt am: 06. Aug. 2013 22:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Brischke, DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE Es mag dich vieleicht nicht überraschen aber dein Code funzt. Könnte dich hier mit seitenlangen Freudenbekundungen überschütten, für's Forum vermutlich aber eher langweilig. Zit: "vielleicht hilft dir das?" es hilft nicht nur, es ist die Lösung des ersten Teils meines Problems DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE Habe mithilfe deines Codes die Anzeige der Schriftfeldeinträge im .dcl erstellt, alles klappt prima nur: Jetzt geht (wie auf der Kirmes) die nächste Fahrt rückwärts. muss die im .dcl geänderten Einträge über get_tile ins Schriftfeld "zurückfüttern" dies würde die Sache rund machen. erneut besten Dank Holger, Gruss, Götz PS. Klar, bin ich hier nicht der ***** im Hochelbisch der Lisp-Programierung, Elemente wie Lambda-Ausdrücke in deinem Code muss ich erstmal nachvolziehen aber so ist das Spiel des Lernens und ich kreuze den Tag rot an an dem ich mich in diesem Forum angemeldet habe. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cad22goetz Mitglied
Beiträge: 5 Registriert: 26.07.2013 Win, Bricscad V13
|
erstellt am: 11. Aug. 2013 20:59 <-- editieren / zitieren --> Unities abgeben:
Jetzt ist die Sache rund und der Threat kann abgeschlossen werden. Habe das Safearray SF_constAttsArray aus Holgers Code via SF_constAtts_SA (vlax-variant-value SF_constAttsArray) nochmal fixiert und die einzelnen konstanten Attribute z. Bsp. der Variablen SF_vlaAttObj_Stand (vlax-safearray-get-element SF_constAtts_SA 0) zugeführt. Im action_tile der dcl Abfrage habe ich dann via "(vla-put-TextString SF_vlaAttObj_Stand Standno)" den benutzereditierten Wert "Standno" eingelesen und mit "(vla-Update SF_vlEname)" "(command \"regen\" )" den Schriftfeldeintrag geupdated. Ein Traum. Danke für die Unterstützung. GG
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |