| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Maßtext auslesen, nochmals (2021 mal gelesen)
|
WeNe Mitglied Maschinenbautechniker
Beiträge: 10 Registriert: 08.02.2005
|
erstellt am: 09. Feb. 2005 15:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Alle zusammen, nachdem mir heute morgen so gut geholfen wurde, wage ich eine weitere Frage: Wenn ich den Maßtext auslese bekomme ich immer den genauen Wert. Die Einstellungen der Genauigkeit werden übergangen. Im Forum ist davon die Rede diese Einstellungen im Bemaßungsstil bzw. in EED´s zu finden ist. Bemaßungsstil ist ja klar aber der Begriff EED ist mir fremd. Vieleicht kann mir das jemand erklären oder hat einen Lösungsansatz. Der Hintergrund ist das ich in ein folgendes Rechenprogramm den Wert, wie er in der Zeichnung steht, weiterverwenden will. vielen Dank Werner
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 09. Feb. 2005 17:25 <-- editieren / zitieren --> Unities abgeben: Nur für WeNe
Hallo Werner, EED (oder auch XDaten) sind Extended Entity Data AutoCAD Hilfe sagt dazu (unter Entwicklerdoc, DXF-Referenz, Entities, Dimension): XDaten, die zur Anwendungs-ID "ACAD" gehören, folgen einem Bemaßungselement, wenn Bemaßungsüberschreibungen auf dieses Element angewendet wurden. Siehe Überschreibungen von Bemaßungsstilen. und dort: Überschreibungen von Bemaßungsstilen können auf Bemaßungs-, Führungs- und Toleranzelemente angewendet werden. Die Überschreibungen werden in den einzelnen Elementen als XDaten gespeichert. Die Steuerzeichenketten der 1002-Gruppe enthalten die überschriebenen Bemaßungsvariablen-Gruppencodes und die zugehörigen Werte. Im folgenden Beispiel werden die XDaten eines Bemaßungselements aufgeführt, bei dem die Variablen DIMTOL und DIMCLRE überschrieben wurden. (setq diment (car (entsel))) ; Bemaßungselement auswählen (setq elst (entget diment '("ACAD"))) ; Elementdefinitionsliste abrufen (assoc -3 elst) ; Nur XDaten extrahieren Dieser Code gibt folgendes zurück: (-3 ("ACAD" Anfang des ACAD-APPID-Abschnitts der XDaten (1000 . "DSTYLE") (1002 . "{") Anfang des DIMSTYLE-Unterabschnitts (1070 . 177) (1070 . 3) DIMCLRE (Code 177) Überschreibung + Wert (3) (1070 . 71) (1070 . 1) DIMTOL (Code 71) Überschreibung + Wert (1) (1002 . "}") )) Ende des Unterabschnitts DIMSTYLE und des Abschnitts ACAD Die Dich betreffenden Variablen wären dann wahrscheinlich DIMDEC (GC 271) und DIMADEC (GC 179)
Vielleicht hilft Dir dass ja etwas weiter. Vile Grüße spider Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 10. Feb. 2005 10:33 <-- editieren / zitieren --> Unities abgeben: Nur für WeNe
Hi, mal 'n anderer Ansatz... Bemaßungen werden in Acad als anonyme Blöcke verwaltet ("*D..."). Diesen Block kriege ich zu fassen und guck mir an, welcher Text denn dort in der Block-Definition steht: Code:
(defun DT:GET-BEMTXT-FROM-DIMBLOCK (OBJ / RETVAL TAB-DAT) (if OBJ (if (wcmatch (strcase (cdr (assoc 0 (setq OBJ (entget OBJ))))) "*DIMENSION" ) (if (setq TAB-DAT (tblsearch "BLOCK" (cdr (assoc 2 OBJ)))) (if (setq TAB-DAT (entget (cdr (assoc -2 TAB-DAT)))) (progn (while (not (eq (cdr (assoc 0 TAB-DAT)) "MTEXT")) (setq TAB-DAT (entget (entnext (cdr (assoc -1 TAB-DAT))))) ) (setq RETVAL (cdr (assoc 1 TAB-DAT))) ) ) ) ) ) RETVAL )
Dieses Vorgehen bringt natürlich andere Probleme mit sich. z.B. stehen dort ab IMHO R2004 noch Textformatierungsanweisungen. Bei einem unveränderten Maß kommt bei mir nach der Anweisung: (DT:GET-BEMTXT-FROM-DIMBLOCK (car (entsel))) als Ergebnis: "\\A1;10.75" heraus. Wenn Du also meine Funktion zum Ermitteln der in der Bemaßung stehenden Texte verwendest, mußt Du noch eine Funktion schreiben, die Dir die eigentliche Zahl aus dem Text herauslöst. So in etwa:
Code:
(if (setq TXT (DT:GET-BEMTXT-FROM-DIMBLOCK (car (entsel)))) (setq TXT (LOESE-ZAHLENWERT-AUS-TEXT TXT)) )
Ist aber i.d.R. kein Problem, hängt aber auch damit zusammen was Ihr so mit den Bemaßungen macht. Bei mir reicht es z.B. den resultierenden Text nur um die eventuell vorkommenden Zeichenketten "\\A0;" "\\A1;" "\\A2;" zu erleichtern. ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WeNe Mitglied Maschinenbautechniker
Beiträge: 10 Registriert: 08.02.2005
|
erstellt am: 10. Feb. 2005 10:38 <-- editieren / zitieren --> Unities abgeben:
Danke Spider, das habe ich verstanden. jetzt taucht aber die Frage auf, wie ermittle ich die Genauigkeitswerte des Bemaßungsstils. Die Variablen "Dimdec" und "Dimadec" beziehen sich doch nur auf den aktuellen Bemaßungsstil. Mit (tblsearch "dimstyle" "Stilname") bekomme ich ja die werte des Bemaßungsstiles (unter GC 271 wohl die Dezimalstellen der Linearbemaßung), der GC 179 für die Winkelbemaßung taucht aber nicht auf. Wo ist also die Anzahl der Dezimalstellen der Winkelbemaßung hinterlegt? Vielen Dank Werner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 10. Feb. 2005 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für WeNe
Haloo Werner, auch hier hift wieder die Hilfe. Die sagt zu Systemvariablen DIMADEC Typ: Ganzzahl Gespeichert in: Zeichnung Ausgangswert: 0 Steuert die Anzahl der angezeigten Genauigkeitsstellen bei Winkelbemaßungen. -1 Die Winkelbemaßung wird mit der durch die DIMDEC-Einstellung festgelegten Dezimalstellenzahl angezeigt.
0-8 Die Winkelbemaßung wird mit der durch die DIMADEC-Einstellung festgelegten Dezimalstellenzahl angezeigt. Wenn DIMADEC im Stil nicht auftaucht, hat's den Standartwert, d.h. 0 und somit die Winkelbemaßung keine Dezimalstellen (denke ich mal)
Gruss spider Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 10. Feb. 2005 11:52 <-- editieren / zitieren --> Unities abgeben: Nur für WeNe
Hi WeNe, bei meiner Lösung entfällt der ganze Analyse Kram bzgl. der Nachkommastellen, denn der MText im anonymen Block ist auf jeden Fall richtig, sei es ob die Dezimalstellen durch den Bemstil oder durch individuelle Zuweisung getätigt wurde... (es sei denn irgendein Idiot schreibt da Müll rein...) ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WeNe Mitglied Maschinenbautechniker
Beiträge: 10 Registriert: 08.02.2005
|
erstellt am: 10. Feb. 2005 12:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Spider, Wenn ich in einem aktuellen Bemaßungsstil (z. B. AM_DIN) eine Anzahl Nachkommastellen bei der Winkelbemaßung eingestellt habe (z. B. 1)ist DIMADEC=1. Dann wechsle ich den Bemassungsstil (z. B. ISO-25), mit der Anzahl Nachkommastellen 2, ist DIMADEC=2. Bei dem Auslesen der Eigenschaften des Bemaßungsstile mit (tblsearch "DIMSTYLE" "AM_DIN") erscheint aber kein Eintrag mit GC 179. Auch beim Vergleichen der Anzeige des selben Stil mit geänderten Nachkommastellen kann ich keinen Unterschied feststellen. Hallo Marc, deinen Beitrag hatte ich erst später gesehen, die Lösung gefällt mir aber sehr gut (nur nebenbei, was bedeutet IMHO ). Viele Grüße Werner
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
otterloh Mitglied
Beiträge: 188 Registriert: 27.06.2001 AutoCAD 2008, 2010 Vista, Win7
|
erstellt am: 10. Feb. 2005 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für WeNe
Hallo Wener, (defun c:EBEM (/ el en mas) (setq el (entget (car (entsel))))(princ "\nHAUPT-LISTE\n")(princ el) (setq qw el) ;----------------------------------------------------------------------------- (if (= "DIMENSION" (cdr (assoc 0 el))) (progn (setq el (tblsearch "BLOCK" (cdr (assoc 2 el)))) (setq en (cdr (assoc -2 el))) (while en (setq el (entget en)) (princ "\nUNTER-LISTE\n")(princ el) (if (= "MTEXT" (cdr (assoc 0 el))) (progn (setq mas (cdr (assoc 1 el))) (setq pmt (cdr (assoc 11 el))) (setq pmtx (car pmt) pmty (cadr pmt) ) (setq pmt (/ pmty pmtx) pmt (angtos (atan pmt)) ) ) ) (if (= "ENDE" (cdr (assoc 0 el))) (setq en nil) (setq en (entnext en)) ) ) (princ "\nMass-Text ") (princ mas) (setq mass (substr mas 5)) (princ "\nMass-Text Linear ") (princ mass) (setq mass (substr mas 6)) (princ "\nMass-Text Radius ") (princ mass) (setq mass (substr mas 12))(princ "\nMass-Text Durchmesser ") (princ mass) (princ "\nText-Winkel ") (princ pmt) ) ) (princ) ) ------------------ Gruß Werner http://www.konstruktionsbuero-meyer.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 10. Feb. 2005 13:43 <-- editieren / zitieren --> Unities abgeben: Nur für WeNe
Zitat:
der GC 179 für die Winkelbemaßung taucht aber nicht auf. [/B]
Du hast recht, keine Ahnung wo der steckt. Wenn die Bemaßung geändert wurde, steht er in den EED drin; wenn nicht?? Wenn der Bemstil aktuelle gesetzt wird, wird aber die Variable DIMADEC auf den entsprechenden Wert gesetzt, irgendwo muss er also sein. Behelfslösung wäre Bemstil aktuell setzen mit (getvar "DIMADEC") Wert abfragen. Das wird aber nun immer komplizierter, da ist Marcs Lösung mit Sicherheit einfacher. Gruß spider Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |