martes, 26 de noviembre de 2002

[ACAD] rutina para construir un resorte-Autor: gabriela -

Hola esta rutina la puso hace tiempo speed cad, bueno yo la guarde asi que ahora te la reenvio, espero te sirva

Aqui tienes la rutina para eso...

(defun datos_helisol ( / mens paso)
(initget 1)
(setq cen (getpoint "centro de la hélice: "))(terpri)
(if radin0 ( ) (setq radin0 0))
(setq mens (strcat "radio inicial <" (rtos radin0 2 2) ">: "))
(initget 4)
(if (setq radin (getdist cen mens)) ( ) (setq radin radin0)) (terpri)
(setq radin0 radin)
(if radfin0 ( ) (setq radfin0 0))
(setq mens (strcat "radio final <" (rtos radfin0 2 2) ">: "))
(initget 4)
(if (setq radfin (getdist cen mens)) ( ) (setq radfin radfin0)) (terpri)
(setq radfin0 radfin)
(if pv0 ( ) (setq pv0 16))
(setq mens (strcat "precisión de puntos en cada vuelta <" (itoa pv0) ">: "))
(initget 6)
(if (setq pv (getint mens)) ( ) (setq pv pv0)) (terpri)
(setq pv0 pv)
(if nv0 ( ) (setq nv0 1))
(setq mens (strcat "número de vueltas <" (itoa nv0) ">: "))
(initget 6)
(if (setq nv (getint mens)) ( ) (setq nv nv0)) (terpri)
(setq nv0 nv)
(initget 1 "paso altura")
(setq op (getkword "Seleccione opcion paso/altura de la hélice: ")) (terpri)
(if (= op "paso") (progn
(if paso0 ( ) (setq paso0 0))
(setq mens (strcat "paso de la hélice <" (rtos paso0 2 2) ">: "))
(if (setq paso (getdist cen mens)) ( ) (setq paso paso0))(terpri)
(setq paso0 paso)))
(if (= op "altura") (progn
(if alt0 ( ) (setq alt0 0))
(setq mens (strcat "altura total de la hélice <" (rtos alt0 2 2) ">: "))
(if (setq alt (getdist cen mens)) ( ) (setq alt alt0)) (terpri)
(setq alt0 alt paso (/ alt nv))))
(setq dang (/ (* 2 pi) pv))
(setq dz (/ paso pv))
(setq drad (/ (- radfin radin) (* pv nv )))
)

(defun helice ( / n z0 z xy pto ptant)
(setq p0 (polar cen 0 radin))
(setq z0 (caddr p0))
(command "_3dpoly" p0)
(setq n 1)(setq distot 0 ptant p0)
(repeat (* pv nv)
(setq z (+ z0 (* dz n)))
(setq xy (polar cen (* dang n) (+ radin (* drad n))))
(setq pto (list (car xy) (cadr xy) z))
(command pto)
(setq n (+ n 1))
(setq distot (+ distot (distance ptant pto)))
(setq ptant pto)
)
(command "")
)

(defun solido ( / radsec mens ptscp cencir)
(if radsec0 () (setq radsec0 1))
(setq mens (strcat "\nradio de la sección <" (rtos radsec0 2 2) ">: "))
(initget 6)
(if (setq radsec (getdist p0 mens)) ( ) (setq radsec radsec0))
(setq radsec0 radsec)
(setq ptscp (list (car cen) (cadr cen) 100))
(command "_ucs" "_3p" cen p0 ptscp)
(setq cencir (trans p0 0 1))
(command "_circle" cencir radsec)
(command "_ucs" "_w")
(setvar "pickbox" 1)
(command "_extrude" "_l" "" "_p" p0)
(prompt (strcat "\nlongitud total de la hélice " (rtos distot 2 2) "."))
)

(defun c:helisol ( / cen radin radfin nv pv dz drad distot p0)
(setvar "cmdecho" 0)
(setq error0 *error* *error* errores)
(setq refnt0 (getvar "osmode"))(setvar "osmode" 0)
(setq pick0 (getvar "pickbox"))(setvar "pickbox" 0)
(command "_undo" "_begin")
(datos_helisol)
(helice)
(solido)
(command "_undo" "_end")
(setvar "osmode" refnt0)(setvar "pickbox" pick0)(setvar "cmdecho" 1)(prin1)
)

(defun errores (mens)
(setq *error* error0)
(if (= mens "quitar / salir abandonar")
(prin1)
(princ (strcat "\nerror: " mens " "))
)
(command "_undo" "_end")
(setvar "cmdecho" 1)(setvar "osmode" refnt0)
(prin1)
)

(prompt "nuevo comando HELISOL definido by SpeedCAD...")(prin1)