Rutina para calculo y dibujo de escaleras

Dudas y consultas sobre CAD. AutoCAD, Microstation y resto de aplicaciones CAD

Moderador: Moderadores

Responder
Avatar de Usuario
elhombredelsaco
Auxiliar
Mensajes: 62
Registrado: Vie Abr 11, 2008 7:45 pm
Ubicación: Granada
Contactar:

Rutina para calculo y dibujo de escaleras

Mensaje por elhombredelsaco »

Hola de nuevo a todos.
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é.

Plannerly ™ La plataforma de gestión BIM ™ SmartLeanBIM® © 2021
Plantillas para crear el Plan de Ejecución BIM (BEP). Cumplimiento de la norma ISO-19650
Plan gratuito en el que puedes acceder a todas las plantillas y si al comprarlo introduces el código DELINEACION obtendrás un 10% de descuento
Avatar de Usuario
elhombredelsaco
Auxiliar
Mensajes: 62
Registrado: Vie Abr 11, 2008 7:45 pm
Ubicación: Granada
Contactar:

Mensaje por elhombredelsaco »

Parece que la pagina no va muy bien del todo, aquí lo intentaré de nuevo

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 contrahuella) huella) 0.62) 
         ) 
       (Alert 
         (strcat 
      "                       ¡Atención!" 
      "\n" 
      "El modulo ascensorial resultante: " 
      (rtos (* 100 (+ (* 2 contrahuella) huella)) 2 2) 
      "cm\n" 
      "se encuentra fuera de los valores límite\n" 
      "                       (62-65cm)" 
         ) 
       ) 
     ) 
  (setq   accion 
    (dos_msgboxex 
      (strcat "OPCIONES DE GENERACION\n\n" 
         "El modulo ascensorial de la escalera ha sido fijado en: " 
         (rtos (* 100 (+ (* 2 contrahuella) huella)) 2 2) 
         "cm\n" 
         "El numero de peldaños será:         " 
         (rtos peldaños 2 0) 
         "\n" 
         "La longitud de la huella será:        " 
         (vl-princ-to-string (* 100 huella)) 
         "cm                         (27-32cm)\n" 
         "La altura de la contrahuella será:  " 
         (rtos (* 100 contrahuella) 2 3) 
         "cm                    (15-18,5cm)\n" 
         "El avance de la escalera será:      " 
         (rtos (* (1- peldaños) huella) 2 3) 
         "m" 
      ) 
      "Esclaleras" 
      (list "Aceptar" "+1 peldaño" "Resetear" "Fijar Huella") 
    ) 
  ) 
  (cond ((= accion 1) 
     (if (= +1peldaño t) 
       (alert "Ya se ha añadido un peldaño") 
       (setq +1peldaño t) 
     ) 
   ) 
        ((= accion 2) (setq accion nil fijar nil +1peldaño nil)) 
   ((= accion 3) 
     (setq   accion (if (= +1peldaño t) 
          1 
          nil 
             ) 
      fijar  t 
      huella (/ (dos_getreal 
          "Forzar huella" 
          "Indique una longitud entre 27 y 32cm" 
          1 
          30 
          32 
          27 
         ) 100 ) 
     ) 
   ) 
  ) 
) 
(setq P1 arranque) 
; dibujo 
(setvar "osmode" 0) 
(repeat peldaños 
  (setq P2 (polar P1 (/ PI 2) contrahuella)) 
  (command "_Line" P1 P2 "") 
  (setq P1 P2) 
  (if (= sentido 1) 
         (setq P2 (polar P1 pi huella)) 
         (setq P2 (polar P1 0 huella))) 
  (command "_Line" P1 P2 "") 
  (setq P1 P2) 
  (setq peldaños (1- peldaños))) 
(setvar "osmode" refen) 
(command "_.undo" "_end") 
) 

