Aqui os dejo la rutina en la que he estado trabajando los ultimos dias.
Se trata de una herramienta para trazar (y calcular) escaleras según la teoria de Rondelet.
La cuestión es que aparqué la construcción hace ya unos años, pero el otro dia me surgió la necesidad de trazar unas escaleras en alzado y
ninguna de las rutinas que encontré en la red realizaba el calculo (se limitaban a solicitar el numero de peldaños y la longitud de la huella).
De manera que con el gusano en el cuerpo me puse manos a la obra, y me ha salido esto:
Código: Seleccionar todo
;;;
;;; _ESCALERA.lsp
;;;
;;; Por PABLO_FERRER.
;;;---------------------------------------------------------------------------------------------------------------------------
;;; Permite el dibujo de escaleras según la teoría de Rondelet:
;;; (2ch + 1h = 62-65cm - aproximandose a 63cm)
;;; las huellas han de tener más de 27cm
;;; las contrahuellas han de encontrarse entre 15 y 18cm, no pudiendo superarse los 18,5cm
;;; La herramienta ha sido modificada para que la entrada de las unidades sea en centimetros
;;; Queda pendiente de mejora:
;;; --
;;;---------------------------------------------------------------------------------------------------------------------------
;;;
;;; Fecha de creación: 28-04-08
;;; Ultima modificación: 02-05-08
;;; V. 0.3
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:escalera (/ refen arranque altura sentido accion fijar peldaños contrahuella +1peldaño huella P1 P2)
(command "_.undo" "_begin")
(setq refen (getvar "osmode"))
;Entrada de datos
(setq arranque (getpoint "Idique punto de arranque de la escalera: "))
(terpri)
(Initget "Altura")
(setq
altura (if (= (setq altura (getpoint
"Indique altura de desambarco de la escalera o [Altura]: "
)
)
"Altura"
)
(getreal "Indique la altura: ")
altura
)
)
(if (= (listp altura) t)
(setq altura (- (nth 1 altura) (nth 1 arranque)))
)
(terpri)
(initget "Izquierda Derecha")
(setq
sentido (progn
(setq
sentido
(getkword
"Indique el sentido de la escalera Izquierda ó Derecha <Derecha>:"
)
)
(cond
((= sentido "Izquierda") 1)
((= sentido "Derecha") 2)
((= sentido nil) 2)
)
)
)
; calculos
(setq accion nil fijar nil +1peldaño nil)
(while (/= accion 0)
(setq peldaños (if (= accion 1)
(1+ (1+ (fix (/ altura 0.18))))
(1+ (fix (/ altura 0.18)))
)
)
(setq contrahuella (/ altura peldaños))
(setq huella (if (= fijar t)
huella
(RoundToNearest (- 0.63 (* 2 contrahuella)) 0.005)
)
)
(if (or (> (+ (* 2 contrahuella) huella) 0.65)
(<2> "AutoLISP" -> "Cargar aplicación..." -> "Contenido..." -> "Añadir" ,
y buscais la aplicacion ARX de DosLIB que corresponda a vuestra versión de autocad y
sistema de procesador (en mi caso y para la 08 y 32 bits DOSLib17.arx)
Por otra parte quiero agradecer a José Luis García el cuelgue de su función RoundToNearest,
sin la cual en esta rutina las huellas no quedarian tan "limpias".
Un saludo a todos, y espero que os sirva y le deis un uso más intensivo del que yo le daré.