logo

Portal de Delineación
FormaCAD
2005-2015 10 años uniendo delineantes

Rutina para calculo y dibujo de escaleras

dudas y consultas sobre AutoCad

Moderador: Moderadores

Rutina para calculo y dibujo de escaleras

Notapor elhombredelsaco » Vie May 02, 2008 7:23 pm

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:
[code]
;;;
;;; _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é.
Avatar de Usuario
elhombredelsaco
Auxiliar
 
Mensajes: 62
Registrado: Vie Abr 11, 2008 7:45 pm
Ubicación: Granada

Notapor elhombredelsaco » Vie May 02, 2008 7:25 pm

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

Notapor elhombredelsaco » Vie May 02, 2008 7:33 pm

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é.
Avatar de Usuario
elhombredelsaco
Auxiliar
 
Mensajes: 62
Registrado: Vie Abr 11, 2008 7:45 pm
Ubicación: Granada

Notapor Afga » Lun May 05, 2008 10:09 am

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

Un saludo.
Avatar de Usuario
Afga
Moderador
Moderador
 
Mensajes: 886
Registrado: Lun Sep 04, 2006 4:10 pm

Notapor suficiente » Lun May 05, 2008 1:02 pm

Muy bueno, yo tenia una de escaleras pero esta esta mas conseguida :lol:
El Saber no Ocupa Lugar.
Avatar de Usuario
suficiente
Técnico
 
Mensajes: 115
Registrado: Vie Feb 22, 2008 12:19 am
Ubicación: Toledo

Notapor Rompeteclas » Mié May 07, 2008 12:45 pm

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
Rompeteclas
Auxiliar
 
Mensajes: 64
Registrado: Mar Oct 09, 2007 4:05 pm
Ubicación: Madrid

Notapor elhombredelsaco » Mié May 07, 2008 4:36 pm

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
elhombredelsaco
Auxiliar
 
Mensajes: 62
Registrado: Vie Abr 11, 2008 7:45 pm
Ubicación: Granada

Re: Rutina para calculo y dibujo de escaleras

Notapor Faber » Sab Dic 12, 2015 11:51 am

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
Avatar de Usuario
Faber
Administrador
Administrador
 
Mensajes: 2778
Registrado: Mié Nov 09, 2005 1:10 am
Ubicación: Argelia


Volver a AutoCad

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado