| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Daten auslesen (973 / mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 04. Nov. 2021 17:14 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum! Bin auf der Suche nach einer Lösung, die Daten nach Markierung im Bild auslesen zu können. Der Zugriff ist mir nicht ohne weiteres möglich. Hat jemand eine Idee?
Danke im Voraus!
------------------ Gruss Dirk [Diese Nachricht wurde von cadplayer am 04. Nov. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 04. Nov. 2021 17:19 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
... diese Eigenschaften werden wahrscheinlich in den EED's des gewählten Elements zu finden sein. ggf. auch nur irgendwelche kryptischen Inhalte, die dann wiederum als Schlüssel für irgendwelche Dictionary-Einträge dienen. Aber alles nur Vermutungen. Ggf. stellt die Applikation auch eine API zur Verfügung, da solltest du dich aber an den Hersteller dieser Applikation wenden. Grüße! Holger ------------------ Holger Brischke 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 |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 04. Nov. 2021 17:52 <-- editieren / zitieren --> Unities abgeben:
genau, darauf bin ich gestossen, nachdem ich mir die DXF in notepad anschaute. Also kein weg da ran zu kommen, wenn einem das API fehlt? Wie schafft es Acad zu lesen, hab über die dictionary’s nichts gefunden, was würde mit den Daten passieren, wenn ich den Block sprenge? ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 04. Nov. 2021 18:09 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
... AutoCAD kann das auch nicht lesen. Die Applikation (mal vereinfacht ausgedrückt) meldet einfach für bestimmte Entity-Typen zusätzliche Eigenschaften an und wenn dann das Eigenschaftenfenster auf so ein Objekt vom vereinbarten Typen trifft, dann wird die Applikation gebeten doch die Daten zur Verfügung zu stellen, AutoCAD zeigt die nur an (geht mit C++ und sind dort auch nur ein paar Zeilen Code). Wenn diese Zeichnung also in Umgebungen geöffnet wird, in denen die Applikation nicht zur Verfügung steht und auch kein anderer ObjectEnabler installiert ist, dann gibt es dort diese Eigenschaften auch nicht. Grüße! Holger ------------------ Holger Brischke 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 |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 04. Nov. 2021 22:17 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 04. Nov. 2021 23:24 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: wenn einem das API fehlt?
DAS wäre schlecht und eine mühsame Arbeit, in diesem Fall hier evtl. gar SEHR mühsam da die Daten nicht einfach als String vorliegen sondern im binär chunk von irgendwelchen "IRD_OBJ_RECORDs" und anderen. Ich habe mir die Datei angesehen, es geht also um C3D bzw. MAP, du hast ja C3D und da sind die MAP Sachen mit drin (ich nehme an die Datei wurde auch in C3D erstellt!? daher muss es ja dabei sein, sonst könnte C3D die Daten nicht schreiben. Deine Suche sollte sich konzentrieren auf die ADE Funktionsbibliothek, also über den Daumen: Alles was mit ADE* anfängt, hier aktuell auch nur auf ADE_OD* Starte dein C3D und schau, jeder Zeile der Ausgabe ist zugleich ein Suchbegriff für dich: (foreach i (vl-sort (vl-remove-if-not '(lambda (x) (wcmatch (strcase x) "ADE*"))(atoms-family 1) )'< ) (print i) ) Jeder Treffer gleich ein Suchbegriff, aber das findest du auch alles schön gebündelt in einer Hilfe, just Google - Object Data Functions AutoCAD Map 3D AutoLISP Im 'c programme autodesk autocad 2021 MAP Sample' Ordner findest du auch Beispielroutinen (wofür auch immer, bin kein C3D/MAP USer). Zb. Copy_OD.lsp oder das nette DIRARROW.lsp - der ARROW Befehl zeigt dir nach Auswahl einer Linie eine temporäre Pfeildarstellung an. Eine Funktion in der Datei ist READ_TABLE_DATA welche direkt zwei hier passende Funktionen einsetzt: ade_odgettables ade_odgetfield und schon hast du deine erste Funktion zum Thema gefunden (bzw ich). Teste zB diesen Ausdruck, ab in die Befehlzeile damit: Befehl: (foreach table (ade_odgettables (setq ename (car(entsel)))) (foreach field (cdr(assoc "Columns" (ade_odtabledefn table))) (if (setq hit (ade_odgetfield ename table (cdar field) 0)) (alert(print(strcat (cdar field) "= " hit))) ) ) ) ich sage hier aber mal ADE weil ich & C3D+MAP = keine Ahnung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 05. Nov. 2021 05:55 <-- editieren / zitieren --> Unities abgeben:
Tja du belehrst mich immer wieder, wie wenig ich weiss. (sorry für mein deutsch, SWE-tastatur... "ss"). Vielen, vielen Dank - deine Infos muss ich mir erstmal in ruhe durchlesen und testen - Neuland, Datensätze von den ich gar nichts wusste - absolut interessant. Wünsche euch beiden ein schönes WE! ------------------ Gruss Dirk 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. 2021 08:37 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, noch eine Ergänzung zum Beitrag von Sebastian. mit den MAP-Daten, das hatten wir schon einmal: https://ww3.cad.de/foren/ubb/Forum481/HTML/000529.shtml#000010 Ich habe die Funktion JB_MAP->Xdaten von damals eben noch angepasst, weil bei Deinen Daten ein Integer falsch ausgewertet worden ist (ob das alles so korrekt ist kannst Du selber prüfen, war nur auf die Schnelle) Zum verwenden brauchtst Du in jeden Fall AutoCAD-MAP, die MAP-Daten werden dann strukturiert in Xdaten abgelegt. Das kannst Du Dir dann ja anpassen. Code:
;;;Jörn Bosse, 07.11.2019, aktualisiert 05.11.2021 (defun c:JB_MAP->Xdaten (/ AWS COLUMNSUB DEFAULTVAL FIELDDATA N TBLNAME XDATA XDATAGCN Nrecord i) (if (and (princ "\nObjekte auswählen:") (setq aws (ssget))) (progn (setq n 0) (repeat (sslength aws) (mapcar '(lambda (tblname) (setq Nrecord(ade_odrecordqty (ssname aws n) tblname)) (setq xData nil XDataDef nil i -1) (while (< (+ i 1) Nrecord) (setq i (+ i 1))
(mapcar '(lambda (ColumnSub) (setq FieldData (ade_odgetfield (ssname aws n) tblname (cdr (assoc "ColName" ColumnSub)) i)) (cond ((= (strcase (cdr (assoc "ColType" ColumnSub)) 'T) "character") (setq XdataGcN 1000)) ((= (strcase (cdr (assoc "ColType" ColumnSub)) 'T) "integer") (setq XdataGcN 1070)) ((= (strcase (cdr (assoc "ColType" ColumnSub)) 'T) "point") (setq XdataGcN 1010)) ((= (strcase (cdr (assoc "ColType" ColumnSub)) 'T) "real") (setq XdataGcN 1040))) (if (= i 0) (setq XdataDef (append XdataDef (list (cons 1000 "ColName") (cons 1000 (cdr (assoc "ColName" ColumnSub))) (cons 1000 "ColDesc") (cons 1000 (cdr (assoc "ColDesc" ColumnSub))) (cons 1000 "ColType") (cons 1000 (cdr (assoc "ColType" ColumnSub))) (cons 1000 "DefaultVal") (cons XdataGcN (JB_MAP->Xdaten:DefaultVal:Type XdataGcN (cdr (assoc "DefaultVal" ColumnSub))) ))))) (setq Xdata (append Xdata (list (cons 1000 (cdr (assoc "ColName" ColumnSub))) (cons XdataGcN (JB_MAP->Xdaten:DefaultVal:Type XdataGcN FieldData))))) ) (cdr (assoc "Columns" (ade_odtabledefn tblname))))) (regapp (strcat tblname "_DEF")) (entmod (append (entget (ssname aws n)) (list (list -3 (cons (strcat tblname "_DEF") XdataDef))))) (regapp (strcat tblname "_DATA")) (entmod (append (entget (ssname aws n)) (list (list -3 (cons (strcat tblname "_DATA") Xdata)))))) (ade_odgettables (ssname aws n))) (setq n (+ n 1))))) (princ)) (defun JB_MAP->Xdaten:DefaultVal:Type (XdataGcN DefaultVal / ) (cond ((= XdataGcN 1070);;;integer (if DefaultVal (atoi DefaultVal) 0) ) ((= XdataGcN 1040);;;real (if DefaultVal (atof DefaultVal) 0)) ('T DefaultVal)) )
------------------ viele Grüße Jörn http://www.bosse-engineering.com Bosse_tools-Überblick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 05. Nov. 2021 21:38 <-- editieren / zitieren --> Unities abgeben:
|