| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| CIDEON Whitepaper: Elektronik und Mechanik redundanzfrei vereinen: Der Weg zur mechatronischen Stückliste, ein Whitepaper
|
Autor
|
Thema: geringsten Abstand zwischen Polylinien finden und bemaßen (2563 mal gelesen)
|
giraffe Mitglied Bauingenieur
Beiträge: 11 Registriert: 09.02.2005 AutoCAD2006 unter WindowsXP
|
erstellt am: 13. Mrz. 2007 21:15 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich suche eine Möglichkeit die Stelle mit dem geringsten Abstand zwischen 2 2D-Polylinien zu finden. (Die Polylinien sind fast parallel aber bestehen aus vielen unterschiedlichen Elementen Linien und Bogensegmente) Nun möchte ich an der Stelle mit dem geringsten Abstand den Abstand bemaßen. Diese Stelle muß nicht unbedingt auf einem Stützpunkt der Polylinie liegen. Hat da jemand eine Idee?? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 13. Mrz. 2007 22:16 <-- editieren / zitieren --> Unities abgeben: Nur für giraffe
Denke, du wirst um eine programmtechnische Lösung (Lisp) nicht drumrumkommen. Mit Boardmitteln wüßte ich momentan keine Lösung. Aber da das Programm (wegen der Bögen ect.) doch etwas Aufwand bedeuten würde, lohnt sich das für den Einsatzfall, oder ist die visuelle Methode nicht doch besser? ------------------ - 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 |
giraffe Mitglied Bauingenieur
Beiträge: 11 Registriert: 09.02.2005 AutoCAD2006 unter WindowsXP
|
erstellt am: 13. Mrz. 2007 23:47 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, Zitat: Original erstellt von CADmium: Denke, du wirst um eine programmtechnische Lösung (Lisp) nicht drumrumkommen. Mit Boardmitteln wüßte ich momentan keine Lösung.
Das habe ich befürchtet... Zitat: Aber da das Programm (wegen der Bögen ect.) doch etwas Aufwand bedeuten würde, lohnt sich das für den Einsatzfall, oder ist die visuelle Methode nicht doch besser?
Naja die visuelle Methode ist auch sehr mühsam. Ich mach das aktuell so: -Ich versuche die Polylinien um bestimmte Abstände zu versetzen (das klappt aber manchmal nicht so richtig) -Dann suche ich die Polylinien ab, ob sich irgendwo die versetzten Linien schneiden. Da die Linien aber sehr lang (>500Meter) und die Abstände sehr klein (<1cm) sein können ist das seeeehr langwierig. Hat jemand eine bessere Idee, oder muß ich im LISP-Forum mal nachfragen? Tschü die Giraffe
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 14. Mrz. 2007 07:56 <-- editieren / zitieren --> Unities abgeben: Nur für giraffe
Zitat: Original erstellt von giraffe: ... oder muß ich im LISP-Forum mal nachfragen?
Die Leute, die dort lesen, lesen in der Regel auch hier. Und für's anfragen gibt's die PM-Funktion. Bei gewissen Programmierklippen, also Stellen, wo du mit deinem Programm nicht weiterkommst, kannst du natürlich gerne mit konkreter Problemschilderung im Lisp-Forum nachfragen
------------------ - 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 |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 14. Mrz. 2007 08:09 <-- editieren / zitieren --> Unities abgeben: Nur für giraffe
servus! ich hab' mir für so was mal eine Näherungslösung geschrieben (Danke an Axel für "intersect" :-). Du kannst verschiedene Genauigkeitsstufen eingeben und dich so immer näher an den kleinsten Abstand herantasten. Ciao Georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
giraffe Mitglied Bauingenieur
Beiträge: 11 Registriert: 09.02.2005 AutoCAD2006 unter WindowsXP
|
erstellt am: 14. Mrz. 2007 11:18 <-- editieren / zitieren --> Unities abgeben:
Hallo gmk, Danke für das Programm. Allerdings funktioniert es bei mir nicht. Ich habe jetzt mit verschiedenen Werten für Längenintervall und Richtungsintervall (wofür ist das denn??)gespielt, bekomme aber nur folgende Meldung: Aktuelle Länge: 196.2717no function definition: STEIGUNG Mach ich was falsch? Ich hab mal einen sehr einfachen Fall meiner Polylinien angehangen. Vielleicht hilft das weiter, wenn man die Polylinien mal sieht. Vielen Dank! Tschü die Giraffe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 14. Mrz. 2007 13:40 <-- editieren / zitieren --> Unities abgeben: Nur für giraffe
|
giraffe Mitglied Bauingenieur
Beiträge: 11 Registriert: 09.02.2005 AutoCAD2006 unter WindowsXP
|
erstellt am: 14. Mrz. 2007 16:04 <-- editieren / zitieren --> Unities abgeben:
Hallo gmk, Danke für das neue Programm. Ich habe es mit einer Schrittweite von 1 versucht, da hat es geklappt und er hat eine Linie von 0,0 zu einer Polyline gezogen. Wenn ich die Reihenfolge der Auswahl der Polylinie ändere, kommen andere Ergebnisse raus. Dann wollte ich die Schrittweite auf 0.5 setzten, dann fing er an zu abeiten, aber dann hats das AutoCad2006 in die "ewigen Jagdgründe" entführt. (am Ende des Programms) Oder liegt das am Winkel? Ich weiß noch nicht so recht wofür diese Angabe da ist. Ich habe es erstmal mit 100gon versucht, da ich ja den senkrechten Abstand zwischen den Polylinien haben will. Oder sollte ich hier andere Angaben machen? Zum Verständnis für das Programm: Du gehst auf einer Polylinie im Schrittweitenabstand entlang und suchst die andere Linie?Oder? Tschü die Giraffe
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 14. Mrz. 2007 16:58 <-- editieren / zitieren --> Unities abgeben: Nur für giraffe
Zitat: Original erstellt von giraffe:
Zum Verständnis für das Programm: Du gehst auf einer Polylinie im Schrittweitenabstand entlang und suchst die andere Linie?Oder?
stimmt. Längenintervall eingeben: Schrittweite in der sich der Strahl auf der ersten Polylinie bewegt. Richtungsintervall eingeben: Schrittweite mit der sich der Strahl um die erste Polylinie dreht. Je kleiner die Werte um so genauer wird's, es dauert dafür aber auch um so länger. Wie gesagt, ist eine Näherungslösung. Wenn du's genau berechnen willst mußt du die Polylinien in verschiedene Funktionen aufteilen und dann die kürzesten Abstände der verschiednen Funktionen zueinander berechnen (unter Berücksichtigung der Anfangs- und Endpunkte). Ist dann doch wohl mehr eine abendfüllende Aufgabe :-) Übrigens: in Caddy gab's diese Abfrage schon vor 20 Jahren .... Ciao Georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 14. Mrz. 2007 17:17 <-- editieren / zitieren --> Unities abgeben: Nur für giraffe
probier das mal, geht um einiges schneller (DEFUN c:gmk_ka ( / obj1 obj2 interv laenge dl eliste pkt1 pkt2 )
(DEFUN abstand () (SETQ pkt1 (vlax-curve-getClosestPointTo obj1 (vlax-curve-getPointAtDist obj1 dl))) (SETQ pkt2 (vlax-curve-getClosestPointTo obj2 pkt1)) (SETQ eliste (CONS (LIST pkt1 pkt2 (DISTANCE pkt1 pkt2) dl) eliste)) ) (SETVAR "DIMZIN" 0) (vl-load-com) (SETQ obj1 (car(entsel "\nErstes Objekt wählen: "))) (SETQ obj2 (car(entsel "\nZweites Objekt wählen: "))) (SETQ interv (GETREAL "\nLängenintervall eingeben: ")) (command "_.LENGTHEN" obj1 "") (SETQ laenge (getvar "PERIMETER")) (SETQ dl 0) (SETQ eliste nil) (abstand) (REPEAT (FIX (/ laenge interv)) (SETQ dl (+ dl interv)) (abstand) ) (SETQ dl laenge) (abstand) (SETQ eliste (CAR (vl-sort eliste (function (lambda (e1 e2) (< (NTH 2 e1) (NTH 2 e2))))))) (COMMAND "_line" (TRANS (NTH 0 eliste) 0 1) (TRANS (NTH 1 eliste) 0 1) '(0 0) "") (ALERT (STRCAT "\n" "minimaler Abstand: " (RTOS (NTH 2 eliste) 2 5) "\n" "bei Station " (RTOS (NTH 3 eliste) 2 5))) ) Ciao Georg [Diese Nachricht wurde von gmk am 14. Mrz. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
giraffe Mitglied Bauingenieur
Beiträge: 11 Registriert: 09.02.2005 AutoCAD2006 unter WindowsXP
|
erstellt am: 14. Mrz. 2007 17:46 <-- editieren / zitieren --> Unities abgeben:
Super gmk, das geht ja rasend schnell und ist das, was ich brauche. Vielen Dank, gmk! Und alle verfügbaren Daumen nach oben! Ich bin zwar ein völliger Depp, wenn es um Auto-Lisp geht, aber so langsam wächst bei mir das innere Bedürfnis mich damit mal näher zu befassen.... Nochmals vielen Dank ich bin echt begeistert (und frage mich ernsthaft, warum ich die Frage nicht schon viel früher gestellt habe ) Tschü die fröhliche Giraffe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |