| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Koordinatendatei aus DXF ausspielen (2211 mal gelesen)
|
Vermesser-Kasi Mitglied Vermesser
Beiträge: 12 Registriert: 13.02.2015 AutoCAD 2016
|
erstellt am: 13. Feb. 2015 10:43 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe eine Test-Datei in dxf-Format vom GeoDatenOnline-Dienst des Landesvermessungsamtes heruntergeladen. Hier kann die Datei gedownloadet werden: http://vermessung.bayern.de/service/download/testdaten/flurkarten_liegenschaftsdaten.html sie ist bei Download -> Vektordaten DFK im DXF-Format zu finden. Ich möchte gerne die Grenzpunkte, Gebäudepunkte usw. in eine Text oder Excel-Datei ausspielen. Die Grenzpunkte, Gebäudepunkte usw. sind als Blöcke in der dxf vorhanden. Ich brauche als Ausgabe eine Punkt-Datei mit folgenden Werten Punktnummer, X-Wert,Y-Wert,Z-Wert Das Problem was ich habe ist, wenn ich die gewünschten Punkte exportiere, bekomme ich die Werte Blockname, X-Wert, Y-Wert, Z-Wert Doch ich brauche jedoch die Punktnummer und nicht den Blocknamen. Die Punktnummer ist in den Blöcken als Text eingefügt. Wie kann ich aus der dxf-Datei eine Punkt-Koordinatenliste erstellen? Ich bin ziemlich im Zeitdruck das Problem gelöst zu bekommen und ich hoffe ihr könnt mir helfen LG Kasi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3701 Registriert: 15.10.2003 Win 10/64 Pro AutoCAD MAP 3D 2018 / 2023 BricsCAD 22
|
erstellt am: 13. Feb. 2015 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für Vermesser-Kasi
Zitat: Original erstellt von Vermesser-Kasi: ....Die Punktnummer ist in den Blöcken als Text eingefügt....
Das ist eine Spassdatei ...
Zitat: Original erstellt von Vermesser-Kasi: ...Ich bin ziemlich im Zeitdruck das Problem gelöst zu bekommen ...
Was heisst das im Klartext? Wann? Und nur diese Datei? So ähnlich?
Code: 400610046003(8) 4490960.960 5321409.820 0.000 400610046037(8) 4490960.370 5321437.130 0.000 400610046507(8) 4490959.730 5321467.060 0.000 400610043354(8) 4490959.530 5321404.040 0.000 400610046044(8) 4490958.690 5321410.420 0.000 400610046072(8) 4490957.190 5321404.620 0.000 400610046045(8) 4490956.950 5321410.750 0.000 400610046073(8) 4490956.140 5321365.470 0.000 400610046046(8) 4490954.570 5321411.010 0.000 400610043352(8) 4490954.100 5321405.050 0.000 400610046509(8) 4490948.040 5321463.410 0.000 400610046510(8) 4490942.750 5321462.310 0.000 400610046082(8) 4490941.400 5321366.440 0.000 400610046070(8) 4490939.220 5321406.140 0.000 400610046047(8) 4490939.100 5321412.170 0.000 400610046071(8) 4490938.150 5321366.660 0.000 400610046511(8) 4490937.860 5321461.720 0.000 400610043297(8) 4490937.580 5321360.010 0.000 400610043350(8) 4490936.090 5321406.270 0.000 400610046048(8) 4490935.730 5321412.260 0.000 400610046036(8) 4490930.530 5321437.920 0.000 400610046034(8) 4490929.870 5321412.350 0.000 400610043327(8) 4490921.960 5321327.690 0.000 400610043408(8) 4490919.000 5321542.610 0.000 400610046068(8) 4490918.220 5321406.570 0.000 400610046069(8) 4490917.180 5321368.050 0.000 400610046066(8) 4490906.190 5321406.780 0.000 400610046035(8) 4490905.540 5321438.590 0.000 400610046067(8) 4490905.170 5321368.840 0.000 400610046033(8) 4490904.870 5321412.780 0.000 400610043293(8) 4490902.280 5321353.160 0.000 400610046065(8) 4490893.310 5321369.630 0.000 400610046064(8) 4490887.750 5321407.070 0.000 400610046049(8) 4490886.860 5321413.080 0.000 400610043349(8) 4490886.430 5321407.120 0.000 400610043332(8) 4490885.610 5321344.840 0.000 400610046057(8) 4490882.900 5321407.100 0.000 400610046056(8) 4490882.850 5321405.900 0.000 400610046058(8) 4490882.560 5321405.520 0.000 400610046050(8) 4490882.210 5321413.120 0.000 400610046063(8) 4490881.320 5321370.420 0.000
Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) 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
|
erstellt am: 13. Feb. 2015 11:52 <-- editieren / zitieren --> Unities abgeben: Nur für Vermesser-Kasi
Hallo Kasi, weil heute Freitag ist ;-) Mit folgendem LISP müßte es hinhauen, eine Textdatei c:\\temp\\test.txt zu erstellen, in der die Elemente Pnr, x, y, z TAB-getrennt in der Zeile stehen. 400510190006(1) 4490727.8300 5322201.7100 0.0000 400510190007(1) 4490716.9000 5322190.7500 0.0000 400510190008(1) 4490710.1900 5322181.7600 0.0000 400510190009(1) 4490705.9000 5322175.6000 0.0000 .... Aber: Daten auf Plausibilität prüfen, war nur zwischen Tür und Angel und das Prog ist ohne Netz und doppelten Boden. Voraussetzung: das Verzeichnis c:\\temp muß existieren. LISP in *.lsp Datei speichern, per APPLOAD laden und dann mit "test" ausführen. [code] (defun c:test ( / AWS FILE LISTE N X) (if (setq aws (ssget (list (cons 0 "INSERT")(cons 2 "PKT*")))) (progn (setq n 0) (repeat (sslength aws) (setq liste (cons (cons(test nrAusText (vla-get-EffectiveName (vlax-ename->vla-object (ssname aws n)))) (mapcar '(lambda(X) (rtos X 2 4) ) (vlax-get(vlax-ename->vla-object (ssname aws n))'InsertionPoint)))liste)) (setq n (+ n 1))) (setq File (open "c:\\temp\\test.txt" "w")) (mapcar '(lambda(X) (write-line (strcat (if(car X)(car X)"")"\t" (cadr X)"\t" (caddr X)"\t" (cadddr X)) File)) (vl-sort liste '(lambda(e1 e2) (< (car e1)(car e2))))) (close File)))) (defun test nrAusText (BlockName / RETVAL) (vlax-for ITEM(vla-item(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))BlockName) (if (=(vla-get-objectname ITEM) "AcDbText") (setq RetVal (vla-get-TextString ITEM)))) RetVal) [code]
------------------ viele Grüße Jörn http://www.bosse-engineering.com Bäume stutzen Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vermesser-Kasi Mitglied Vermesser
Beiträge: 12 Registriert: 13.02.2015 AutoCAD 2016
|
erstellt am: 13. Feb. 2015 11:56 <-- editieren / zitieren --> Unities abgeben:
|
Vermesser-Kasi Mitglied Vermesser
Beiträge: 12 Registriert: 13.02.2015 AutoCAD 2016
|
erstellt am: 13. Feb. 2015 13:07 <-- editieren / zitieren --> Unities abgeben:
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, Civil 3D, MAP 3D, ACADM Inventor AutoCAD 2022, AIP 4-2022 Win 10
|
erstellt am: 13. Feb. 2015 15:02 <-- editieren / zitieren --> Unities abgeben: Nur für Vermesser-Kasi
In dem Beispiel sind alle Texte genau um 1,1 von Blockeinfügepunkt verschoben platziert. Wenn man temporär den Plan um -1,-1 verschiebt, dann über DATENEXTRAKT alle Texte auf Layer PKTNUMMER ausgibt, ist die Liste auch ohne Zusatzprogramme erstellbar. ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vermesser-Kasi Mitglied Vermesser
Beiträge: 12 Registriert: 13.02.2015 AutoCAD 2016
|
erstellt am: 16. Mrz. 2015 18:35 <-- editieren / zitieren --> Unities abgeben:
Wie funktioniert es denn, dass ich die Datei nicht in C:temp abgespeichert bekomme, sondern das Explorer-Fenster sich öffnet und ich selber den Dateinamen und den Pfad aussuchen kann. Ich suche jetzt schon seit Stunden im Internet nach einer Lösung dafür :-(((((( 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
|
erstellt am: 17. Mrz. 2015 07:23 <-- editieren / zitieren --> Unities abgeben: Nur für Vermesser-Kasi
Hallo Kasi, mit GETFILED kann man eine Datei auswählen: Code:
(defun c:test ( / ) (if(setq File (getfiled "Bitte Datei auswählen:" "E:\\MeinVerzeichnis\\test.txt" "txt" 1)) (alert(strcat "Jetzt kann die Datei \"" File "\nbeschrieben werden."))))
Es wird der komplette Pfad zurückgegeben, mit Dateinamen. Wenn Du den in eine Variable speicherst, dann kannst der Funktion GETFILED auch die Variable übergeben, dann kommst Du automatisch immer in das letzte Verzeichnis, welches vorher von Dir ausgewählt worden ist. ------------------ viele Grüße Jörn http://www.bosse-engineering.com Bäume stutzen Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vermesser-Kasi Mitglied Vermesser
Beiträge: 12 Registriert: 13.02.2015 AutoCAD 2016
|
erstellt am: 18. Mrz. 2015 11:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, erstmal vielen vielen Dank für deine Antwort. Bei der Umsetzung scheitert es leider bei mir, da ich von Programmierung nicht viel Ahnung habe. Kopiere ich deinen Code zu der Test.lsp ? Wo muss ich denn deinen Code einfügen (bzw. ersetzen)? oder speichere ist dein Code als extra .lsp? Also GETFIELD.lsp? Also meine "Plan" ist es in AutoCAD einen Befehl einzugeben (hier ist es test) und dann soll sich der Windows-Explorer öffnen wo ich eine txt-Datei erstelle (den Pfad suche ich mir dann über den Windows-Explorer aus).Dann soll er mir die Punkte mit Koordinaten in diese Text-Datei exportieren. Kannst du mir da weiterhelfen???
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
|
erstellt am: 18. Mrz. 2015 12:02 <-- editieren / zitieren --> Unities abgeben: Nur für Vermesser-Kasi
Hallo Kasi, nur auf die Schnelle und ungetestet (müßte aber funzen): Code:
(defun c:test ( / AWS FILE LISTE N X) (if (not $$LastFile)(setq $$LastFile "c:\\test.txt")) (if(setq File (getfiled "Bitte Datei auswählen:" $$LastFile "txt" 1)) (progn (setq $$LastFile File) (if (setq aws (ssget (list (cons 0 "INSERT")(cons 2 "PKT*")))) (progn (setq n 0) (repeat (sslength aws) (setq liste (cons (cons(test_nrAusText (vla-get-EffectiveName (vlax-ename->vla-object (ssname aws n)))) (mapcar '(lambda(X) (rtos X 2 4) ) (vlax-get(vlax-ename->vla-object (ssname aws n))'InsertionPoint)))liste)) (setq n (+ n 1))) (setq File (open "c:\\temp\\test.txt" "w")) (mapcar '(lambda(X) (write-line (strcat (if(car X)(car X)"")"\t" (cadr X)"\t" (caddr X)"\t" (cadddr X)) File)) (vl-sort liste '(lambda(e1 e2) (< (car e1)(car e2))))) (close File)) (alert "Keine gültigen Blöcke ausgewählt.") )) )) (defun test_nrAusText (BlockName / RETVAL) (vlax-for ITEM(vla-item(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))BlockName) (if (=(vla-get-objectname ITEM) "AcDbText") (setq RetVal (vla-get-TextString ITEM)))) RetVal)
(Die Smilies-auslösenden Doppelpunkte habe ich mal durch ein Underline ersetzt ) ------------------ viele Grüße Jörn http://www.bosse-engineering.com Bäume stutzen Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vermesser-Kasi Mitglied Vermesser
Beiträge: 12 Registriert: 13.02.2015 AutoCAD 2016
|
erstellt am: 18. Mrz. 2015 13:18 <-- editieren / zitieren --> Unities abgeben:
alsoooo er öffnet den Explorer nachdem ich den Befehl test eingegeben habe. Wenn ich eine TxT-Datei auswähle fragt er auch ob ich sie überschreiben will jedoch speichert er die exportierten Punkte nicht in die ausgewählte Textdatei sondern erstellt eine test.txt im Ordner C:temp so wie vorher auch. woran liegt das??? 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: 18. Mrz. 2015 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für Vermesser-Kasi
Zitat: Original erstellt von Vermesser-Kasi: alsoooo er öffnet den Explorer nachdem ich den Befehl test eingegeben habe. Wenn ich eine TxT-Datei auswähle fragt er auch ob ich sie überschreiben will jedoch speichert er die exportierten Punkte nicht in die ausgewählte Textdatei sondern erstellt eine test.txt im Ordner C:temp so wie vorher auch. woran liegt das???
Mach mal in dem Lisp folgende Änderungen (fett) Code:
(setq Filehandle (open "c:\\temp\\test.txt"File "w")) (mapcar '(lambda(X) (write-line (strcat (if(car X)(car X)"")"\t" (cadr X)"\t" (caddr X)"\t" (cadddr X)) Filehandle)) (vl-sort liste '(lambda(e1 e2) (< (car e1)(car e2))))) (close Filehandle))
HTH Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vermesser-Kasi Mitglied Vermesser
Beiträge: 12 Registriert: 13.02.2015 AutoCAD 2016
|
erstellt am: 18. Mrz. 2015 13:40 <-- editieren / zitieren --> Unities abgeben:
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004
|
erstellt am: 18. Mrz. 2015 13:47 <-- editieren / zitieren --> Unities abgeben: Nur für Vermesser-Kasi
|