;;; Zur Veranschaulichung sind in der Funktion (WD_Eingabe) feste Anfangswerte eingestellt. ;;; Also erstmal nur mit 'Wendeltreppe' starten und zurücklehnen. ;;; Sieht in der Perspektive und im Gouraud-Modus schattiert besser aus ;;; ;;; Zur eigenen manuellen Eingabe brauchen nur die festen Werte in der Funktion (WD_Eingabe) ;;; einschließlich der Semikolons entfernt zu werden. (defun C:Wendeltreppe () (setvar "CMDECHO" 0) (command "_UCS" "_W") (WD_Eingabe) (WD_Berechnung) (if (< WD_Wendeldicke WD_Stufenhöhe) (progn (prompt "Stufenhöhe zu groß...! Stufenanzahl oder Wendeldicke vergrößern...") (exit))) (WD_Modell)) (defun WD_Modell (/ Stufensegmente Segmenthöhe einzelne_Stufen i k) (command "_UCS" "_ORIG" (list (car WD_Mittelpunkt) (cadr WD_Mittelpunkt) (- WD_Stufenhöhe WD_Wendeldicke)) "_UCS" "_SAVE" "Wendel_temp") (setq Stufensegmente (ssadd) einzelne_Stufen (ssadd) i 0 k 0) (while (< i WD_Stufenteilung) (setq Segmenthöhe (- WD_Wendeldicke (* i WD_Teilsteigung))) (Zylindersegment (list 0 0 0) WD_Außenradius WD_Innenradius Segmenthöhe WD_Stufenteilwinkel) (command "_UCS" "_ORIG" (list 0 0 WD_Teilsteigung) "_UCS" "_Z" WD_Stufenteilwinkel) (setq Stufensegmente (ssadd (entlast) Stufensegmente) i (+ i 1))) (command "_UNION" Stufensegmente "") (setq einzelne_Stufen (ssadd (entlast))) (while (< k (- WD_Stufenanzahl 1)) (command "_COPY" (entlast) "" "0,0,0" (list 0 0 WD_Stufenhöhe) "_ROTATE" (entlast) "" "0,0,0" WD_Stufenwinkel) (setq einzelne_Stufen (ssadd (entlast) einzelne_Stufen)) (setq k (+ k 1))) (command "_UCS" "Holen" "Wendel_temp" "_UCS" "_ORIG" (list 0 0 (- WD_Wendeldicke WD_Stufenhöhe)) "_UCS" "_DEL" "Wendel_temp" "_UNION" einzelne_Stufen "" "_SLICE" (entlast) "" (list 0 0 0) (polar (list 0 0 0) 0 WD_Außenradius) (polar (list 0 0 0) (/ pi 2.0) WD_Außenradius) (list (/ (- WD_Außenradius WD_Innenradius) 2.0) 0 WD_Stufenhöhe))) (defun WD_Berechnung () (setq WD_Stufenwinkel (/ (* WD_Wendelanzahl 360.0) WD_Stufenanzahl) WD_Stufenteilwinkel (/ WD_Stufenwinkel WD_Stufenteilung) WD_Stufenhöhe (/ WD_Höhe WD_Stufenanzahl) WD_Teilsteigung (/ WD_Stufenhöhe WD_Stufenteilung))) (defun WD_Eingabe () (setq WD_Mittelpunkt (list 0 0 0);(getpoint "\nEinfügepunkt:") WD_Außenradius 2000.0;(getdist WD_Mittelpunkt "\nAußenradius:") WD_Innenradius 500.0;(getdist WD_Mittelpunkt "\nInnenradius:") WD_Höhe 2750.0;(getdist WD_Mittelpunkt "\nHöhe:") WD_Wendelanzahl 0.75;(getreal "\nWendelanzahl:") WD_Wendeldicke 300.0;(getreal "\nWendeldicke:") WD_Stufenanzahl 20;(getint "\nStufenanzahl:") WD_Stufenteilung 20;(getint "\nStufenteilung:") )) (defun Zylindersegment (ZS_Einfügepunkt ZS_Außenradius ZS_Innenradius ZS_Höhe ZS_Winkel) (cond ((> ZS_Innenradius 0) (command "_PLINE" (polar ZS_Einfügepunkt 0 ZS_Innenradius) "_W" 0 0 (polar ZS_Einfügepunkt 0 ZS_Außenradius) "_A" "_CE" ZS_Einfügepunkt (polar ZS_Einfügepunkt (aib ZS_Winkel) ZS_Außenradius) "_L" (polar ZS_Einfügepunkt (aib ZS_Winkel) ZS_Innenradius) "_A" "_S" (polar ZS_Einfügepunkt (aib (/ ZS_Winkel 2.0)) ZS_Innenradius) (polar ZS_Einfügepunkt 0 ZS_Innenradius) "")) (t (command "_PLINE" ZS_Einfügepunkt "_W" 0 0 (polar ZS_Einfügepunkt 0 ZS_Außenradius) "_A" "_CE" ZS_Einfügepunkt (polar ZS_Einfügepunkt (aib ZS_Winkel) ZS_Außenradius) "_L" "_CLOSE"))) (command "_EXTRUDE" (entlast) "" ZS_Höhe "")) (defun aib (w) (/ (* w pi) 180.0)) ;;; Bei Rückfragen, Kritik, Lob o.ä. stehe ich gerne per E-Mail zur Verfügung