Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Liegt eine Lotpunkt auf einer Polylinien oder nicht ??

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:  Liegt eine Lotpunkt auf einer Polylinien oder nicht ?? (1373 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: 06. Nov. 2009 17:57    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

Moin!

ich habe folgende Aufgabe die ich irgendwie nicht gelöst bekommen.

Punkte sollten geprüft werden, ob der Lotpunkt auf der Achse (Polylinie) liegen würde. Wenn ich mit vlax-curve-getDistAtPoint die Strecke im zu prüfenden Punkt ermittel und dann in Vergleich zur Länge der Polyline setzen. Regulär würde ich sagen das, wenn die Länge des zu prüfenden Punktes > als die Länge der Polylinie ist, dann liegt dieser Punkt dahinter.

Nun ist es aber so, das wenn der Punkt hinter dem Ende liegt dann ermittelt vlax-curve-getDistAtPoint die Länge zum Endpunkt.

Hat einer von Euch eine Idee wie ich dieses dennoch in Griff bekommen kann ???

Ein Lösungsansätz läge im Vergleich der Richtung im Endpunkt und vom Endpunkt zum Testpunkt. Wenn die Richtung des Prüfpunktes um 1/2PI differiert zur Richtung im Endpunkt dann ist der Punkt noch auf der Achse - andernfalls dahinter. Vor dem Endpunkt auf der Achse geht nicht, da dann der Abstand Anfang-Lotpunkt sowieso < der Gesamtlänge ist. Hierfür fehlt mir aber die Möglichkeit zur Ermittlung der Richtung im Endpunkt.

Wäre Euch sehr verbunden, wenn mir einer noch schnell zum Wochenende helfen kann.

Gruß Jan :-)

------------------
jan :-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 06. Nov. 2009 18:35    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

Sorry, kapier ich jetzt nicht ganz. Kannste mal eine skizze hochladen?

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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: 06. Nov. 2009 18:47    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


skizze.jpg

 
hi !

hier die Skizze - 3 Punkte liegen mit dem Lotpunkt auf der Achse. Der Punkt, mit der roten Linie, nicht !!

Den Punkt gilt es zu ermitteln - das Testkriterium im Grunde genommen.

Das ganze wird eine Bemassung mit Achsbezug.

Gruß Jan :-)

------------------
jan :-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 06. Nov. 2009 19:29    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

Eine Krücke, keine saubere rechnerische Lösung, aber !? könnte ?! auch funktionieren:
Pickbox auf Null und wenn (nentselp lotpkt) die Polylinie liefert liegt der Punkt drauf, sonst nicht.

Wie g'sagt, könnte funktionieren - ausprobieren

------------------
Schöne Grüße
Ernst

www.geopaint.at

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: 06. Nov. 2009 20:21    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

hallo ernst,

unter list mit pickbox - verstehe die umsetzung nicht !

gruß Jan :-)

------------------
jan :-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

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: 07. Nov. 2009 06: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 Nur für tappenbeck 10 Unities + Antwort hilfreich

Hallo Jan,
wenn Du das über die Richtung prüfen willst, dann kannst Du einen Vergleich der Steigung des Lotfußpuntktes und dem Winkel von Lotfußpunkt - Punkt machen.
Im Test hat es funktioniert, probier mal aus (Feinschliff musst Du machen)
Code:

(defun c:test ( / )
  (if(setq obj_line (car(entsel "\nLinienelement auswählen:")))
 
  (while(setq pkt (getpoint "\nPunkt picken:"))
    (if(and
      (setq pkt_lot (vlax-curve-getClosestPointTo(vlax-ename->vla-object obj_line)pkt))
      (setq stat(vlax-curve-getDistAtPoint (vlax-ename->vla-object obj_line)pkt_lot))
      (or(=(rtos(test:angle:korrekt(test:steigung obj_line pkt_lot))2 6)
        (rtos(test:angle:korrekt(-(angle pkt_lot pkt)(* pi 0.5)))2 6))
        (=(rtos(test:angle:korrekt(test:steigung obj_line pkt_lot))2 6)
        (rtos(test:angle:korrekt(+(angle pkt_lot pkt)(* pi 0.5)))2 6))
        ))
      (princ "\nLotPunkt OK.")
      (princ "\nLotPunkt ausserhalb."))
      )))
;;;Winkelwert korrigieren
(defun test:angle:korrekt (w / )
  (if (< w 0.0)(setq w (+ w (* pi 2.0))))
  (if (> w (* 2.0 pi))(setq w (- w (* 2.0 pi))))
  w)
;;;Steigung an einem Punkt
(defun test:steigung (obj koord / )    
(angle(vlax-curve-getFirstDeriv (vlax-ename->vla-object obj)
  (vlax-curve-getParamAtPoint(vlax-ename->vla-object obj)
  (vlax-curve-getClosestPointTo(vlax-ename->vla-object obj)koord) 
    ))'(0 0 0)))

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

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: 07. Nov. 2009 12:02    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:
Moin!

ich habe folgende Aufgabe die ich irgendwie nicht gelöst bekommen.

Punkte sollten geprüft werden, ob der Lotpunkt auf der Achse (Polylinie) liegen würde. Wenn ich mit [i]vlax-curve-getDistAtPoint die Strecke im zu prüfenden Punkt ermittel und dann in Vergleich zur Länge der Polyline setzen.[/i]


Besteht die Polylinie wie in Deiner Skizze immer aus geraden Linienstücken? Dann ist die Sache doch viel einfacher und allgemeiner lösbar als mit den Vlax-* Funktionen. Du brauchst Dir dann doch bloß den Projektionspunkt des Punkts auf jede durch eine Teillinie definierte Gerade zu berechnen, und nimmst davon nur diese Punkte, bei denen der Projektionspunkt zwischen Anfangs- und Endpunkt des Linienstückchens liegt. Es kann nun je nach Situation sein, dass kein Projektionspunkt auf der Linie liegt, oder nur einer, oder beliebig viele. Du suchst die Fälle, in denen keiner da ist.

Falls Du Probleme mit der Mathematik für den Projektionspunkt hast, dann könnte in GeomCAL eine Funktion vorliegen, die das schon löst. Falls da nix drin ist, dann nimm' meinen GeomCAL Klon CADCAL(download von www.archtools.de/cadcal.zip,  Anleitung hier: http://www.archtools.de/cadcal.html).  Du nimmst die Funktion PPL(pp,p1,p2), die den Projektionspunkt von PP auf die Gerade durch P1 und P2 berechnet. Du kannst das mit dem Befehl CCAL direkt auf der Befehlszeile und interaktiv machen:
Befehl: CCAL
CC ?=help >> expression: PPL(cur,cur,cur)
  >> enter point for CUR:
  >> enter point for CUR:
  >> enter point for CUR:

Oder Du kannst das in Lisp machen, wenn Du die Punkte PP, P1 und P2 schon in den Variablen gespeichert hast:
(ccal "ppl(pp,p1,p2)")


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 07. Nov. 2009 19:16    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

Hast ja jetzt schon bessere Lösungen ...
aber der Vollständigkeit halber ...

Zitat:
...unter list mit pickbox - verstehe die umsetzung nicht... !

Bin mir jetzt nicht hundertpro sicher, dass (nentselp) die Pickbox berücksichtigt - gehe aber davon aus;
daher (setvar "pickbox" 0) damit nicht objekte "gefunden" werden, die nur in der Nähe liegen.
Trotzdem könnte genau im Lotpkt ein weiteres Objekt deine PL kreuzen ...
(fällt mir auch grad ein - ? (ssget "_C" pkt pkt)? - wenn da die PL dabei / nicht dabei ist ...)

------------------
Schöne Grüße
Ernst

www.geopaint.at

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