; The Codewriting Workbook ; Creating Computational Architecture in AutoLISP ; by Robert J. Krawczyk ; Princeton Architectural Press, 2008 ; -------------------------------------------------------------------------- ; CH07B.LSP ; -------------------------------------------------------------------------- ; Disclaimer: The information contained in this file is distributed on an ; "as is" basis, without warranty. Although every precaution has been taken ; in the preparation of this work, the author and publisher shall not have ; any liability to any person or entity with respect to any loss or damage ; caused or alleged to be caused directly or indirectly by the information ; contained in this work. ; -------------------------------------------------------------------------- (defun dtr (a) (* pi (/ a 180.0))) (defun rtd (a) (/ (* a 180.0) pi)) ; -------------------------------------------------------------------------- ; Random number function, returns 0.0 to 1.0: (defun rn () (if (not sd) (setq sd (getvar "date"))) (setq md 65536 mx 25173 nc 13849 sd (rem (+ (* mx sd) nc) md)) (/ sd md) ) ; -------------------------------------------------------------------------- ;Rounding, round x to ndec decimals: (defun round (x ndec) (atof (rtos x 2 ndec))) ;--------------------------------------------------------------------------- ; VT - top view (defun c:vt () (command "vpoint" "r" 270 90) (command "zoom" "e" "ucs" "v" "zoom" ".9x") (princ) ) ; VL - left view (defun c:vl () (command "vpoint" "r" 180 0) (command "zoom" "e" "ucs" "v" "zoom" ".9x") (princ) ) ; VR - right view (defun c:vr () (command "vpoint" "r" 0 0) (command "zoom" "e" "ucs" "v" "zoom" ".9x") (princ) ) ; VF - front view (defun c:vf () (command "vpoint" "r" 270 0) (command "zoom" "e" "ucs" "v" "zoom" ".9x") (princ) ) ; VB - back view (defun c:vb () (command "vpoint" "r" 90 0) (command "zoom" "e" "ucs" "v" "zoom" ".9x") (princ) ) ; VSW - SW view (defun c:vsw () (command "vpoint" "r" 270 90) (command "ucs" "v") (command "vpoint" "r" 225 45) (command "zoom" "e" "zoom" ".9x") (princ) ) ; VSE - SE view (defun c:vse () (command "vpoint" "r" 270 90) (command "ucs" "v") (command "vpoint" "r" 315 45) (command "zoom" "e" "zoom" ".9x") (princ) ) ; VNE - NE view (defun c:vne () (command "vpoint" "r" 270 90) (command "ucs" "v") (command "vpoint" "r" 45 45) (command "zoom" "e" "zoom" ".9x") (princ) ) ; VNW - NW view (defun c:vnw () (command "vpoint" "r" 270 90) (command "ucs" "v") (command "vpoint" "r" 135 45) (command "zoom" "e" "zoom" ".9x") (princ) ) ;--------------------------------------------------------------------------- ;--------------------------------------------------------------------------- (defun prog01 () (setvar "CMDECHO" 0) (setq iname (getstring "\nEnter BMP filename: ")) (setq fh1 (open iname "r")) (setq oname (getstring "\nEnter PTS filename: ")) (setq fh2 (open oname "w")) ; BMP Header 1 (setq h1list (list )) (repeat 14 (setq nchar (read-char fh1)) (setq h1list (append h1list (list nchar))) ) ; MP Header 2 (setq h2list (list )) (repeat 40 (setq nchar (read-char fh1)) (setq h2list (append h2list (list nchar))) ) ; width, height, colors (setq iw (nth 4 h2list)) (setq ih (nth 8 h2list)) (setq ic (nth 14 h2list)) ; write PTS header info (princ (substr (rtos (+ 1000 iw) 2 0) 2 3) fh2) (princ (substr (rtos (+ 1000 ih) 2 0) 2 3) fh2) (princ (substr (rtos (+ 1000 ic) 2 0) 2 3) fh2) (princ "\n" fh2) ; get pixels (setq nh 0) (repeat ih (setq nw 0) (repeat iw ; get RGB value (setq rval (read-char fh1)) (setq gval (read-char fh1)) (setq bval (read-char fh1)) ; compute grayscale value (setq gsval (fix (+ (* 0.3 rval) (* 0.59 gval) (* 0.11 bval)))) ; write to file (princ (substr (rtos (+ 1000 nw) 2 0) 2 3) fh2) (princ (substr (rtos (+ 1000 nh) 2 0) 2 3) fh2) (princ (substr (rtos (+ 1000 (- 255 rval)) 2 0) 2 3) fh2) (princ (substr (rtos (+ 1000 (- 255 gval)) 2 0) 2 3) fh2) (princ (substr (rtos (+ 1000 (- 255 bval)) 2 0) 2 3) fh2) (princ (substr (rtos (+ 1000 (- 255 gsval)) 2 0) 2 3) fh2) (princ "\n" fh2) (setq nw (+ nw 1)) ) ; skip padding (if (/= (fix (/ (* iw 3.0) 4)) (/ (* iw 3.0) 4)) (progn (repeat (- 4 (rem (* iw 3) 4)) (setq nchar (read-char fh1)) ) )) (setq nh (+ nh 1)) ) (close fh1) (close fh2) (princ "\nFile created: ") (princ oname) (princ "\nBMP Width: ") (princ iw) (princ " Height: ") (princ ih) (princ " Colors: ") (princ ic) (princ) ) ; --------------------------------------------------------------------------- (defun prog02 () ; 2D circle at each point ; diameter based grayscale value (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq cmax (getdist "\nEnter maximum circle size: ")) (setq cmin (getdist "\nEnter minimum circle size: ")) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; center point (setq cpt (list ptx pty)) ; convert grayscale to percent (setq gsprct (/ gscolor 255.0)) ; radius (setq rad (+ cmin (* (- cmax cmin) gsprct))) ; circle (command ".CIRCLE" cpt rad) ) ) (close fh1) (command ".ZOOM" "e") (princ) ) ; --------------------------------------------------------------------------- (defun prog02a () ; 2D circle at each point ; diameter based grayscale value (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq cmax (getdist "\nEnter maximum circle size: ")) (setq cmin (getdist "\nEnter minimum circle size: ")) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; center point (setq cpt (list ptx pty)) ; convert grayscale to percent (setq gsprct (/ gscolor 255.0)) ; radius (setq rad (+ cmin (* (- cmax cmin) gsprct))) ; circle (command ".CIRCLE" cpt rad) ) ) (close fh1) (command ".ZOOM" "e") ; fill the circles (command ".FILL" "on") (command ".HATCH" "solid" "all" "") (princ) ) ; --------------------------------------------------------------------------- (defun prog02b () ; 2D circle at each point ; diameter based grayscale value (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq cmax (getdist "\nEnter maximum circle size: ")) (setq cmin (getdist "\nEnter minimum circle size: ")) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; center point (setq cpt (list ptx pty)) ; convert grayscale to percent (setq gsprct (/ gscolor 255.0)) ; radius (setq rad (+ cmin (* (- cmax cmin) gsprct))) ; square (command ".POLYGON" "4" cpt "c" rad) ) ) (close fh1) (command ".ZOOM" "e") ; fill the circles (command ".FILL" "on") (command ".HATCH" "solid" "all" "") (princ) ) ; --------------------------------------------------------------------------- (defun prog02c () ; 2D circle at each point ; diameter based grayscale value (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq cmax (getdist "\nEnter maximum circle size: ")) (setq cmin (getdist "\nEnter minimum circle size: ")) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; center point (setq cpt (list ptx pty)) ; convert grayscale to percent (setq gsprct (/ gscolor 255.0)) ; radius (setq rad (+ cmin (* (- cmax cmin) gsprct))) ; square (command ".POLYGON" "4" cpt "I" rad) (command ".ZOOM" "e") (command ".ROTATE" "last" "" cpt "45") ) ) (close fh1) (command ".ZOOM" "e") ; fill the circles (command ".FILL" "on") (command ".HATCH" "solid" "all" "") (princ) ) ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- (defun prog02d () ; 2D circle at each point ; diameter based grayscale value (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq cradlist (read (getstring "\nEnter radius list: "))) ; levels (setq nlevels (length cradlist)) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; center point (setq cpt (list ptx pty)) ; convert to level (setq gslevel (fix (/ gscolor (/ 256.0 nlevels)))) ; radius (setq rad (nth gslevel cradlist)) ; circle (command ".CIRCLE" cpt rad) ) ) (close fh1) (command ".ZOOM" "e") (princ) ) ; --------------------------------------------------------------------------- (defun prog03 () ; 3D square at each point ; diameter based grayscale value (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq zmax (read (getstring "\nEnter Z maximum: "))) (setq zmin (read (getstring "\nEnter Z minimum: "))) ; levels (setq nlevels (length cradlist)) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; center point (setq cpt (list ptx pty)) ; convert inverted grayscale to percent (setq gsprct (/ (- 255 gscolor) 255.0)) ; height (setq zheight (+ zmin (* (- zmax zmin) gsprct))) ; square (command ".POLYGON" "4" cpt "C" (/ mod 2.0)) (command ".ZOOM" "e") (command ".EXTRUDE" "last" "" zheight) ; versions prior to 2007 require the taper parameter ;(command ".EXTRUDE" "last" "" zheight "") ) ) (close fh1) (command ".ZOOM" "e") (princ) ) ; --------------------------------------------------------------------------- (defun prog03a () ; 3D square at each point ; diameter based grayscale value (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq zheightlist (read (getstring "\nEnter height list: "))) ; levels (setq nlevels (length zheightlist)) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; center point (setq cpt (list ptx pty)) ; convert to level (setq gslevel (fix (/ (- 255 gscolor) (/ 256.0 nlevels)))) ; height (setq zheight (nth gslevel zheightlist)) (command ".POLYGON" "4" cpt "C" (/ mod 2.0)) (command ".ZOOM" "e") (command ".EXTRUDE" "last" "" zheight) ; versions prior to 2007 require the taper parameter ;(command ".EXTRUDE" "last" "" zheight "") ) ) (close fh1) (command ".ZOOM" "e") (command ".BREP" "all" "") (command ".UNION" "all" "") (princ) ) ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- (defun prog04 () ; 3D mesh ; height based grayscale value (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq zmax (getdist "\nEnter maximum height: ")) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) ; start mesh (command ".3DMESH" hmax wmax) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; center point (setq cpt (list ptx pty)) ; convert inverted grayscale to percent (setq gsprct (/ (- 255 gscolor) 255.0)) ; height (setq zheight (* zmax gsprct)) ; mesh point (setq cpt (list ptx pty zheight)) (command cpt) ) ) (close fh1) (command ".ZOOM" "e") (princ) ) ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- (defun prog04a () (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq zmax (getdist "\nEnter maximum height: ")) (setq zmin (getdist "\nEnter minimum height: ")) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) ; start mesh (command ".3DMESH" (+ hmax 2) (+ wmax 3)) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; center point (setq cpt (list ptx pty)) ; convert inverted grayscale to percent (setq gsprct (/ (- 255 gscolor) 255.0)) ; height (setq zheight (+ zmin (* zmax gsprct))) ; mesh point (setq cpt (list ptx pty zheight)) ; check for first edge (if (and (= xpt 0) (= ypt 0)) (progn (setq iw 0) (command (list (* iw mod) (* ypt mod) 0)) (repeat wmax (command (list (* iw mod) (* ypt mod) 0)) (setq iw (+ iw 1)) ) (command (list (* (- wmax 1) mod) (* ypt mod) 0)) (command (list (* 0 mod) (* ypt mod) 0)) )) ; save first pt (if (= xpt 0) (progn (setq fpt (list ptx pty 0)) (command fpt) )) (command cpt) ; add first pt (if (= xpt (- wmax 1)) (progn (command (list ptx pty 0)) (command fpt) )) ; check for last edge (if (and (= ypt (- hmax 1)) (= xpt (- wmax 1))) (progn (setq iw 0) (command (list (* iw mod) (* ypt mod) 0)) (repeat wmax (command (list (* iw mod) (* ypt mod) 0)) (setq iw (+ iw 1)) ) (command (list (* (- wmax 1) mod) (* ypt mod) 0)) (command (list (* 0 mod) (* ypt mod) 0)) )) ) ) (setq fh1 (close fh1)) (command ".ZOOM" "e") (princ) ) ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- (defun prog05 () (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq rmax (getdist "\nEnter maximum radius: ")) (setq rmin (getdist "\nEnter minimum radius: ")) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) ; angle inc (setq anginc (/ 360.0 wmax)) ; start mesh (command ".3DMESH" (+ hmax 2) (+ wmax 1)) ; bottom (repeat (+ wmax 1) (command (list 0 0 0)) ) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; convert inverted grayscale to percent (setq gsprct (/ (- 255 gscolor) 255.0)) ; radius (setq rad (+ rmin (* rmax gsprct))) ; radius is hours plus temperature (setq rxpt (* rad (cos (dtr (* anginc xpt))))) (setq rypt (* rad (sin (dtr (* anginc xpt))))) ; height (setq rzpt pty) (setq cpt (list rxpt rypt rzpt)) ; save first pt (if (= xpt 0) (setq fpt cpt)) (command cpt) ; add first pt (if (= xpt (- wmax 1)) (command fpt)) ) ) ; bottom (repeat (+ wmax 1) (command (list 0 0 rzpt)) ) (setq fh1 (close fh1)) (command ".ZOOM" "e") (princ) ) ; --------------------------------------------------------------------------- ; --------------------------------------------------------------------------- (defun prog06 () (setvar "CMDECHO" 0) (command ".ERASE" "all" "") (setq fname (getstring "\nEnter PTS filename: ")) (setq fh1 (open fname "r")) (setq mod (getdist "\nEnter module size: ")) (setq rmax (getdist "\nEnter maximum radius: ")) (setq rmin (getdist "\nEnter minimum radius: ")) ; header record (setq dataline (read-line fh1)) (setq wmax (atoi (substr dataline 1 3))) (setq hmax (atoi (substr dataline 4 3))) (setq ncolors (atoi (substr dataline 7 3))) ; angle inc (setq wanginc (/ 360.0 wmax)) (setq hanginc (/ 180.0 hmax)) ; start mesh (command ".3DMESH" (+ hmax 2) (+ wmax 1)) ; top (repeat (+ wmax 1) (command (list 0 0 rmax)) ) (repeat hmax (repeat wmax ; get pts record (setq dataline (read-line fh1)) ; X and Y location (setq xpt (atoi (substr dataline 1 3))) (setq ypt (atoi (substr dataline 4 3))) ; RGB and grayscale values (setq rcolor (atoi (substr dataline 7 3))) (setq gcolor (atoi (substr dataline 10 3))) (setq bcolor (atoi (substr dataline 13 3))) (setq gscolor (atoi (substr dataline 16 3))) ; xy coords (setq ptx (* xpt mod)) (setq pty (* ypt mod)) ; convert inverted grayscale to percent (setq gsprct (/ (- 255 gscolor) 255.0)) ; radius (setq rad (+ rmin (* rmax gsprct))) ; radius is hours plus temperature (setq rxpt (* (* rad (cos (dtr (* wanginc xpt)))) (sin (dtr (* hanginc ypt))))) (setq rypt (* (* rad (sin (dtr (* wanginc xpt)))) (sin (dtr (* hanginc ypt))))) (setq rzpt (* rad (cos (dtr (* hanginc ypt))))) (setq cpt (list rxpt rypt rzpt)) ; save first pt (if (= xpt 0) (setq fpt cpt)) (command cpt) ; add first pt (if (= xpt (- wmax 1)) (command fpt)) ) ) ; bottom (repeat (+ wmax 1) (command (list 0 0 (* rmax -1))) ) (setq fh1 (close fh1)) (command ".ZOOM" "e") (princ) ) ; --------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ;----------------------------------------------------------------------------