Documente Academic
Documente Profesional
Documente Cultură
;Esta es una coleccion de rutinas en AutoLisp para Autocad, especialmente utiles para
mediciones (suma de propiedades de numerosos elementos de Autocad).
;No son de mi creacion, sino que las he recopilado y reunido en un solo *.lsp, aunque algunas
se han traducido, otras modificado y otras readaptado.
;Espero os sean de utilidad.
;*COMANDO: sumcam
;Suma distancias consecutivamente entre puntos que se pediran en pantalla
;*COMANDO: sumcnc
;Suma distancias no necesariamente entre puntos consecutivos, los cuales se pediran en
pantalla
;*COMANDO: sumarco
;Suma las longitudes de un numero indeterminado de arcos que se pediran en pantalla
;*COMANDO: sumlinea
;Suma las longitudes de un numero indeterminado de lineas que se pediran en pantalla
;Para lineas con diferente cota en sus extremos se tomara la longitud real (3D Longitud), no la
proyectada.
;*COMANDO: sumlp
;Suma las longitudes de un numero indeterminado de lineas y/o polilineas que se pediran en
pantalla. Se expresa el resultado descompuesto segun lineas, polilineas y suma total de lineas
mas polilineas.
;*COMANDO: sumarea
;Suma las areas y perimetros/longitudes de un numero indeterminado de polilineas (no
necesariamente cerradas) que se pediran en pantalla
;*COMANDO: sumlcapa
;Suma las longitudes de todas las lineas de una capa cuya seleccion se hara mediante la
designacion de cualquier objeto (linea o no) que pertenezca a esa capa. La capa puede tener
otros objetos ademas de lineas, pero solo se sumara la longitud de estas.
;NOTA: Se ha intentado hacer lo mismo con las areas pero no ha habido manera :((((((
;INSTRUCCIONES: Para hacerlo funcionar (cargandose automaticamente cada vez que se inicie
Autocad) colocais el archivo mediciones.LSP en cualquier carpeta. Despues, dentro de
Autocad, os vais a 'Herramientas/Autolisp/Cargar', y en el menu que os salga os vais al
cuadradito 'Cargar al inicio' y pulsais en 'Contenido'. En el proximo menu le dais a 'Aadir' y os
sale una ventana de explorador desde la que seleccionareis el archivo alli donde lo tengais.
Una vez seleccionado, pulsais 'Aadir', 'Cerrar' y listo. Los comandos se han de escribir
directamente en la linea de comandos.
;Si solo quieres usar el lisp ocasionalmente, no tienes mas que seleccionarlo desde el
explorador de Windows y arrastrarlo y soltarlo sobre el dibujo en el que estes trabajando.
Haciendo esto se cargara solo y unicamente se ejecutara en ese dibujo en concreto.
;BUGS: Si encuentras fallos trabajando con el lisp puedes reportarlos al correo que se adjunta.
Los intentare corregir si me es posible. No escribas para ninguna otra cosa porque entonces no
se te hara ni puto caso.
(defun c:sumcam ()
(setvar "cmdecho" 0)
(graphscr)
(setq
; ---------------------------------------------------------------------;
;
; ----------------------------------------------------------------------
(defun c:sumarco ()
(setq tlen 0.0)
(setq sset (ssget '((0 . "ARC"))))
(setq num (sslength sset) itm 0)
(while (< itm num)
(setq hnd (ssname sset itm))
(setq ent (entget hnd))
(setq rads (cdr (assoc 40 ent)))
(setq sang (cdr (assoc 50 ent)))
; ---------------------------------------------------------------------;
;
; ----------------------------------------------------------------------
; Para lineas con diferente cota en sus extremos se tomara la longitud real (3D Longitud), no la
proyectada.
(defun C:sumlinea ()
(setq sset (ssget '((0 . "LINE"))))
(if sset
(progn
(setq tot 0.0)
(setq num (sslength sset) itm 0)
(while (< itm num)
(setq hnd (ssname sset itm))
(setq ent (entget hnd))
(setq pt1 (cdr (assoc 10 ent)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Written by Joshua M Orth. February 2000
; Modificado por InnerCity <itspanish@iespana.es> <http://www.iespana.es/itspanish/>
sum1 0.0
sum2 0.0
sum3 0.0
)
;check for null selection set
(if p
(progn
(setq l 0)
(repeat (sslength p)
(cond
((= "LINE" (cdr (assoc 0 (setq e (entget (ssname p l))))))
(setq sxy (cdr (assoc 10 e))
exy (cdr (assoc 11 e))
sum1 (+ sum1 (distance sxy exy))
)
(terpri)
)
((= "LWPOLYLINE" (cdr (assoc 0 (entget (setq e (ssname p l))))))
(command "_.area" "_E" e)
(setq sum2 (+ sum2 (getvar "perimeter")))
(terpri)
)
((= "POLYLINE" (cdr (assoc 0 (entget (setq e (ssname p l))))))
(command "_.area" "_E" e)
(setq sum2 (+ sum2 (getvar "perimeter")))
(terpri)
)
)
(setq l (1+ l))
)
(setq sum3 (+ sum1 sum2))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Suma el area y perimetro de distintas polilineas mediante seleccion directa
; Written by Joshua M Orth. February 2000
; Readaptado por InnerCity <itspanish@iespana.es> <http://www.iespana.es/itspanish/>
sum1 0.0
sum2 0.0
)
;check for null selection set
(if p
(progn
(setq l 0)
(repeat (sslength p)
(cond
((= "LWPOLYLINE" (cdr (assoc 0 (entget (setq e (ssname p l))))))
(command "_.area" "_E" e)
(setq sum1 (+ sum1 (getvar "area")))
(setq sum2 (+ sum2 (getvar "perimeter")))
(terpri)
)
((= "POLYLINE" (cdr (assoc 0 (entget (setq e (ssname p l))))))
(command "_.area" "_E" e)
(setq sum1 (+ sum1 (getvar "area")))
(setq sum2 (+ sum2 (getvar "perimeter")))
(terpri)
)
)
(setq l (1+ l))
)
(princ "\nLa suma total de perimetros/longitudes es: ")
(princ (rtos sum2))
(princ "\nLa suma total de areas es: ")
(princ (rtos sum1))
)
(princ "\nNo has seleccionado ninguna polilinea")
)
(princ)
)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; SUMLCAPA program, modified by Joshua M Orth. February 2000
; Modificado por InnerCity <itspanish@iespana.es> <http://www.iespana.es/itspanish/>
)
(princ (strcat "\nNo se han encontrado lineas en la capa: " l))
)
)
)
)
(sumln)
(princ (strcat "\nLongitud total de las lineas: " (rtos suml)))
(princ)
)