| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Koordinaten kontrollieren und korrigieren (2081 mal gelesen)
|
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 21. Okt. 2014 13:48 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe eine externe DWG-Datei, in der in meiner VLX-Anwendung die Koordinaten ermittelt und versetzt werden. Dadurch entstehen Punkte einer Polylinie in dieser Form: (-1.49394e+096 -3.11268e+095 0.0) Die X- und Y-Koordinaten haben Werte, die in der Folge zu Fehlern in meiner VLX-Anwendung führen. Ich habe deshalb zuerst versucht, die DWG-Datei mit Hilfe von den Befehlen Wiederherstellen, Prüfen, Bereinigen und Wblock zu reparieren. Danach habe ich noch versucht, mit dem Befehl PLINIE die Geometrie nachzuzeichnen. Leider aber alles ohne Erfolg. Gibt es eine Möglichkeit, die X- und Y-Koordinaten zu "korrigieren"? Danke im Voraus und viele Grüße Bernd
[Diese Nachricht wurde von Bernd10 am 21. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadwomen Ehrenmitglied V.I.P. h.c. Mädchen für fast alles
Beiträge: 2966 Registriert: 26.08.2002 ACAD R11 - 2018.1.2 (Plant3D) AVIS ACAD LT 2013- 2020 ZWCAD 2015 Versuch "nun ja" [s]History P3D 2012/(13) SP und Hotfix([/s]<P> Windows 10 / 64 Bit Xeon CPU 3.5GHz 16GB Ram NVIDIA Quadro P2000 3x Dell TV100 88P Monitore
|
erstellt am: 21. Okt. 2014 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
ah geschaft sie doch hoch zu laden ------------------ Also ich finde Unities gut ... und andere sicher auch ------------------------------------------------ cadwomen™ Plant ist wie Öl suchen, je tiefer man bohrt desto mehr kommt ans Tageslicht Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 21. Okt. 2014 14:28 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
Ich kann nichts Ungewöhnliches erkennen - worauf soll man achten? Code: Befehl: LISTE Objekte wählen: 1 gefunden LWPOLYLINE Layer: "AW-A_schwarz250!42.45.47!RALCLASSIC$RAL9017" Bereich: Modellbereich Referenz = 8b5b Geschlossen Konstante Breite 0.000 Fläche 238875.342 Umfang 2411.076 Bei Punkt X= 998.752 Y= 450.985 Z= 0.000 Ausbuchtung 0.104 Mittelpunkt X= 993.752 Y=-1986.510 Z= 0.000 Radius 2437.500 Startwinkel 89.88 Endwinkel 113.56 Bei Punkt X= 19.598 Y= 247.865 Z= 0.000 Bei Punkt X= 119.940 Y= 18.891 Z= 0.000 Ausbuchtung -0.104 Mittelpunkt X= 993.752 Y=-1986.510 Z= 0.000 Radius 2187.506 Startwinkel 113.54 Endwinkel 89.87 Bei Punkt X= 998.752 Y= 200.990 Z= 0.000 Bei Punkt X= 998.752 Y= 451.005 Z= 0.000
[EDIT] Problematisch beim Versatz ist wohl die kleine Selbstüberschneidung, da Punkt 1 und Punkt 5 nicht aufeinanderfallen, sondern einen Abstand = 0.020 aufweisen. Vielleicht wäre es besser, den 5. Punkt komplett aus der Polylinie zu entfernen. ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de [Diese Nachricht wurde von CAD-Huebner am 21. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 21. Okt. 2014 14:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Udo, danke für Deine Antwort. Wenn ich das betrachte, habe ich wohl ein Problem in meiner eigenen Funktion zum Versetzen der Geometrie. Die habe ich geschrieben, weil auch der Standard-Befehl Probleme bereitet hat. Wenn ich mich richtig erinnere, ist der "fehlerhafte" Standard-Befehl aber ein bekanntes Problem. Ich muss meine Funktion noch genauer testen und melde mich wieder. Viele Grüße Bernd [Diese Nachricht wurde von Bernd10 am 21. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 22. Okt. 2014 08:48 <-- editieren / zitieren --> Unities abgeben:
Hallo, nach einigen Tests vermute ich nun, dass es zum Einen an der externen DWG-Datei liegt. Ich habe dazu 1.) für eine Geometrie (zwei Linien, zwei Kreisbögen) die Werte mit dem Befehl Liste ermittelt, 2.) eine neue und saubere Zeichnung geöffnet und 3.) die Objekte gemäß den Werten aus dem Befehl Liste neu gezeichnet. Beim Ausführen meines Befehls hatte ich dann keinen Abbruch mehr. Leider stimmt aber das Ergebnis nach meinem Versetzen nicht mit meinen Erwartungen überein. Deshalb muss ich zum Zweiten auch noch meine eigene Funktion zum Versetzen überprüfen. Danke an alle für die Ideen und viele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Grebe Mitglied
Beiträge: 536 Registriert: 16.12.2002
|
erstellt am: 22. Okt. 2014 08:55 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
Entstehen diese (-1.49394e+096 -3.11268e+095 0.0) Koordinaten erst durch das Versetzen, oder sind diese schon in der Ursprungsdatei so "groß" ? Wenn sie schon vorher so "groß" sind, würde ich die Geometrie mal nach 0,0,0 verschieben und erst dann versetzen. Dann wäre ein evtl. vorhandes Problem mit der kleinen Differenz großer Zahlen gelöst. Mathias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 22. Okt. 2014 08:55 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
|
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 22. Okt. 2014 09:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Mathias, das Verschieben hat leider nicht zum Erfolg geführt. So sieht es vor dem Versetzen aus: Befehl: _list 5 gefunden LINIE Layer: "AW-A_schwarz250!42.45.47!RALCLASSIC$RAL9017" Bereich: Modellbereich Referenz = 8b08 von Punkt, X= 990.699 Y= 443.835 Z= 0.000 nach Punkt, X= 990.699 Y= 443.815 Z= 0.000 Länge = 0.020, Winkel in XY-Ebene = 270.00 Delta X = 0.000, Delta Y = -0.020, Delta Z = 0.000 LINIE Layer: "AW-A_schwarz250!42.45.47!RALCLASSIC$RAL9017" Bereich: Modellbereich Referenz = 8b07 von Punkt, X= 990.699 Y= 193.820 Z= 0.000 nach Punkt, X= 990.699 Y= 443.835 Z= 0.000 Länge = 250.015, Winkel in XY-Ebene = 90.00 Delta X = 0.000, Delta Y = 250.015, Delta Z = 0.000 BOGEN Layer: "AW-A_schwarz250!42.45.47!RALCLASSIC$RAL9017" Bereich: Modellbereich Referenz = 8b06 Zentrum Punkt, X= 985.699 Y=-1993.680 Z= 0.000 Radius 2187.506 Start Winkel 89.87 Ende Winkel 113.54 Länge 903.897 LINIE Layer: "AW-A_schwarz250!42.45.47!RALCLASSIC$RAL9017" Bereich: Modellbereich Referenz = 8b05 von Punkt, X= 11.545 Y= 240.695 Z= 0.000 nach Punkt, X= 111.887 Y= 11.721 Z= 0.000 Länge = 249.995, Winkel in XY-Ebene = 293.66 Delta X = 100.341, Delta Y = -228.974, Delta Z = 0.000 BOGEN Layer: "AW-A_schwarz250!42.45.47!RALCLASSIC$RAL9017" Bereich: Modellbereich Referenz = 8b04 Zentrum Punkt, X= 985.699 Y=-1993.680 Z= 0.000 Radius 2437.500 Start Winkel 89.88 Ende Winkel 113.56 Länge 1007.149 Beim Versetzen erfolgt dieser Abbruch:
Befehl: dds Polylinien erstellen....beendet. Ungültiger Punkt: (5.73989e+098 -1.80194e+099 0.0) Viele Grüße Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 22. Okt. 2014 09:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Udo, in der DWG-Datei, in der ich die Geometrie neu erstellt habe, sind nur zwei Linien und zwei Kreisbögen vorhanden. Den Abbruch habe ich in der alten DWG-Datei auch, wenn ich sie auf die zwei Linien und zwei Kreisbögen bereinigt habe. Viele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 23. Okt. 2014 13:04 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich versuche schon die ganze Zeit, den Fehler in meiner Funktion zum Berechnen des Schnittpunktes zu finden. Aber leider ohne Erfolg. In der Anlage ist meine Lisp-Funktion und eine DWG-Datei zum besseren Verständnis. Die Funktion soll den Schnittpunkt von Linie und Kreis berechnen, ohne die Geometrie zu benutzten. Edit: Ich bin per PM darauf hingewiesen worden, dass die Hilfe größer sein könnte, wenn ich einen Aufruf der Funktion vorgebe. Hiermit kann mein Problem mit den falsch ermittelten Schnittpunkte getestet werden. (schnpkt_kreis_linie (list 974.245 -2005.37 0.0) 2433.0 (list 974.7 182.114 0.0) (list 974.7 432.128 0.0)) Wo ist der Fehler in meiner Funktion?
Danke im Voraus und viele Grüße Bernd [Diese Nachricht wurde von Bernd10 am 24. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 222 Registriert: 22.08.2006
|
erstellt am: 25. Okt. 2014 16:57 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
hallo bernd, ich sag mal so: dein code ist suboptimal. warum? du solltest dich bemühen, deinen code in funktionen auszulagern, die für sich einzeln testbar sind. was benoetigen wir in deinem fall: (gks ... globalen koordinatensystem, lks ... lokales koordinatensystem) 1. eine funktion zum verschieben von punkten vom gks ins lks 2. eine funktion zum verschieben von punkten vom lks ins gks 3. eine funktion zum rotieren des gks ins lks 4. eine funktion zum rotieren des lks ins gks 5. eine funktion zur schnittpunktberechnung von linie mit kreis, wobei der mittelpunkt des kreises 0,0 ist (lks) beispielfunktion fuer 1.
Code:
(defun translateWCS->UCS(pt v) (mapcar '- pt v) )
in deinem falle waere pt ein linienpunkt und v der mittelpunkt des kreises beispielfunktion fuer 3.
Code:
(defun rotateWCS->UCS (x y phi) (list (+ (* x (cos phi)) (* y (sin phi))) (+ (* (* x -1) (sin phi)) (* y (cos phi)))) )
in deinem falle waeren x und y die koordinaten eines linienpunkts und phi=pi/2(90°), wenn die linie senktrecht im gks stehen sollte. beispielfunktion fuer 5. (hatten wir schon mal in einem anderen thread)
Code:
; berechnung von wirklichen und virtuellen schnittpunkten einer linie mit einem kreis in ; einem lokalen koordinatensystem, wobei der kreismittelpunkt den koordinatenursprung darstellt ; der fall, dass die linie senkrecht im lks liegt, wird in dieser funktion nicht abgedeckt ; return: ; line is vertical : nil ; no intersection : nil ; one intersection : ((x y) (x y)) ; two intersection : ((x1 y1) (x2 y2)) (defun intersectionLine-Circle-UCS(pt1 pt2 rad / b D m) (if (setq b (cadr (inters pt1 pt2 '(0.0 0.0) '(0.0 1000.0) nil))) (progn (setq m (/ (- (cadr pt2) (cadr pt1)) (- (car pt2) (car pt1)))) ; Diskriminante D = r² * (1 + m²) - b² ; D>0 -> Kreis wird in zwei Punkten geschnitten ; D=0 -> Kreis wird in einem Punkten berührt ; D<0 -> Kreis wird von Gerade gemieden (setq D (- (* (* rad rad) (1+ (* m m))) (* b b))) (if (equal D 0.0 0.0001) (setq D 0.0)) (if (>= D 0.0) (list (list (/ (+ (* -1 m b) (sqrt D)) (1+ (* m m))) (/ (+ b (* m (sqrt D))) (1+ (* m m)))) (list (/ (- (* -1 m b) (sqrt D)) (1+ (* m m))) (/ (- b (* m (sqrt D))) (1+ (* m m)))) ) ) ) ) )
die funktionen fuer 2. und 4. sehe ich mal als hausaufgaben an. und nun kommen wir zur "hauptfunktion"
Code:
; berechnung von wirkliche und virtuelle schnittpunkte einer linie mit einem kreis in ; einem globalen koordinatensystem ; return: ; no intersection : nil ; one intersection : ((x y) (x y)) ; two intersection : ((x1 y1) (x2 y2)) (defun intersectionLine-Circle-WCS(circleCP radius lineSP lineEP / pt1 pt2 rot is-lst) ; linienpunkte von gks in lks verschieben (setq pt1 (translateWCS->UCS lineSP circleCP) pt2 (translateWCS->UCS lineEP circleCP)) ; ueberpruefen, ob linie senkrecht steht. wenn ja, muss ks um 90° gedreht werden (if (or (equal (angle pt1 pt2) (/ pi 2.0) 0.000001) (equal (angle pt1 pt2) (+ pi (/ pi 2.0)) 0.000001)) (setq pt1 (rotateWCS->UCS (car pt1) (cadr pt1) (/ pi 2.0)) pt2 (rotateWCS->UCS (car pt2) (cadr pt2) (/ pi 2.0)) rot T) ) (if (setq is-lst (intersectionLine-Circle-UCS pt1 pt2 radius)) (if rot (list (translateUCS->WCS (rotateUCS->WCS (car (car is-lst)) (cadr (car is-lst)) (/ pi 2.0)) circleCP) (translateUCS->WCS (rotateUCS->WCS (car (cadr is-lst)) (cadr (cadr is-lst)) (/ pi 2.0)) circleCP)) (list (translateUCS->WCS (list (car (car is-lst)) (cadr (car is-lst))) circleCP) (translateUCS->WCS (list (car (cadr is-lst)) (cadr (cadr is-lst))) circleCP)) ) ) )
um nur die wirklichen schnittpunkte zu erhalten, musst du ueberpruefen, ob angle(lineSP, intersectionPt) = angle(lineSP, lineEP) undangle(lineEP, intersectionPt) = angle(lineEP, lineSP) ist. abschliessend: dein fehler liegt bei dir in der rotation des koordinatensystems gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office [Diese Nachricht wurde von neurosis am 25. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 27. Okt. 2014 07:18 <-- editieren / zitieren --> Unities abgeben:
|
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 27. Okt. 2014 15:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Marco, ich habe versucht mit Deine Informationen mein Problem zu lösen, doch leider befürchte ich, dass mein Wissen und Verständnis dafür nicht ausreicht. Ich verstehe es so, dass ich aufgrund der Lage der Linie einen Sonderfall habe und deshalb das Koordinatensystem drehen muss. Ich scheitere aber schon am Verständnis Deiner Funktionen translateWCS->UCS und rotateWCS->UCS, weshalb ich die Hausaufgaben 2. und 4. nicht hin bekomme. Ich könnte mir vorstellen (ohne es zu wissen), dass die Funktion translateUCS->WCS so aussehen muss: (defun translateUCS->WCS(pt v) (mapcar '+ pt v) ) Bei der Funktion rotateUCS->WCS scheitere ich völlig: (defun rotateUCS->WCS(x y phi) (list (- (* x (cos phi)) (* y (sin phi))) (- (* (* x -1) (sin phi)) (* y (cos phi)))) ) Us sind für Deinen obigen Beitrag trotzdem unterwegs. Viele Grüße Bernd [Diese Nachricht wurde von Bernd10 am 27. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 28. Okt. 2014 11:00 <-- editieren / zitieren --> Unities abgeben:
Hallo, mir ist es nun doch gelungen, meine beiliegende Funktion mit Teilen aus dem Beitrag von Marco zu erweitern. Die Schnittpunkte des obigen Beispiels werden damit korrekt berechnet. Danke nochmals und viele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |