cg-Cad

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