| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Lisp zur Attributweitergabe an ein Schriftfeld (1734 mal gelesen)
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 24. Okt. 2018 14:06 <-- editieren / zitieren --> Unities abgeben:
Zusatzfrage zu LISP zur FlächenabfrageWer kann mir helfen, diese Zeile Code: (:field-makeObjectRefText (vlax-ename->vla-object pl) 'Area)
so umzustricken, dass ich statt der Polylinie einen Attributwert ["M2"] statt der Flächhe einschreiben kann? Bisheriger (fehlerhafer) Code: Code: (DEFUN c:att_att (/ pl qatt zatt fl) (SETQ qatt (CAR (ENTSEL "\nQuellattribut wählen: ")) zatt (CAR (NENTSEL "\nZielattribut wählen: ")) ;** geloescht ** ) (ENTMOD (SUBST (CONS 1 (:field-makeobjectreftext (VLAX-ENAME->VLA-OBJECT qatt)'textstring));< hier dürfe es scheitern (ASSOC 1 (ENTGET att)) (ENTGET att) ) ) (ENTUPD (CDR (ASSOC 330 (ENTGET att)))) (PRINC) )
Die Basisfunktion Code: :field-makeObjectRefText
dazu stammt aus LISP zur Flächenabfrage Danke im Voraus! Sorry fürs doppelte Einstellen, aber im "Rund um Autocad" Forum passt es eigentlich nicht.
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 24. Okt. 2018 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 29. Okt. 2018 13:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn! Danke für den Hinweis. Das war ein Fehler, aber irgendwas anderes passt noch nicht. Code: (DEFUN c:att_att (/ pl qatt att) (SETQ qatt (CAR (ENTSEL "\nQuellattribut wählen: ")) att (CAR (NENTSEL "\nZielattribut wählen: ")) ) (ENTMOD (SUBST (CONS 1 (:field-makeobjectreftext (VLAX-ENAME->VLA-OBJECT qatt) 'textstring)) (ASSOC 1 (ENTGET att)) (ENTGET att) ) ) (ENTUPD (CDR (ASSOC 330 (ENTGET att)))) (PRINC) )
Oder liegt der Fehler bereits hier?
Code: (DEFUN :field-makeobjectreftext (#object #property /) (IF (VLAX-PROPERTY-AVAILABLE-P #object #property) (STRCAT "%<\\AcObjProp Object(%<\\_ObjId " (VLA-GET-OBJECTID #object) ">%)." (VL-PRINC-TO-STRING #property) ) (STRCAT "##" (VL-PRINC-TO-STRING #object) "." (VL-PRINC-TO-STRING #property) "##") ) )
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Okt. 2018 13:21 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
STRCAT erwartet/akzeptiert nur STRINGs, keine Zahlen. EDIT: Und als Quelle kannst du kein Attribut wählen mit ENTSEL, entweder du möchstest eine Attributdefinition oder benötigst NENTSEL für ein Attribut. Mal eine Frage: Warum kommst du nicht an die Problem-Stelle, wenn man Schritt für Schritt durchgeht MUSS man doch darüber stolpern? Vielleicht zeigt uns deine Antwort ja noch wie man ganz generell noch eine Hilfestellung geben kann! lateEDIT: Und ein schließendes ">%" fehlt auch noch, wie bist du zu diesen Zeilen gekommen die Quelle an der du dich bedient hast zeigte diese Fehler nicht auf. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 29. Okt. 2018 13:36 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm: [B]STRCAT erwartet/akzeptiert nur STRINGs, keine Zahlen.
Bezogen auf (VLA-GET-OBJECTID #object) ?
Zitat: Und als Quelle kannst du kein Attribut wählen mit ENTSEL, entweder du möchstest eine Attributdefinition oder benötigst NENTSEL für ein Attribut.
Ja, der Punkt ist mir inzwischen aufgefallen, trotzdem danke dafür! Zitat: Mal eine Frage: Warum kommst du nicht an die Problem-Stelle, wenn man Schritt für Schritt durchgeht MUSS man doch darüber stolpern?
Dafür verstehe ich von VISUAL Lisp zu wenig. Aber es wäre natürlich ein Weg, es weiter zu zerlegen... ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 29. Okt. 2018 13:44 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm: lateEDIT: Und ein schließendes ">%" fehlt auch noch, wie bist du zu diesen Zeilen gekommen die Quelle an der du dich bedient hast zeigte diese Fehler nicht auf.[/B]
Das war´s! In meiner Version für Polylinien war da noch ein "m²" dabei und ich habe irrtümlich das Ganze entsorgt. Herzlichen Dank jedenfalls! ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 29. Okt. 2018 13:46 <-- editieren / zitieren --> Unities abgeben:
Hier noch der gesamte Code, sollte das jemand benötigen! Code: (DEFUN c:att_att (/ pl qatt att) (SETQ qatt (CAR (NENTSEL "\nQuellattribut wählen: ")) att (CAR (NENTSEL "\nZielattribut wählen: ")) ) (ENTMOD (SUBST (CONS 1 (:field-makeobjectreftext (VLAX-ENAME->VLA-OBJECT qatt) 'TextString)); %<\AcObjProp Object(%<\_ObjId 2160610400>%).TextString>% (ASSOC 1 (ENTGET att)) (ENTGET att) ) ) (ENTUPD (CDR (ASSOC 330 (ENTGET att)))) (PRINC) )
Code: (DEFUN :field-makeobjectreftext (#object #property /) (IF (VLAX-PROPERTY-AVAILABLE-P #object #property) (STRCAT "%<\\AcObjProp Object(%<\\_ObjId " (ITOA (VLA-GET-OBJECTID #object)) ">%)." (VL-PRINC-TO-STRING #property) ">%" ) (STRCAT "##" (VL-PRINC-TO-STRING #object) "." (VL-PRINC-TO-STRING #property) "##") ) )
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Okt. 2018 13:48 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 29. Okt. 2018 14:09 <-- editieren / zitieren --> Unities abgeben:
Zitat: Ja, das ist der Weg, wobei man es vorher eigentlich bereits beim Zusammenbau getestet hat und somit keine Fehlerquelle mehr suchen muß.
Das mache ich ja auch normalerweise. Nur kenne ich mich mit VL_* und VLA_* kaum aus und tue mir daher beim Debuggen schwer. Sonst habe ich in den letzten fast 30 Jahren schon tausende Zeilen Lisp-Code geschrieben.
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Okt. 2018 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Dann hast du hier in diesem Fall einfach den berühmten Fall von 'Wald vor lauter Bäumen' Du hast ja nicht mit "VL" geändert/ergänzt, nur zuviel gelöscht - warum auch immer. Dann läufts jetzt? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 29. Okt. 2018 16:06 <-- editieren / zitieren --> Unities abgeben:
Zitat:
Dann läufts jetzt? [/B]
Ja, der Code von 14:46 läuft einwandfrei! Wenigstens unter bei mir üblichen Bedingungen. Danke nochmals für Hinweise und Denkanstöße! ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Okt. 2018 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Zitat: Original erstellt von Bernhard GSD: der Code von 14:46 läuft einwandfrei!
Habt ihr in Ö nicht auch seit fast 40Jahren die Winterzeitregeluing, oder läuft die nicht parallel zu unserer? hmm - ein Durcheinander Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 30. Okt. 2018 14:46 <-- editieren / zitieren --> Unities abgeben:
Zitat: Habt ihr in Ö nicht auch seit fast 40Jahren die Winterzeitregeluing, oder läuft die nicht parallel zu unserer? hmm - ein Durcheinander
Komisch, gestern stand noch 14:46, heute aber 13:46. Aber ja, noch haben wir die gleiche Regelung. Aber wie lange noch? ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 05. Nov. 2018 11:15 <-- editieren / zitieren --> Unities abgeben:
Eine Frage noch: Kann man in ein Schriftfeld auch die Fläche eines Objekts aus einer XREF einbauen? Bisher ist es mir jedenfalls noch nicht gelungen... Die Idee wäre, die Gesamtfläche aus mehreren Geschoßen zu summieren.
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 05. Nov. 2018 16:32 <-- editieren / zitieren --> Unities abgeben:
Schriftfeld nochmals: In einen Text, der später als MTEXT ausgegeben wird, habe ich einen Schriftfeldcode eingebaut. Das Schriftfeld wird aber erst richtig ausgewertet, wenn ich den MTEXT-Editor öffne. Ich verändere aber nichts. Kann man diese Auswertung auch anders anstoßen oder gibt es sonst einen Weg, dass nach dem Programmablauf DIREKT die Werte stimmen? Danke im Voraus für eure Unterstützung! Die Schriftfeldstrings sind vollständig:
Code:
%<\AcObjProp.16.2 Object(%<\_ObjId 2262815616>%).Area \f "%lu2%pr2%ps[, m²]">%
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 05. Nov. 2018 16:46 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 05. Nov. 2018 16:48 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Zum eine alle Aktionen welche du eingestellt hast mit FieldEval oder unabhängig davon für TopLevel Elemente (unverschachtelte), Befehl: schriftfeldakt Nach einer Lösung ohne AutoCAD-Befehle habe ich jetzt nicht geschaut. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 06. Nov. 2018 17:31 <-- editieren / zitieren --> Unities abgeben:
Leider zeigt der Befehl "Schriftfeldakt" keine Wirkung, da das MTEXT-Element die Schriftfelder erst als solche erkennt, wenn ich den MTEXT-Editor öffne (und gleich wieder schliesse). Ich müsste Autocad also dazu bewegen, sich so zu verhalten, als wäre der Editor geöffnet worden. ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 06. Nov. 2018 23:16 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 07. Nov. 2018 07:17 <-- editieren / zitieren --> Unities abgeben:
Super, das war´s! Ich muss also nur mehr mit Code: (vla-put-TextString (VLAX-ENAME->VLA-OBJECT(ENTLAST)) textx)
den Text nochmals einschreiben und es pfeift! Danke nochmals! ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |