Ich möchte mir mit einfachen Mittel ein Tool schaffen, welches mir hilft Klotoiden zu zeichnen. Ich weiss, gibt´s schon in den Dachextensions: brauche aber nur das (will mir meine Ribbons nicht unnötig füllen mit Funktionen, die ich nicht brauche).
So zunächst stecke ich noch in den Kinderfüssen... Veilleicht kann mir jemand einen Vorschlag geben einen guten Anfang zu finden. Ich habe mittlerweile einige Szenarien getestet.
1) Zeichne zwei Kreise und hefte diese anhand ihrer Radien tagential an Anfangs- und Endlinie
2) Zeichne zwei Kreise in einem bestimmten Verhältnis zu einander (Radien) an Anfangs- und Endlinie
3) Konstruiere zwei Kreise mit festgel. Radius an Anfangs- und Endlinie und verschiebe deren Centrumpunkte bis alle Geometrieen tagential zueinander verlaufen
Alle 3 Wege brachten mich zu keinem brauchbaren Ergebnis
Meiner Meinung könnte der letzte Versuch funktionieren, indem ich den zweiten Kreis bezügl. dem ersten tangential zeichnen lasse... ?
Code:
(defun c:foo ( /
SELECTOBJ
radS radE
line1 line2
angA angB
entA entB
)
(defun selectObj (quest typ / ent)
(setq ent nil)
(while (not ent)
(if (not (setq ent (entsel (strcat quest typ))))
(princ (strcat "\n Falsch oder nichts gewählt"))
(if (= (cdr (assoc 0 (entget (car ent)))) typ)
ent
(progn
(setq ent nil)
(princ (strcat "\n Wähle ein/e " typ " aus!"))
)
)
)
)
)
(if (and (setq line1 (selectobj "\n Wähle eine Anfangs" "LINE"))
(setq line2 (selectobj "\n Wähle eine End" "LINE"))
(while (not radS)
(if (/= nil (setq radS (getreal "\n Gib einen StartRadius ein! ")))
(progn
(setq radS (abs radS))
(while (not radE)
(if (/= nil (setq radE (getreal "\n Gib einen EndRadius ein! ")))
(setq radE (abs radE))
(progn
(setq radE nil)
(princ "\n Falsche Eingabe")
)
)
)
)
(progn
(setq radS nil)
(princ "\n Falsche Eingabe")
)
)
) )
(progn
(command "_CIRCLE" (polar
(car (interss (car line1) (car line2)))
(+ (* 3 (/ pi 2)) (setq angA (angle (cdr (assoc 10 (entget (car line1)))) (cdr (assoc 11 (entget (car line1)))))))
radS
)
radS
)
(setq entA (entlast))
(command "_CIRCLE" (polar
(car (interss (car line1) (car line2)))
(+ (* 3 (/ pi 2)) (setq angB (angle (cdr (assoc 10 (entget (car line2)))) (cdr (assoc 11 (entget (car line2)))))))
radE
)
radE
)
(setq entB (entlast))
(setq i 0 lst '())
(while (= "" (getstring "\n Schiebe kreise"))
(setq lst (interss entA entB))
(entmod (subst (cons 10 (polar (cdr (assoc 10 (entget entA))) (+ pi angA) (setq i (+ i 0.001))))
(assoc 10 (entget entA))
(entget entA)
)
)
(entmod (subst (cons 10 (polar (cdr (assoc 10 (entget entB))) angB (setq i (+ i 0.001))))
(assoc 10 (entget entB))
(entget entB)
)
)
)
)
)
)
------------------
Gruss Dirk
http://cadplayerlounge.blogspot.se
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP