| |
| 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: Kreise tangential verbinden (Lisp o.ä.) (9480 mal gelesen)
|
walter.f Mitglied Orgelbauer
Beiträge: 918 Registriert: 28.04.2005 Autocad 2016 SP1 sPlan 7.0 Win 8.1 Pro HP Z820 Quadro K5000 XEON E5-2643 @ 3,30GHz 128 GB Ram
|
erstellt am: 17. Mrz. 2011 09:54 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich suche eine Möglichkeit, automatisiert (d.h. durch Anklicken derselben) jeweils zwei Kreise mit tangentialen Linien zu verbinden und dann die "inneren" Kreisanteile herauszustutzen. Die Kreise können sowohl gleichen als auch verschiedenen Durchmesser haben, liegen in verschiedensten Richtungen zueinander und können sich auch überschneiden. Hat schonmal jemand hierfür ein LISP o.ä. gesehen? Ich habe jetzt eine Weile gesucht, konnte bisher aber leider nichts finden... Es geht darum, Bohrungen durch eine Fräsung miteinander zu verbinden. Das sollte doch eigentlich hier und da mal vorkommen... Pro Projekt sind das bei mir schonmal ca. 1000 Kreispaare, das ist "zu Fuss" eine elende Klickerei:-( Gruß, Walter ------------------ FAQ Hilfe zum Dateiupload Systeminfo anpassen 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: 17. Mrz. 2011 10:01 <-- editieren / zitieren --> Unities abgeben: Nur für walter.f
|
Dig15 Ehrenmitglied V.I.P. h.c. Dipl.-Ing. für Markscheidewesen und Geodäsie
Beiträge: 5833 Registriert: 27.02.2003 DWG TrueView 2014
|
erstellt am: 17. Mrz. 2011 10:26 <-- editieren / zitieren --> Unities abgeben: Nur für walter.f
Hallo Walter, wie genau muss die tangentiale Linie sein? Mit dem Befehl abrunden kannst Du Kreise "verbinden". Als Radius musst Du da einen sehr hohen Wert nehmen (im Vergleich zum Kreisradius). Dann wir es annähernd eine Gerade und die Ansatzpunkte sind auch annähernd tangential. Aber eben wie gesagt: nur eine Annäherung. ------------------ Viele Grüße Lutz Glück Auf! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 AutoCAD 2.5 - 2025, Civil 3D, MAP 3D, ACADM, ACA Inventor Prof. 2025, AIP 4-2025 Win 11
|
erstellt am: 17. Mrz. 2011 11:09 <-- editieren / zitieren --> Unities abgeben: Nur für walter.f
Es ist etwa ne halbe stunde Arbeit, dafür was Vernünftiges zu programmieren - hier mal nur die Mathematik aufgeschrieben und ein paar commands aufgerufen - kein Errorhandling kein Ofang-Unterdrückung! Code: (defun C:KTANV( / dm e1 e2 k1 k2 m1 m2 p1 p2 r1 r2 rd sk win winm wint) (prompt "Kreise tangential verbinden\n") (setq k1 (car (entsel "Kreis 1 (groß) wählen:")) k2 (car (entsel "Kreis 2 (klein) wählen:")) e1 (entget k1) r1 (cdr (assoc 40 e1)) m1 (cdr (assoc 10 e1)) e2 (entget k2) r2 (cdr (assoc 40 e2)) m2 (cdr (assoc 10 e2)) dm (distance m1 m2) rd (- r1 r2) win (atan rd dm) winm (angle m1 m2) wint (- (+ winm (* 0.5 PI)) win) P1 (polar m1 wint r1) P2 (polar m2 wint r2) ) (command "_Line" p1 p2 "") (setq sk (ssadd (entlast))) (command "_mirror" (entlast) "" m1 m2 "_N") (setq sk (ssadd (entlast) sk)) (command "_trim" sk "" (list k1 (polar m1 winm r1)) (list k2 (polar m2 winm (- r2)))"") )
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
walter.f Mitglied Orgelbauer
Beiträge: 918 Registriert: 28.04.2005
|
erstellt am: 17. Mrz. 2011 11:30 <-- editieren / zitieren --> Unities abgeben:
Hallo und danke für Eure Antworten! @CADmium: ich bin mir auch sicher, dass es geht, nur bevor ich mich stundenlang hinsetze und versuche, etwas zu basteln, wollte ich halt erstmal fragen, ob es sowas schon gibt... @Dig15: auf die Idee, dass man Kreise "abrunden" kann, wäre ich niemals gekommen...;-) Von der Genauigkeit würde das für meine Zwecke immer reichen. Es nutzt nur leider nicht viel, weil ich dadurch auch nicht weniger klicken muss... Gruß, Walter ------------------ FAQ Hilfe zum Dateiupload Systeminfo anpassen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
walter.f Mitglied Orgelbauer
Beiträge: 918 Registriert: 28.04.2005 Autocad 2016 SP1 sPlan 7.0 Win 8.1 Pro HP Z820 Quadro K5000 XEON E5-2643 @ 3,30GHz 128 GB Ram
|
erstellt am: 17. Mrz. 2011 11:47 <-- editieren / zitieren --> Unities abgeben:
CAD-Huebner schrieb: Zitat: Es ist etwa ne halbe stunde Arbeit, dafür was Vernünftiges zu programmieren -
Hallo Udo! ...das gilt für DICH und ein paar andere Profis hier! Ich hätte da sicher deutlich länger dran gesessen! Vielen Dank! Das ist genau das, was ich gesucht habe! Dein Beitrag widerspricht zwar eigentlich dem Forumsgedanken, nur Hilfe zur Selbsthilfe zu leisten, aber in diesem Fall will ich mich ausnahmsweise nicht beschweren;-)... Gruß, Walter ------------------ FAQ Hilfe zum Dateiupload Systeminfo anpassen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
walter.f Mitglied Orgelbauer
Beiträge: 918 Registriert: 28.04.2005
|
erstellt am: 25. Mrz. 2011 15:03 <-- editieren / zitieren --> Unities abgeben:
Hallo! Nochmals herzlichen Dank an Udo! Die Lisp-Routine funktioniert im Prinzip prima (nur die Ofang-Deaktivierung muss ich noch einbauen...) Nun habe ich aber ein Problem festgestellt, auf das ich mir keinen rechten Reim machen kann. Da ich Udo nicht persönlich damit belästigen will, hier mein Problem für die Allgemeinheit: bei vielen Kreispaaren (gleiche oder verschiedene Durchmesser) wird der zweite Kreis nicht an den Tangenten gestutzt. In der Kommandozeile kommt die Meldung, das Objekt berühre keine Kante. Kann sich da jemand eine Ursache vorstellen? Wenn ich die Tangenten z.B. dehne oder mit "Abrunden" über den Kreis hinaus verlängere, geht es?? Die Tangenten scheinen zu kurz zu sein... Wenn ich so weit wie möglich heranzoome, sehe ich eine Lücke zwischen Tangente und resultierendem Bogen (kleiner als in Autocad in Zahlenwerten darstellbar). Bei einigen Objekten wird sie scheinbar toleriert, bei anderen nicht. Kann ich das beeinflussen? Objektfang und Objektfangspur sind aus. Ich befinde mich nicht in extremen Koordinatenbereichen. Vielleicht fällt ja jemandem auf Anhieb etwas ein... Eine Testdatei ist im Anhang, einfach das ".txt" weglöschen! Das Lisp zum Testen steht weiter oben. Damit kann ich bei mir die beiden Kreise links oben erfolgreich verbinden, die beiden unteren nicht. Über dem Strich sind die Kreise "unbearbeitet". Gruß, Walter ------------------ FAQ Hilfe zum Dateiupload Systeminfo anpassen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 AutoCAD 2.5 - 2025, Civil 3D, MAP 3D, ACADM, ACA Inventor Prof. 2025, AIP 4-2025 Win 11
|
erstellt am: 25. Mrz. 2011 15:31 <-- editieren / zitieren --> Unities abgeben: Nur für walter.f
Da wirken sich wohl Rundungsungenauigkeiten beim Rückrechnen des Winkels aus dem Tangens des sehr schmalen Dreiecks aus. Hier mal semiprofessionewll nachgebessert - einfach Linie mit aktiviertem Objektfang "Tangente" aufgerufen. Code: (defun C:KTANV( / dm e1 e2 k1 k2 m1 m2 os p1 p2 r1 r2 rd sk win winm wint) (prompt "Kreise tangential verbinden\n") (setq k1 (car (entsel "Kreis 1 (groß) wählen:")) k2 (car (entsel "Kreis 2 (klein) wählen:")) e1 (entget k1) r1 (cdr (assoc 40 e1)) m1 (cdr (assoc 10 e1)) e2 (entget k2) r2 (cdr (assoc 40 e2)) m2 (cdr (assoc 10 e2)) dm (distance m1 m2) rd (- r1 r2) win (atan rd dm) winm (angle m1 m2) wint (- (+ winm (* 0.5 PI)) win) P1 (polar m1 wint r1) P2 (polar m2 wint r2) ) ; Objektfang deaktivieren (if (= 0 (logior 16384 (setq os (getvar "OSMODE")))) (setvar "OSMODE" (+ os 16384)) ) ; Tangentenpunkte über Ofang fangen (command "_Line" "_tan" p1 "_tan" p2 "") (setq sk (ssadd (entlast))) ; Linie spiegeln (command "_mirror" (entlast) "" m1 m2 "_N") (setq sk (ssadd (entlast) sk)) ; Kreise stutzen (command "_trim" sk "" (list k1 (polar m1 winm r1)) (list k2 (polar m2 winm (- r2)))"") ; Objektfang restaurieren (setvar "OSMODE" os) (prin1) )
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
walter.f Mitglied Orgelbauer
Beiträge: 918 Registriert: 28.04.2005
|
erstellt am: 25. Mrz. 2011 15:43 <-- editieren / zitieren --> Unities abgeben:
Hallo Udo! Super, so funktioniert es! Aber so richtig verstehen kann ich es nicht, dass es sich nur bei einigen Kreisen so auswirkt, bei anderen nicht. Verhältnis "klappt" zu "klappt nicht" sind geschätzte 4 zu 1. Denn die Winkel bewegen sich ja immer in einem sehr ähnlichen Bereich... Mir war noch aufgefallen, dass der Befehl "Umgrenzung" die vorhandene Lücke bei den betroffenen Objekten "ignoriert". Da gibt es scheinbar eine größere (einstellbare?) Toleranz, wie auch beim Verbinden von Polylinien(?). Für das Stutzen scheint das nicht der Fall zu sein. Gruß und schönes Wochenende! Walter ------------------ FAQ Hilfe zum Dateiupload Systeminfo anpassen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |