| |
| 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-getDistAtPoint (1454 mal gelesen)
|
GottesGeschenk Mitglied Bauingenieur
Beiträge: 229 Registriert: 23.02.2007 winxp pro sp3 / intel p4 3GHz / 2,5GB RAM / CAD 2011
|
erstellt am: 24. Feb. 2012 11:33 <-- editieren / zitieren --> Unities abgeben:
hallo zusammen. Dieser ausdruck funktioniert einwandfrei (vlax-curve-getDistAtPoint (handent handle) (vlax-curve-getClosestPointTo (handent handle) punkt)) aber nur solange ich im wks mit kleinen koordinaten arbeite. wenn nicht, dann kann es passieren, dass kein distance gefunden wird. in meinem fall ist es tatsächlich so, dass mal was gefunden wird mal nicht. ich bräuchte mal eure hilfe, wie man es lösen kann. die idee mit dem verschieben zum ursprung habe ich schon selbst gehabt, die möchte ich aber ungern benutzen. vieleicht ein anderer vorschlag? danke euch vielmals gruß theo 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: 24. Feb. 2012 12:02 <-- editieren / zitieren --> Unities abgeben: Nur für GottesGeschenk
alle koordinaten der polylinie und des punkts in ein lokales koordinatensystem transformieren (siehe dazu auch hier). dann fuer jedes segment das lot vom punkt auf das segment faellen (lotpunkt berechnen) und die distanz zwischen punkt und lotpunkt ermitteln. der geringste abstand ist dein ergebnis. gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GottesGeschenk Mitglied Bauingenieur
Beiträge: 229 Registriert: 23.02.2007 winxp pro sp3 / intel p4 3GHz / 2,5GB RAM / CAD 2011
|
erstellt am: 24. Feb. 2012 12:15 <-- editieren / zitieren --> Unities abgeben:
hallo Marco danke für deine antwort. der verlinkte beitrag ist von mir. ich benötige nicht den lotpunkt, sondern seinen abstand zum startpunkt der polylinie (vlax-curve-getDistAtPoint) gruß theo 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: 24. Feb. 2012 12:23 <-- editieren / zitieren --> Unities abgeben: Nur für GottesGeschenk
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 24. Feb. 2012 12:28 <-- editieren / zitieren --> Unities abgeben: Nur für GottesGeschenk
|
GottesGeschenk Mitglied Bauingenieur
Beiträge: 229 Registriert: 23.02.2007 winxp pro sp3 / intel p4 3GHz / 2,5GB RAM / CAD 2011
|
erstellt am: 24. Feb. 2012 12:28 <-- editieren / zitieren --> Unities abgeben:
macht nichts. ich habe es jetzt so gelöst, dass ich die polylinie zum ursprung kopiere. wenn jemand aber eine elegantere lösung hätte würde ich mich freuen wenn er sie mir sagt. vielen dank. gruß theo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Feb. 2012 12:33 <-- editieren / zitieren --> Unities abgeben: Nur für GottesGeschenk
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 24. Feb. 2012 12:49 <-- editieren / zitieren --> Unities abgeben: Nur für GottesGeschenk
umrechnen geht bei Koordinaten .. bei Curvenobjekten wie Splines, PLS mit Bögen , angeglichenen 2DPLs usw. wo mann trotzdem gerne die vlax-curve Funktionen nutzen will , wäre das wohl etwas aufwendig wie ist es damit: ?
;(DISTATPOINT (car(entsel "\nObjekt:"))(getpoint "\nPunkt:")) (defun DISTATPOINT ( OBJ PKT / P1 COPY PP D) (if(and(setq OBJ(cond ((=(type OBJ)'ENAME)(vlax-ename->vla-object OBJ)) ((=(type OBJ)'VLA-OBJECT) OBJ) ) ) (setq P1(vlax-curve-getStartpoint OBJ)) (not(vl-catch-all-error-p (setq COPY(vl-catch-all-apply 'vla-copy (list OBJ) ) ) ) ) ) (progn (and(not(vl-catch-all-error-p (vl-catch-all-apply 'vla-move (list COPY (vlax-3d-point P1)(vlax-3d-point '(0 0 0))) ) ) ) (setq PP(vlax-curve-getClosestPointTo COPY (mapcar '- PKT P1))) (setq D(vlax-curve-getDistAtPoint COPY PP)) ) (not(vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list COPY) ) ) ) D ) ) ) ------------------ - 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 |
neurosis Mitglied dipl.ing.
Beiträge: 222 Registriert: 22.08.2006
|
erstellt am: 24. Feb. 2012 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für GottesGeschenk
ok, ablauf (fuer lwpolyline) 1. alle stuetzpunkte der polylinie mit bulge auslesen -> in liste packen 2. in lokales ks transformieren (nur die punkte) 3. suche des startsegments (beginnend beim ersten segment): - bogen oder linie - wenn bogen: ist der abstand "punkt - mittelpunkt bogen" gleich radius des bogens, dann hab ich startsegment - wenn linie: liegt punkt auf linie (distanz von punkt zum lotpunkt gleich 0), dann hab ich startsegment 4. suche des endsegments (ist das gleiche wie 3.) - wenn gleiches segment: abstand berechnen - fertig (bogen und linie unterscheiden) - wenn aktuelles segment nicht endsegment ist, laenge (unterschieden nach bogen und linie) berechnen und aufaddieren - wenn endsegment endlich gefunden: abstand berechnen - fertig (bogen und linie unterscheiden) gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |