Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  vlax-curve-getClosestPointTo - Punkt außerhalb der Polylinie

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 05. Feb. 2014 12:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


jt_nextpoint.jpg

 
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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 05. Feb. 2014 13:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tappenbeck 10 Unities + Antwort hilfreich

Schau dir doch mal die Optionen von der Funktion vlax-curve-getClosestPointTo an.

Link zur Hilfe


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

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 05. Feb. 2014 13:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tappenbeck 10 Unities + Antwort hilfreich

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 05. Feb. 2014 13:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tappenbeck 10 Unities + Antwort hilfreich

Achja, wie immer: Teste nahe des Nullpunktes (könnte ja sein das dies in Vergessenheit geraten 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


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 05. Feb. 2014 13:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 05. Feb. 2014 14:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tappenbeck 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 05. Feb. 2014 16:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 05. Feb. 2014 21:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tappenbeck 10 Unities + Antwort hilfreich

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.


Sehen Sie sich das Profil von neurosis an!   Senden Sie eine Private Message an neurosis  Schreiben Sie einen Gästebucheintrag für neurosis

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 06. Feb. 2014 07:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tappenbeck 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz