| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: vlax-curve-getClosestPointTo - Punkt außerhalb der Polylinie (2019 mal gelesen)
|
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1213 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 05. Feb. 2014 12:53 <-- editieren / zitieren --> Unities abgeben:
Hi ! ich bin dabei eine dichtesten Punkt auf einer Linie zu finden auf Basis eines anderen Punktes. Es funktioniert auch Code: (vlax-curve-getClosestPointTo vlaobj blk_gc10_2D)
solange der Lotpunkt auf der Linie liegt. Würde ein möglicher Lotpunkt außerhalb dieser Objektes liegen, dann wird zwar ein Ergebnis geliefert - aber das ist falsch. Nun hatte ich mir als weiteren Test überlegt den Winkel in dem Lotpunkt über Code:
para_lotpunkt (vlax-curve-getparamatpoint vlaobj pline_lotpunkt) arc_lotpunkt (vlax-curve-getfirstderiv vlaobj para_lotpunkt)
zu ermitteln um dann zu prüfen, ob ein rechter Winkel zwischen der Linie Lotpunkt-zutestender-Punkt und der Richtung in dem Lotpunkt liegt. Von der Logik ist das auch OK. Aber wenn der zuerst ermittelte Lotpunkt "falsch" liegt, dann kann ich auch sonst etwas prüfen - nur zufällig wäre vermutlich der Test ok. Habe ich einen grundsätzlichen Gedankenfehler oder hat einer eine treffsichere Methode um zu testen ob der Lotpunkt auf der Linie liegt oder nicht? Im Anhang noch ein Bild was die Lage der Punkte zeigt. Gruß Jan :-) ------------------ jan :-) 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: 05. Feb. 2014 13:01 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 05. Feb. 2014 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Teste es mit einer Linie in einer neuen Datei ohne Firlefanz, sollte es noch immer "falsch" laufen, dann poste es hier, sollte es richtig funktionieren, dann schau dir deine, uns unbekannten, Objekte genauer an. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 05. Feb. 2014 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1213 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 05. Feb. 2014 13:56 <-- editieren / zitieren --> Unities abgeben:
hi ! während ich es nochmal testen werde die Frage was die Option bedeutet? Zitat: If specified and not nil, vlax-curve-getClosestPointTo extends the curve when searching for the nearest point.
Diese verstehe ich leider nicht so ganz ...? Gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 05. Feb. 2014 14:03 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Google-translate: Wenn angegeben und nicht null, vlax-Kurve-getClosestPointTo erstreckt sich die Kurve bei der Suche nach dem nächsten Punkt. Und genau so ist das. Ohne das Extend ist unter Umständen der nächste Punkt der Endpunkt der Linie, wenn Extend gewünscht ist, denn wird der LotPunkt ausgegeben der es wäre wenn man das Objekt am Ende verlängern würde (das was du suchst). Es gibt jedoch unterschiede, je nach dem was für ein Objekttyp man hat. Teste es mit einer LINE ! Hoffe geholfen haben zu können, Google translate findest du hier: Klick! wobei für einzelne Begriffe LEO sicher besser ist. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1213 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 05. Feb. 2014 16:43 <-- editieren / zitieren --> Unities abgeben:
hi ! ich habe mir ein MiniTool geschrieben vorerst - das arbeitet richtig im aktuellen Koordiantenbereich wie auch am Nullpunkt. Also muss ich noch weitersuchen. Gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 823 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 05. Feb. 2014 21:23 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Zitat: Original erstellt von tappenbeck: Hi !ich bin dabei eine dichtesten Punkt auf einer Linie zu finden auf Basis eines anderen Punktes. Es funktioniert auch Code: (vlax-curve-getClosestPointTo vlaobj blk_gc10_2D)
solange der Lotpunkt auf der Linie liegt. Würde ein möglicher Lotpunkt außerhalb dieser Objektes liegen, dann wird zwar ein Ergebnis geliefert - aber das ist falsch. Nun hatte ich mir als weiteren Test überlegt den Winkel in dem Lotpunkt über Code:
para_lotpunkt (vlax-curve-getparamatpoint vlaobj pline_lotpunkt) arc_lotpunkt (vlax-curve-getfirstderiv vlaobj para_lotpunkt)
zu ermitteln um dann zu prüfen, ob ein rechter Winkel zwischen der Linie Lotpunkt-zutestender-Punkt und der Richtung in dem Lotpunkt liegt. Von der Logik ist das auch OK. Aber wenn der zuerst ermittelte Lotpunkt "falsch" liegt, dann kann ich auch sonst etwas prüfen - nur zufällig wäre vermutlich der Test ok. Habe ich einen grundsätzlichen Gedankenfehler oder hat einer eine treffsichere Methode um zu testen ob der Lotpunkt auf der Linie liegt oder nicht? Im Anhang noch ein Bild was die Lage der Punkte zeigt. Gruß Jan :-)
Geht's wie in der Zeichnung nur um einen Punkt auf einer Linieß Ob ein Punkt auf einer Linie liegt, lässt sich doch sehr einfach testen. Beispielsweise kannst Du die Summe der Abstände vom Punkt zu den Endpunkten der Linie mit der Länge der Linie vergleichen. Nur wenn die gleich sind, liegt der Punkt auf der Linie. Du kannst auch den Winkel zwischen LP und PA und PE messen - nur wenn der genau Pi oder -Pi ist, liegt der Punkt auf der Linie (wenn er genau 0 oder 2Pi ist, liegt er in der Verlängerung der Linie).
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: 06. Feb. 2014 07:33 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
hallo jan, mit folgendem wird der lotpunkt eines punktes p3 mit einer linie p1 p2 berechnet. wenn der wert der variablen u zwischen 0 und 1 liegt, ist der lotpunkt auf der linie. wenn der wert 0 oder 1 ist, liegt der lotpunkt auf p1 bzw. p2. wert der wert <0 oder >1 ist, liegt er ausserhalb der linie. Code:
(setq x1 (car p1) y1 (cadr p1) z1 (caddr p1) x2 (car p2) y2 (cadr p2) z2 (caddr p2) x3 (car p3) y3 (cadr p3) z3 (caddr p3)) (setq n (+ (* (- x3 x1) (- x2 x1)) (* (- y3 y1) (- y2 y1)) (* (- z3 z1) (- z2 z1))) d (* (sqrt (+ (* (- x2 x1) (- x2 x1)) (* (- y2 y1) (- y2 y1)) (* (- z2 z1) (- z2 z1)))) (sqrt (+ (* (- x2 x1) (- x2 x1)) (* (- y2 y1) (- y2 y1)) (* (- z2 z1) (- z2 z1))))) u (/ n d) x (+ x1 (* u (- x2 x1))) y (+ y1 (* u (- y2 y1))) z (+ z1 (* u (- z2 z1))))
gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |