| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Erweiterte Objektdaten. (1100 / mal gelesen)
|
Smart-88 Mitglied Rentner
Beiträge: 5 Registriert: 04.06.2021 AutoCAD 2014
|
erstellt am: 08. Jun. 2021 18:11 <-- editieren / zitieren --> Unities abgeben:
Guten Tag. Ich bin neu hier und habe ein kleines Problem. Ich möchte an eine Bemassung eine Realzahl als erweiterte Objektdaten anhängen. Dazu habe ich nachstehendes Programm erstellt: (DEFUN C:Real_an_Bemassung() (SETQ VT:Reg_Name "Smart_2021") (IF (TBLSEARCH "APPID" VT:Reg_Name) (PRINC (STRCAT "\n" VT:Reg_Name " ist bereits registriert.")) ) (IF (= (REGAPP VT:Reg_Name) NIL) (PRINC (STRCAT "\nKann XDATA für " VT:Reg_Name " nicht registrieren.")) ) (SETQ VO:Objekt (CAR (ENTSEL "\nBemassungsobjekt wählen: ")) VL:Element (ENTGET VO:Objekt) VR:Mass_Soll (ATOF (CDR (ASSOC 1 VL:Element))) VR:Mass_Real (CDR (ASSOC 42 VL:Element)) VR:Mass_Diff (- VR:Mass_Soll VR:Mass_Real)) (SETQ VL:Mass '((-3 ("Smart_2021" (1040 . VR:Mass_Diff)))) VL:Element (APPEND VL:Element VL:Mass)) (ENTMOD VL:Element) (PRINC) ) Wenn ich das Programm ausführe erhalte ich folgende Fehlermeldung: »Fehler: Fehlerhafte DXF-Gruppe: (-3 ("Smart_2021" (1040 . VR:MASS_DIFF))) Kann mir jemand helfen? Besten Dank im Voraus. Smart-88 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 08. Jun. 2021 18:27 <-- editieren / zitieren --> Unities abgeben: Nur für Smart-88
(SETQ VL:Mass '((-3 ("Smart_2021" (1040 . VR:Mass_Diff)))) VL:Element (APPEND VL:Element VL:Mass)) Ich vermute du wolltest dort statt VR:Mass_Diff den Wert haben der an VR:Mass_Diff gebunden ist, dafür darfst du dann aber die Liste nicht quoten ' denn so wird darin nichts evaluiert. Also erst auswerten, dann zu einer Liste wie benötigt machen. (SETQ VL:Mass (list(list -3 (list "Smart_2021" (cons 1040 VR:Mass_Diff)))) VL:Element (APPEND VL:Element VL:Mass)) ___ So erhälst du statt ...(50 . 0.0) (100 . "AcDbRotatedDimension") (-3 ("Smart_2021" (1040 . VR:Mass_Diff))))
eine gültige EntityListe wie diese ...(50 . 0.0) (100 . "AcDbRotatedDimension") (-3 ("Smart_2021" (1040 . -98.803)))) War es das?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Smart-88 Mitglied Rentner
Beiträge: 5 Registriert: 04.06.2021 AutoCAD 2014
|
erstellt am: 09. Jun. 2021 10:43 <-- editieren / zitieren --> Unities abgeben:
|
Smart-88 Mitglied Rentner
Beiträge: 5 Registriert: 04.06.2021 AutoCAD 2014
|
erstellt am: 09. Jun. 2021 19:34 <-- editieren / zitieren --> Unities abgeben:
Moin. Erst einmal vielen Dank. Es hat wunderbar geklappt. Keine Fehlermeldung mehr. Jetzt habe ich versucht diesen Realwert in Schlüssel 1040 auszulesen. Ich bekomme aber immer den Wert NIL zurück. Dürfte ich nochmal um Hilfe bitten? Vielen Dank im Voraus. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 09. Jun. 2021 20:46 <-- editieren / zitieren --> Unities abgeben: Nur für Smart-88
Nicht faul werden, wenn du Schritt für Schritt vorgehst dann ist dir 1. genau bekannt wo es klemmt und 2. automatisch auch wie es zu korrgieren ist Mehr wie ENTGET CAR/CDR ggf. ASSOC wird nicht benötigt. Code: (and (setq EXD (entget VO:Objekt '("Smart_2021"))) ;; => ...)(100 . "AcDbRotatedDimension") (-3 ("Smart_2021" (1040 . -44.4985)))) (assoc -3 EXD) (setq EXD (assoc -3 EXD)) ;; => (-3 ("Smart_2021" (1040 . -44.4985))) )(cdr EXD) => (("Smart_2021" (1040 . -44.4985))) (cadr EXD) => ("Smart_2021" (1040 . -44.4985)) (cdadr EXD) => ((1040 . -44.4985)) (cadadr EXD) => (1040 . -44.4985) (cdr(cadadr EXD)) => -44.4985 (assoc 1040 (cdadr EXD)) => (1040 . -44.4985) (cdr(assoc 1040 (cdadr EXD))) => -44.4985
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Smart-88 Mitglied Rentner
Beiträge: 5 Registriert: 04.06.2021 AutoCAD 2014
|
erstellt am: 09. Jun. 2021 23:10 <-- editieren / zitieren --> Unities abgeben:
Vielen, vielen Dank. Das war eine echte Hilfe. Konnte mich heute irgendwie nicht richtig konzentieren. Deshalb bin ich nicht auf cadadr gekommen. Sch.. wenn man alt wird. Werde dich in mein Nachtgebet einschließen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Smart-88 Mitglied Rentner
Beiträge: 5 Registriert: 04.06.2021 AutoCAD 2014
|
erstellt am: 12. Jun. 2021 09:49 <-- editieren / zitieren --> Unities abgeben:
Moin. So. Jetzt bin ich auf ein weiteres Problem gestoßen. Wenn ich die Zeichnung gespeichert und geschlossen habe, ist der Schlüssel -3 wieder verschwunden. Ich habe dem Programm noch die Zeile »(ENTUPD VO:Objekt)« hinzugefügt. Aber das hat auch nichts gebracht. Danke im Voraus. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 12. Jun. 2021 11:02 <-- editieren / zitieren --> Unities abgeben: Nur für Smart-88
Zitat: Original erstellt von Smart-88: Wenn ich die Zeichnung gespeichert und geschlossen habe, ist der Schlüssel -3 wieder verschwunden.
Xdata verschwinden nicht von alleine. Verstehe ich das richtig, dass Du an ein Entity Xdata anhängst, die DWG dann sicherst und schließt, und dass nach dem Wiederöffnen der DWG die Xdata an dem Entity verschwunden sind? Das kann nicht sein. Ich würde Dir als allererstes empfehlen, Dir ein paar grundlegende Funktionen zum Umgang mit Xdata zu schreiben. Also beispielsweise solche Aufrufe zu ermöglichen: (xdata-put <ename> <key> <data> ) und analog (xdata-get <ename> <key> ) Damit bist Du den ganzen aufwendigen Kram mit der Verschlüsselung über verschiedene DXF-Gruppencodes ein für allemal los, und hast sogar die Möglichkeit, beispielsweise auch Symbole, beliebige Listen, und damit sogar ganze Lisp-Funktionen als Xdata zu sichern. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |