| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Elementgenaue Koordinate bei nentsel (1013 mal gelesen)
|
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1213 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 11. Apr. 2012 16:04 <-- editieren / zitieren --> Unities abgeben:
Hi ! ich habe eine Funktion am Wickel bei der verschiedene Operationen ausgeführt werden sollen. Da auch auf Attribute und Blockelemente zugegriffen werden soll verwende ich die nentsel-Funktion. Nun bin ich dabei eine Funktion zu erstellen für welche ich die Anfangs- bzw. Endpunktkoordiante einer Linie oder eines (LW)Polylinien-Elementes benötige. Ich habe mir die Koordinaten der Stützpunkte ermittelt und nun möchte ich ermitteln auf welchem Segment das gewählte (Sub-)Element liegt. Dazu brauche ich die Koordinate des Pick-Punktes. Nun war ich leider immer davon ausgegangen das diese direkt auf dem Obejekt liegt. Dem ist aber leider nicht so wie ich gerade festgestellt habe. :-( Hat einer eine Idee wie man vielleicht erreichen kann das der Pick-Punkt elementgenau liegt. ??? Osmode 512 => near reicht nicht aus. ... einer Alternative wäre ich ansonsten auch nicht abgeneigt. Gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 11. Apr. 2012 16:25 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
HAllo Jan, wenn Du die Koordinaten (Welt) einer Polylinie hast, dann kannst Du das 2.te Element der NENTSEL-Rückgabe verwenden (das ist die Pick-Koordinate). (setq PickObj (nentsel)) (setq PickKoord (trans (cadr PickObj)1 0)) Wenn Du die Stationen der Stützpunkte mit VLAX-CURVE Funktionen berechnest, dann kannst Du die PickKoordinate mit VLAX-CURVE-getClosestPointTo und Vlax-Curve-getDistAtPoint ebenfalls als Station rechnen und dann in die vorhandene Stationierung einsortieren. Dann hast Du auch Dein Segment. ------------------ viele Grüße Jörn http://www.bosse-engineering.com 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: 12. Apr. 2012 10:31 <-- editieren / zitieren --> Unities abgeben:
Moin ! soweit hat das jetzt auch alles funktioniert. Sogar unter Briscad! Das Problem ist jetzt nur das vlax-curve-getClosestPointTo bei der Anwendung auf POLYLINE (nicht LWPolyline!) zu einer Fehlermeldung führt. Geht das da nicht oder gibt es eine Alternative ? Gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 12. Apr. 2012 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hallo Jan, vielleicht solltest Du ein Beispiel reinstellen, eine Polylinie, der Punkt, der bei vlax-curve-getClosestPointTo eine Fehlermeldung auslöst und die Code-Zeile, wie Du sie verwendest. Im Prinzip funktioniert das auch mit POLYLINIEN (Ärger gibt es immer nur im hohen Koordinatenbereich) ------------------ viele Grüße Jörn http://www.bosse-engineering.com 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: 12. Apr. 2012 11:26 <-- editieren / zitieren --> Unities abgeben:
Hi ! sorry .... hier der zugehörige Code: Code: (setq e_source (nentsel))(setq point_of_selection (cadr e_source) ) (princ "\n2pick: ") (princ point_of_selection) (setq obj (vlax-ename->vla-object (car e_source)) )
(princ obj) (setq point_on_line (vlax-curve-getClosestPointTo obj point_of_selection) ) ;end-setq (princ point_on_line)
und die Meldung:
Fehler: Fehlerhafter Argumentwert: AcDbCurve 43 Gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 12. Apr. 2012 11:41 <-- 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: 12. Apr. 2012 12:18 <-- editieren / zitieren --> Unities abgeben:
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 12. Apr. 2012 12:29 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 12. Apr. 2012 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Toll das sich noch jemand an der Stelle engagiert, da ich dich Helfer nicht weiter leiden sehen kann, diese Info: Es betrifft alle POLYLINE, du brauchst also nur EINE erzeugen und wirst dann das hier angesprochene Thema nachvollziehen können. ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) [Diese Nachricht wurde von cadffm am 12. Apr. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 12. Apr. 2012 14:53 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
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: 12. Apr. 2012 20:44 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Wenn (NENTSEL) ein VERTEX zurückgibt, muss zuerst das Hauptelement (entget (cdr (assoc 330 (entget (car (nentsel)))))) gewählt werden. Hier mal ein kleines Testprogramm mit Fallunterscheidung:
Code:
(defun C:testPointonLine () ; subfunction (defun pointonline (ename pt) (vlax-curve-getClosestPointTo (vlax-ename->vla-object ename) pt) ; Returnwert = point_on_line ) ; Main (if (setq e_source (nentsel)) ; wenn was gewählt, dann (progn (setq point_of_selection (cadr e_source) eleType (strcase (cdr (assoc 0 (entget (car E_source))))) ) (princ "\n2pick: ") (princ point_of_selection) (princ "\npoint_on_line: ") (cond ((= eleType "VERTEX") (pointonline (cdr (assoc 330 (entget (car E_source)))) point_of_selection) ) ((member eletype (list "CIRCLE" "ELLIPSE" "LWPOLYLINE" "LINE" "XLINE" "ARC")) (pointonline (car E_source) point_of_selection) ) ('T (prompt (strcat "Elementtyp <" eletype "> wird nicht unterstützt"))) ) ) ) )
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de 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: 13. Apr. 2012 09:56 <-- editieren / zitieren --> Unities abgeben:
|