| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Liegt der Punkt auf der Linie (1574 mal gelesen)
|
Karl01 Mitglied

 Beiträge: 55 Registriert: 15.06.2004 Win 7; Map2012
|
erstellt am: 12. Nov. 2004 07:16 <-- editieren / zitieren --> Unities abgeben:         
Hallo Ich wähle mit .getEntity eine Polylinie aus und und mit .getPoint einen neuen Einfügepunkt für einen Block aus. Ich habe den Objektfang auf nächsten eingestellt um den Block auf der Polyline zu platzieren. Nun liegen aber manchmal mehrere Polyline sehr eng nebeneinander. Wie kann ich überprüfen das der Einfügepunkt auf der ausgewählten Polyline liegt? Danke Karl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 12. Nov. 2004 08:07 <-- editieren / zitieren --> Unities abgeben:          Nur für Karl01
mit Lisp gehts so (defun ISPOINT_ONLINE ( LINE PKT) (equal(vlax-curve-getClosestPointTo (vlax-ename->vla-object LINE) Pkt)PKT) ) Aufruf (ISPOINT_ONLINE (car(entsel "\nLinie wählen : "))(getpoint "\n Punkt wählen : ")) liefert dir 'T wenn der Punkt auf dem Kurvenobject liegt. In VBA, gibt es -glaube ich- kein Äquivalent zu den vlax-curve- Funktionen. Vielleicht kannst du das Lisp aus VBA aufrufen?! ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."
[Diese Nachricht wurde von CADmium am 12. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 12. Nov. 2004 08:46 <-- editieren / zitieren --> Unities abgeben:          Nur für Karl01
|
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 12. Nov. 2004 08:50 <-- editieren / zitieren --> Unities abgeben:          Nur für Karl01
 sendcommand vielleicht? .. Axel, für solche Antworten bist du doch zuständig, ich hab doch keine Ahnung von VBA .. ------------------ - 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 |
Karl01 Mitglied

 Beiträge: 55 Registriert: 15.06.2004 Win 7; Map2012
|
erstellt am: 12. Nov. 2004 09:45 <-- editieren / zitieren --> Unities abgeben:         
|
harryk Mitglied Projektleiter
 
 Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 12. Nov. 2004 10:34 <-- editieren / zitieren --> Unities abgeben:          Nur für Karl01
hi, nur nen ansatz, nicht schlau aber koennte funzen: wenn's nur um linien geht muessen die winkel vom: - linienstartpunkt zum einfuegepunkt - einfuegepunkt zum linienendpunkt gleich dem linienwinkel sein. bei polylinien wirst du durch die segmente laufen muessen. darueber hinaus hatte ich irgendwo mal ne vba klasse die lisp ausfuehrt, hab ich mal benuzt um festzustellen ob xref's overlayed oder attached sind, da wollte mir vba auch nicht weiterhelfen. ich schau mal ob ich das in alten backup's noch find und meld mich wieder. gruss, harry [Diese Nachricht wurde von harryk am 12. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 12. Nov. 2004 10:58 <-- editieren / zitieren --> Unities abgeben:          Nur für Karl01
ab der 2005 gibts ne typelibrary für lisp hab das im inet gefunden , kanns leider nicht testen (momentan keine 2005er) If Me.Application.Version = "16.0" Then Set VLisp = ThisDrawing.Application.GetInterfaceObject("VL.Application.16") Else Set VLisp = ThisDrawing.Application.GetInterfaceObject("VL.Application.1") End If
Set VLispFunc = VLisp.ActiveDocument.Functions Set obj1 = VLispFunc.Item("read").funcall("(vl-princ-to-string (assoc pDXF (entget (handent pHandle))))") varRetVal = VLispFunc.Item("eval").funcall(obj1)
------------------ WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 12. Nov. 2004 19:58 <-- editieren / zitieren --> Unities abgeben:          Nur für Karl01
@cadmium > sendcommand vielleicht? Tja, man kann ja viel senden, aber wie erfährt dann das VBA-Programm, wofür sich Lisp entschieden hat - drauf oder nicht drauf? Das ist ja alles nicht so einfach... Das Ergebnis in eine Uservariable und in VBA auslesen? Oder eher das, wohin Fuchsis Beitrag zielt? Zu Fuchsi Ansinnen gibt's hier mehr: http://ww3.cad.de/foren/ubb/Forum259/HTML/000399.shtml Hier würde ich allerdings eine simplere Lösung vorschlagen: Ein Punkt P liegt auf der Linie P1-P2, wenn Abstand(P, P1) + Abstand(P, P2) == Abstand(P1, P2). Na ja, da VBA auch keine Funktion kennt, die (distance ...) entspricht, muss man die natürlich auch noch selber schreiben. Sollte aber eigentlich kein Problem sein. Auf jeden Fall erspart man sich damit die Cross-Aufrufe. Blöd wird's nur, wenn die Polylinie auch noch Bogensegmente hat, auf denen der Punkt liegen könnte:-( Gruß, Axel Strube-Zettler
------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
 
 Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 13. Nov. 2004 15:33 <-- editieren / zitieren --> Unities abgeben:          Nur für Karl01
|

| |
Karl01 Mitglied

 Beiträge: 55 Registriert: 15.06.2004 Win 7; Map2012
|
erstellt am: 14. Nov. 2004 20:39 <-- editieren / zitieren --> Unities abgeben:         
Hallo ich das Problem wie folgt gelöst Ich berechne den Abstand zwischen dem Anfangspunkt der Polyline und dem .getPoint, und konstruiere einen Kreis (Mittelpunkt = Anfangspunkt Polylinie und Radius = Abstand. Der Schnittpunkt von der Polylinie und dem Kreis (.IntersectWith) ist der Einfügepunkt für den Block der somit genau auf der Polylinie liegt. Karl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |