home *** CD-ROM | disk | FTP | other *** search
- ;;; STLSUP.lsp
- ;;; ¬⌐┼v (C) 1992 Autodesk ñ╜Ñq
- ;;;
- ;;; Ñ╗│n┼ΘºK╢O¿╤▒z╢iªµÑ⌠ª≤Ñ╬│~╗▌¿D¬║½■¿⌐íB¡╫º∩ñ╬╡oªµ, ª²¼O░╚╜╨┐φ┤`ñU¡z
- ;;; ¡∞½h :
- ;;;
- ;;; 1) ñWªC¬║¬⌐┼v│qºi░╚╗▌ÑX▓{ªb¿Cñ@Ñ≈½■¿⌐∙╪íC
- ;;; 2) ¼█├÷¬║╗í⌐·ñσÑ≤ñ]Ñ▓╢╖⌐·╕ⁿ¬⌐┼v│qºiñ╬Ñ╗╢╡│\Ñi│qºiíC
- ;;;
- ;;; Ñ╗│n┼Θ╢╚┤ú¿╤º@¼░└│Ñ╬ñW¬║░╤ª╥, ª╙Ñ╝┴n⌐·⌐╬┴⌠ºtÑ⌠ª≤½O├╥; ╣∩⌐≤Ñ⌠ª≤»S«φ
- ;;; Ñ╬│~ñº╛A║┘⌐╩, ÑHñ╬░╙╖~╛P░Γ⌐╥┴⌠ºtÑX¿π¬║½O├╥, ªbª╣ñ@╖ºñ⌐ÑHº_╗{íC
- ;;;
- ;;;
- ;;; By Rick Barrientos
- ;;; Thanks to Duff Kurland and Simon Jones who may recognize part of 3D.lsp
- ;;; in this program.
- ;;; Version 0.3 2 January 1992
- ;;;
- ;;;----------------------------------------------------------------------------;
- ;;;
- ;;; DESCRIPTION
- ;;;
- ;;; STLSUP.LSP is a sample AME 2.0 lisp routine.
- ;;;
- ;;; It allows automatic creation of common Stereo Lithography support
- ;;; structures. AME 2.0 supports STL output. This program is intended
- ;;; to be used in conjunction with this feature.
- ;;;
- ;;; The program is loaded and called by typing "stlsup". The user is
- ;;; then prompted to select a star or eggcrate type support structure.
- ;;;
- ;;; To create a star shaped support structure, the user must input a
- ;;; base center point, a diameter or radius, and a height for
- ;;; the overall structure. A cylinder will temporarily be drawn
- ;;; indicating the overall dimensions of the structure. The user must
- ;;; now input the number of segments to create and the wall thickness
- ;;; for the web. The structure is then generated.
- ;;;
- ;;; To create an eggcrate shaped support structure, the user must
- ;;; input a corner, a length along the X axis, a width along the
- ;;; Y axis, and a height along the Z axis.There is an option to
- ;;; draw a cube and only input one distance. A box will temporarily
- ;;; be drawn indicating the overall dimensions of the structure. The
- ;;; user must now input the spacing and wall thickness for the web.
- ;;; The structure is then generated.
-
- ;Draw a star shaped stl support structure
- (defun star (/ numseg elev cen cen1 rad ang p1 p2 p3 h webt)
- (setq numseg 0)
- (initget 17) ;3D point can't be null
- (setq elev (caddr (setq cen (getpoint "\níu¼P¬¼ñΣ⌐╙ívñññ▀┬I: "))))
- (initget 7 "Diameter") ;Base radius can't be 0, neg, or null
- (setq rad (getdist cen "\níu¼P¬¼ñΣ⌐╙ívD¬╜«|/<Ñb«|> : "))
- (if (= rad "Diameter")
- (progn
- (initget 7) ;Base diameter can't be 0, neg, or null
- (setq rad (/ (getdist cen "\níu¼P¬¼ñΣ⌐╙ív¬╜«|: ") 2.0))
- )
- )
-
- (setq ang 0)
- (setq p1 (polar cen ang rad))
- (repeat 16
- (setq ang (+ ang (/ (* 2 pi) 16)))
- (setq p2 (polar cen ang rad))
- (grdraw p1 p2 2)
- (setq p1 p2)
- )
-
-
-
- (initget 7 "Height") ;Height can't be 0, neg, or null
- (setq h (getdist cen "\nH░¬½╫: "))
- (setq cen1 (list (car cen) (cadr cen) (+ (caddr cen) h)))
- (setq ang 0)
- (setq p1 (polar cen1 ang rad))
- (repeat 16
- (setq ang (+ ang (/ (* 2 pi) 16)))
- (setq p2 (polar cen1 ang rad))
- (setq p3 (list (car p1) (cadr p1) (- (caddr p1) h)))
- (grdraw p1 p3 2)
- (grdraw p1 p2 2)
- (setq p1 p2)
- )
-
-
-
- (while (< numseg 2) ;number of segs in radial array
- (initget 6)
- (setq numseg (getint "\n║c¡▒╝╞╢q <8>: "))
- (if (null numseg)
- (setq numseg 8)
- )
- (if (< numseg 2)
- (princ "\níu║c¡▒╝╞╢qívÑ▓╢╖ > 1 íC")
- )
- )
-
- (initget 6)
- (setq webt (getreal "\n║c¬O½p½╫ <0.020>: "))
- (if (= webt nil) (setq webt 0.020))
-
- (setq a (list (car cen) (- (cadr cen) (/ webt 2)) (caddr cen)))
- (setq ss (ssadd))
- (ssadd (SOLBOX a "l" rad webt h) ss)
- (setq x (entlast))
- (command "_.array" "_l" "" "_p" cen numseg "360" "")
- (repeat numseg
- (ssadd x ss)
- (setq x (entnext x))
-
- )
- (SOLUNION ss)
- (redraw)
- (princ)
-
- )
-
- ;Draw a eggcrate style stl support structure
- (defun eggcrate (/ pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 l w h1 h2
- webs webt num mod p)
- (initget 17) ;3D point can't be null
- (setq pt1 (getpoint "\níu│J¼[ñΣ⌐╙ív¿ñ┬I: "))
- (setvar "ORTHOMODE" 1)
- (initget 7) ;Length can't be 0, neg, or null
- (setq l (getdist pt1 "\n(¬u X ╢bªV╢Z┬≈) ¬°½╫: "))
- (setq pt3 (list (+ (car pt1) l) (cadr pt1) (caddr pt1)))
- (grdraw pt1 pt3 2)
-
- (initget 7 "Cube") ;Width can't be 0, neg, or null
- (setq w (getdist pt1 "\nCÑ┐Ñ▀ñΦñΣ⌐╙/(¬u Y ╢bªV╢Z┬≈) <╝e½╫>: "))
- (if (= w "Cube")
- (setq w l h1 l h2 l)
- )
-
- (setq pt2 (list (car pt1) (+ (cadr pt1) w) (caddr pt1)))
- (setq pt4 (list (car pt3) (+ (cadr pt3) w) (caddr pt3)))
- (grdraw pt3 pt4 2)
- (grdraw pt4 pt2 2)
- (grdraw pt2 pt1 2)
- (setvar "ORTHOMODE" 0)
-
- (if (/= h1 l)
- (progn
- (initget 7) ;Height can't be 0, neg, or null
- (setq h1 (getdist pt1 "\n(¬u Z ╢bªV╢Z┬≈) ░¬½╫: "))
- (setq h2 h1)))
-
- (setq pt5 (list (car pt3) (cadr pt3) (+ (caddr pt3) h2)))
- (setq pt6 (list (car pt4) (cadr pt4) (+ (caddr pt4) h2)))
- (setq pt7 (list (car pt1) (cadr pt1) (+ (caddr pt1) h1)))
- (setq pt8 (list (car pt2) (cadr pt2) (+ (caddr pt2) h1)))
-
- (grdraw pt5 pt3 2)
- (grdraw pt7 pt1 2)
- (grdraw pt8 pt2 2)
- (grdraw pt6 pt4 2)
- (grdraw pt5 pt7 2)
- (grdraw pt7 pt8 2)
- (grdraw pt8 pt6 2)
- (grdraw pt6 pt5 2)
-
- (initget 6)
- (setq webs (getreal "\n¬Oñ▀╢í╢Z <0.375>: "))
- (if (= webs nil) (setq webs 0.375))
- (initget 6)
- (setq webt (getreal "\n║c¬O½p½╫ <0.020>: "))
- (if (= webt nil) (setq webt 0.020))
-
- (if (or (> (+ webs webt) l) (> (+ webs webt) l))
- (progn
- (princ "\n─╡ºi í╨íu║c¬O╢í╢Zív╗Píu½p½╫ív╢W╣L┴`ñ╪ñoíC")
- (princ "\n╡L¬k½╪Ñ▀ STL ╡▓║c; ╜╨ªA╕╒íC")
- )
- (progn
- (setq num (fix (/ l webs)))
- (setq mod (- l (+ webt (* webs (- num 1)))))
- (setq ss (ssadd))
- (ssadd (SOLBOX pt1 "l" webt w h1) ss)
- (setq x (entlast))
- (setq p (list (+ (car pt1) (/ mod 2)) (cadr pt1) (caddr pt1)))
- (command "_.move" "_l" "" pt1 p)
- (if (/= 1 num)
- (command "_.array" "_l" "" "_r" "" num webs)
- )
- (repeat num
- (ssadd x ss)
- (setq x (entnext x))
- )
- (setq num (fix (/ w webs)))
- (setq mod (- w (+ webt (* webs (- num 1)))))
- (ssadd (SOLBOX pt1 "l" l webt h1) ss)
- (setq x (entlast))
- (setq p (list (car pt1) (+ (cadr pt1) (/ mod 2)) (caddr pt1)))
- (command "_.move" "_l" "" pt1 p)
- (if (/= 1 num)
- (command "_.array" "_l" "" "_r" num "" webs)
- )
- (repeat num
- (ssadd x ss)
- (setq x (entnext x))
-
- )
-
- (SOLUNION ss)
- )
- )
- (redraw)
- (princ)
-
- )
- ;option function
- ;act is a global variable so function will remember last option
- (defun inpt(/ acte)
-
- (initget "Star Eggcrate")
- (if (= act "Star")
- (princ "\nE│J¼[ñΣ⌐╙/<S¼P¬¼ñΣ⌐╙>: "))
- (if (/= act "Star")
- (progn
- (setq act "Eggcrate")
- (princ "\nS¼P¬¼ñΣ⌐╙/<E│J¼[ñΣ⌐╙>: ")
- )
- )
- (setq acte (getkword))
- (if (= acte nil) (setq acte act))
- (setq act acte)
- (if (= act nil) (setq act "Eggcrate"))
- (if (= act "Star") (star))
- (if (= act "Eggcrate") (eggcrate))
- )
- ;error handler
- (defun *error* (msg)
- (princ "┐∙╗~: ")
- (princ msg)
- (redraw)
- (princ)
- )
- ;main function
- (defun c:stlsup( / quit)
- (setq quit 0)
- (setvar "cmdecho" 0)
- (if (not SOLBOX)
- (progn
- (princ "\n░⌡ªµª╣Ñ\»αñº½e, Ñ▓╢╖Ѳ╕ⁿñJ AME 2.0 ╢∞½¼╡{ªííC")
- (setq quit 1))
- )
- (if (/= quit 1) (inpt))
- (setvar "cmdecho" 1)
- (setq ss nil)
- (princ)
- )
-