; Zeichnet 3D-Spiralen in zylindrischer und kegeliger Form. Die Kegelspirale ; kann bei negativem Radius mit nach oben abnehmenden, bei positivem ; Radius mit nach oben zunehmendem Durchmesser erzeugt werden. ; Bei der Spiralsteigung kann zwischen links- oder rechtssteigend gewählt ; werden. ; Programmiert von: Karl Maurer (C) 1997 ; ; Erstellungsdatum: 22.03.1997 ; Letzte Änderung: 09.08.1997 ; ; geringfügig abgewandelt (für Rel. 14): 23.05.2014 ;************************* Programmbeginn ************************ (defun *error* (emsg) (princ emsg) (altsv) (princ) ) (defun altsv () (setvar "blipmode" blm) (setvar "cmdecho" cmd) ) ;************************ Spirale zeichnen ************************ (defun cspiral ( / kreis_sp start_wi dist delta_wi delta_ho delta_ve sp_pt orient dist_ve) (setq cmd (getvar "cmdecho")) (setq blm (getvar "blipmode")) (setvar "blipmode" 0) (setvar "cmdecho" 0) (setq kreis_sp (* pi 2)) (initget "R L") (setq orient (getkword "\n Spiralsteigung (Rechts/Links):")) (cond ((= orient "L") (setq delta_wi (- (/ kreis_sp anz_pt)))) ((= orient "R") (setq delta_wi (/ kreis_sp anz_pt))) );end cond (setq delta_ho (/ dif_h anz_pt) delta_ve (/ steig_sp anz_pt) start_wi (- 0.0 delta_wi) dist start_R dist_ve 0.0) (command "_3dpoly") ;[EDIT] _spline ersetzt durch _3dpoly (repeat anz_w (repeat anz_pt (setq sp_pt (polar mitte_sp (setq start_wi (+ start_wi delta_wi)) (setq dist (+ dist delta_ho)))) (setq sp_pt (list (car sp_pt) (cadr sp_pt) (+ dist_ve (caddr sp_pt))) dist_ve (+ dist_ve delta_ve)) (command sp_pt) );end repeat anz_pt );end repeat anz_w (setq sp_pt (polar mitte_sp (setq start_wi (+ start_wi delta_wi)) (setq dist (+ dist delta_ho)))) (setq sp_pt (list (car sp_pt) (cadr sp_pt) (+ dist_ve (caddr sp_pt))) dist_ve (+ dist_ve delta_ve)) (command sp_pt "" "" "") (altsv) (princ) );end defun cspiral ;********************** 3D-Spirale generieren ********************** (defun C:3DSP ( / anz_w mitte_sp steig_sp start_R anz_pt dif_h) (setq cm (getvar "cmdecho")) (setq bl (getvar "blipmode")) (setvar "blipmode" 0) (setvar "cmdecho" 0) (initget 1) (setq mitte_sp (getpoint "\n Mittelpunkt: ")) (initget 7) (setq start_R (getdist mitte_sp "\n Startradius: ")) (initget 7) (setq anz_w (getint "\n Anzahl der Windungen: ")) (initget 1) (setq steig_sp (getdist "\n Steigung der Spirale: ")) (initget 1) (setq dif_h (getdist "\n Radiusaenderung pro Windung: ")) (initget 6) (setq anz_pt (getint "\n Punkte pro Windung <36>: ")) (cond ((null anz_pt) (setq anz_pt 36)) );end cond (cspiral) (altsv) (princ) );end defun c: (princ "\n SPIRAL.LSP geladen. Mit Eingabe 3DSP und RETURN starten. ") (princ)