;;---------------------------  RoundToNearest ----------------------------------- 
;; Redondear Numero a Numero mas cercano; por José Luis García                    
;;------------------------------------------------------------------------------- 
(defun RoundToNearest (dblVal dblNear / dblTemp RetVal) 
 (if (not (zerop dblNear)) 
  (progn 
   (setq dblNear (* dblNear 100)) 
   (setq dblTemp (fix (/ (+ (* dblVal (expt 10 2)) (/ dblNear  2)) dblNear))) 
   (setq RetVal  (/ (* dblTemp dblNear) (expt 10 2))) 
  ) 
  (setq Retval 0) 
 ) 
 RetVal    
)
Avatar de Usuario
elhombredelsaco
Auxiliar
Mensajes: 62
Registrado: Vie Abr 11, 2008 7:45 pm
Ubicación: Granada
Contactar:

Mensaje por elhombredelsaco »

Antes de que los que no tienen conocimientos de autolisp levanten la liebre
diré que para poder usarla teneis que tener cargadas las librerias de funciones DosLib,
las cuales os podeis bajar de la siguiente URL;
http://download.mcneel.com/download.asp?id=doslib
Son totalmente gratuitas, y una vez descargadas, colocais los archivos de extensión .ARX en la carpeta Support
(C:\Documents and Settings\XXXXX\Datos de programa\Autodesk\AutoCAD 2008\R17.1\esp\Support)
Para finalizar teneis que cargar las ARX mediante
Menú "Herr." -> "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 -> OSLib17.arx)
Reiniciais autocad, cargais _ESCALERA.lsp y a funcionar.

Por otra parte quiero agradecer a José Luis García el cuelgue de su función RoundToNearest, en HISPACAD 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é.
Afga
Jefe
Mensajes: 886
Registrado: Lun Sep 04, 2006 4:10 pm
Contactar:

Mensaje por Afga »

Muy buena el hombredelsaco. Gran aporte. Seguro que a más de uno le vendrá muy bien.

Un saludo.
Avatar de Usuario
suficiente
Técnico
Mensajes: 115
Registrado: Jue Feb 21, 2008 11:19 pm
Ubicación: Toledo
Contactar:

Mensaje por suficiente »

Muy bueno, yo tenia una de escaleras pero esta esta mas conseguida :lol:
El Saber no Ocupa Lugar.
Avatar de Usuario
Rompeteclas
Auxiliar
Mensajes: 64
Registrado: Mar Oct 09, 2007 4:05 pm
Ubicación: Madrid
Contactar:

Mensaje por Rompeteclas »

Muchas gracias por tu aportación elhombredelsaco, lo he probado y es muy bueno, solo añadiría una cosa, si en vez de lineas fueran polilineas sería la caña.
Salud2
El dibujo es idioma universal...
Avatar de Usuario
elhombredelsaco
Auxiliar
Mensajes: 62
Registrado: Vie Abr 11, 2008 7:45 pm
Ubicación: Granada
Contactar:

Mensaje por elhombredelsaco »

Bueno, en principio la rutina no está terminada. Si algún dia puedo retomarla, me gustaria hacer que se le pudiera indicar si el usuario quiere escaleras de una ida, o de ida y vuelta con descansillo. entonces seria el momento de sopesar si línea o polilínea, pero insisto, eso será en otro momento. (llamesele puente sin plan por ejemplo).
Un saludo a todos.
Avatar de Usuario
Faber
Administrador
Administrador
Mensajes: 3067
Registrado: Mié Nov 09, 2005 12:10 am
Ubicación: Irlanda
Contactar:

Re: Rutina para calculo y dibujo de escaleras

Mensaje por Faber »

Hola elhombredelsaco, gracias por tu aplicación.

Ya sé que este post es antiguo pero si alguien me puede ayudar se lo agradezco. Quería probar la aplicación, la cargo, pero al intentar ejecutarla escribiendo _escalera se me inicia el comando de arkitool del mismo nombre ¿cómo puedo cambiarlo?
si algo puede salir bien, saldrá bien
Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 60 invitados