Lisp »Tips 'n Tricks
»Scale in 3d
Autore: Michele Ingenuo - Sito Web: 3eye
;---CREA UNA SCALA IN 3D ---
(defun C:SCALA ()
;(setvar "CMDECHO" 0)
(setvar "osmode" 3)
(command "_ucs" "t" "a" "")
(setq px2 nil)
(setq px3 nil)
(setq DTR (/ PI 180)) ;fattore di moltiplicazione x gradi
;verso radianti pi è Pi greco!
(setq DESTRA (* 0 DTR)) ;traduzione del comando polar
(setq SINISTRA (* 180 DTR)) ;traduzione del comando polar
(setq SU (* 90 DTR)) ;traduzione del comando polar
(setq GIU (* 270 DTR)) ;traduzione del comando polar
(setq DIAG (* 45 DTR)) ;traduzione del comando polar x 45 gradi
(command "_ucs" "t" "a" "")
(setq alz (getdist "\nAlzata m : ") ;richiesta parametri utente
ped (getdist "\nPedata m : ")
ng (getdist "\nNumero di gradini : ")
LARG (getdist "\nLargezza ? :")
px (getpoint "\nPunto iniziale RAMPA : ")
px1 (list px)
spess (* ng ped)
px1b px
) ;setq calcoli
(setvar "osmode" 0)
(setq cont 1 ; contatore
a (polar px SU alz) ; alzata
p (polar a DESTRA ped) ; pedata
) ;setq calcoli
(command "_pline" px "_W" "0" "" a p "") ;primo gradino e spessore della linea
(setq e1 (entlast))
(WHILE (/= cont ng)
(setq a (polar p SU alz) ;imposta gradino successivo
; (setq a (polar p 1.57079 alz);imposta gradino successivo
px p
p (polar a 0.00000 ped);
);
(command "_pline" px a p "") ;edita la polilinea
(setq e2 (entlast))
(setq cont (+ 1 cont)) ;incremento contatore
(command "_pedit" e2 "_j" e1 e2 "" "")
(setq e1 (entlast))
);fine ciclo
(setq long(* ng ped)) ;ok
(setq cpx1 (car px1))
(setq xpx1 (car cpx1)) ;coordinata X
(setq ypx1 (cadr cpx1)) ;coordinata Y
(setq zpx1 (caddr cpx1)) ;coordinata Z
(setq xpx2 (+ long xpx1))
;;;;;;;;;;;;;;(setq px2 (list xpx2 ypx1 zpx1)) ;;;;;;;;;;;;;;;;;;;;;;;
(setq px2 (polar px1b DESTRA (* ng ped))) ;;;;;;;;;;;;;;;;;;;;;;
(setq px3 (polar px2 SU (* ng alz))) ;;;;;;;;;;;;;;;;;;;;;;
(setq ypx3(+ ypx1 long))
(command "_pline" px1b px2 px3 "") ;chiude il profilo
(setq e4 (entlast))
(command "_pedit" e1 "_j" e1 e4 "" "") ;unisce tutto in un unica pline
(setq e5 (entlast))
(command "_extrude" e5 "" LARG "" "") ;estrude la pline
(setq e6 (entlast)) ;scala estrusa
(command "_ucs" "t" "h" "")
(command "_move" e6 "" px1b (polar px1b SU (/ LARG 2)))
(command "_move" e6 "" px1b (polar px1b SINISTRA spess))
;(command "_ucs" "t" "a" "")
;(command "_rotate" e6 "" pxb1 DESTRA "")
;(command "_ucs" "t" "h" "")
(setvar "osmode" 3 )
) ;defun
|
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 22 Settembre 2005
|