Hola... a ver si me podeis echar un cable.
Estoy comprobando unas mediciones y tengo que consultar la longitud y el número de unidades que viene en los planos y compararlo con lo que está en el presupuesto.
Hasta aquí bien.... el problema lo tengo cuando se trata de ver la longitud de 140 tramos distintos de tuberías, por ejemplo.
Al darle la opción list me da la longitud (entre otras cosas) pero como salen muchas propiedades no me entran en un sola pantalla (ni en dos ni en tres...).
¿Sabeis si hay alguna forma de aumentar el número de "pantallas" que guarda en la memoria de la ventana de texto? Asi podría copiar/pegar el texto en un fichero TXT y es más fácil de contar...
Si ya hubiese forma de que directamente lo sacara a un fichero de texto sería perfecto...
Nº de líneas en ventana de texto.
Moderador: Moderadores
Nº de líneas en ventana de texto.
Os estoy viendo...
Abel a falta de poder darte una respuesta en cuanto al número de pantallas que se puedan guardar en memoria, te muestra una seríe de aplicaciones Lisp que encontré por internet hace ya un tiempo especialmente hecho para los tipos de mediciones que tienes que realizar, y que creo que te servirán.
La lista de los comandos, así como la función que realiza cada uno son las descritas a continuación;
;:::::::::::::::::::: RECOPILACION DE LISP's PARA MEDICIONES (2/03/2004):::::::::::::::::::::::::::::
;********************************* CAMINO CONSECUTIVO **********************************
;Modificado por InnerCity <itspanish> <http>
(defun c:sumcam ()
(setvar "cmdecho" 0)
(graphscr)
(setq
p1 (getpoint "\nSelecciona el primer punto: ")
p2 (getpoint p1 "\nSelecciona el siguiente punto: ")
d1 (distance p1 p2)
prdist (strcat "\nDistancia inicial: " (rtos d1))
)
(princ prdist)
(setq p3 (getpoint p2 "\nSelecciona el siguiente punto o ENTER para acabar"))
(while p3
(setq
d0 (distance p2 p3)
d1 (+ (distance p2 p3) d1)
p2 p3
prdist (strcat "\nDistancia parcial: " (rtos d0) ", Distancia acumulada: " (rtos d1))
)
(princ prdist)
(setq p3 (getpoint p2 "\nSelecciona el siguiente punto o ENTER para acabar: "))
)
(setq cumd (strcat "Distancia total: " (rtos d1)))
(prompt cumd)
(princ)
)
;********************************* CAMINO NO CONSECUTIVO ********************************
;Running distance calculator
;Modificado por InnerCity <itspanish> <http>
(defun c:sumcnc (/ pt1 pt2 d0 d1 )
(graphscr)
(setvar "CMDECHO" 0)
(setq pt1 (getpoint " Selecciona el primer punto: "))(terpri)
(setq pt2 (getpoint " Selecciona el siguiente punto: " pt1))(terpri)
(setq d1 (distance pt1 pt2))
(prompt " Distancia inicial: ")(prompt (rtos d1 2 4))
(while
(setq pt1 (getpoint "\nSelecciona el siguiente primer punto o ENTER para acabar: " )) (terpri)
(setq pt2 (getpoint " Selecciona el siguiente punto: " pt1 )) (terpri)
(setq d0 (distance pt1 pt2))
(setq d1 (+ (distance pt1 pt2) d1))
(prompt "Distancia parcial: ")(prompt (rtos d0 2 4))(prompt " Distancia acumulada: ")(prompt (rtos d1 2 4))
)
(prompt "Distancia total: ")(prompt (rtos d1 2 4))
(princ)
)
; ----------------------------------------------------------------------
; (Returns the sum of selected arc objects)
; Copyright (C) 1998 DotSoft, All Rights Reserved
; ----------------------------------------------------------------------
(defun c:sumarco ()
(setq tlen 0.0)
(setq sset (ssget '((0 . "ARC"))))
(setq num (sslength sset) itm 0)
(while (</color> eang sang)
(setq iang (- eang sang))
(setq iang (+ (- 6.28319 sang) eang))
)
(setq larc (* iang rads))
(setq tlen (+ tlen larc))
(setq itm (1+ itm))
)
(princ (strcat "\nLongitud Total: " (rtos tlen)))
(princ)
)
; ----------------------------------------------------------------------
; (Returns the sum of selected line objects)
; Copyright (C) 1997 DotSoft, All Rights Reserved
; ----------------------------------------------------------------------
; 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)))
(setq pt2 (cdr (assoc 11 ent)))
(setq dis (distance pt1 pt2))
(setq tot (+ tot dis))
(setq itm (1+ itm))
)
(princ (strcat "\nLongitud Total: " (rtos tot)))
)
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Written by Joshua M Orth. February 2000
; Modificado por InnerCity <itspanish> <http>
(defun C:sumlp (/ p l e sxy exy sum1 sum2 sum3)
(setq p (ssget (list (cons -4 "<or")
(cons 0 "LINE")
(cons 0 "LWPOLYLINE")
(cons -4 "<and")
(cons 0 "POLYLINE")
(cons -4 "<not>")
(cons -4 "and>")
(cons -4 "or>")
)
)
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))
(princ "\nLa suma total de longitudes para lineas es: ")
(princ (rtos sum1))
(princ "\nLa suma total de longitudes para polilineas es: ")
(princ (rtos sum2))
(princ "\nLa suma total de longitudes para lineas y/o polilineas es: ")
(princ (rtos sum3))
)
(princ "\nNo has seleccionado ninguna linea o polilinea")
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Suma el area y perimetro de distintas polilineas mediante seleccion directa
; Written by Joshua M Orth. February 2000
; Readaptado por InnerCity <itspanish> <http>
(defun C:sumarea (/ p l e sum1 sum2)
(setq p (ssget (list (cons -4 "<or")
(cons 0 "LWPOLYLINE")
(cons -4 "<and")
(cons 0 "POLYLINE")
(cons -4 "<not>")
(cons -4 "and>")
(cons -4 "or>")
)
)
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> <http>
(defun C:sumlcapa ( / l suml en sumln)
(defun sumln ( / count ss1 e sxy exy)
(setq suml 0.0)
(if (=(type l)'STR)
(progn
(setq ss1 (ssget "_X" (list (cons 0 "LINE") (cons 8 l)))
count 0
)
(if ss1
(progn
(princ "\n")(princ(sslength ss1))(princ " lineas encontradas")
(princ "\nEspere, por favor ")
(repeat (sslength ss1)
(setq e (entget (ssname ss1 count))
sxy (cdr (assoc 10 e))
exy (cdr (assoc 11 e))
suml (+ suml (distance sxy exy))
count (1+ count)
)
)
)
(princ (strcat "\nNo se han encontrado lineas en la capa: " l))
)
)
)
)
(while (not (setq en (entsel "\nSelecciona la capa de trabajo: "))))
(setq l (cdr (assoc 8 (entget (car en)))))
([color=black
La lista de los comandos, así como la función que realiza cada uno son las descritas a continuación;
Código: Seleccionar todo
*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 'Añadir' y os sale una ventana de explorador desde la que seleccionareis el archivo alli donde lo tengais. Una vez seleccionado, pulsais 'Añadir', '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.
AGRADECIMIENTOS: a Rodanas y d5mac por algunos de los lisp originales.
DESCARGA DE RESPONSABILIDADES: Si trabajando con este lisp se te jode el Autocad, se te emparanoia el Windows, te explota el ordenador, se te quema la casa o te deja tu chic@, a mi ni me mires ni me busques ¿OK?
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 put... caso.
* ©º°¨¨°º© InnerCity ©º°¨¨°º© *
* http://www.itspanish-portal.tk/ *
* http://itspanish.foro.st/ *
* http://www.itspanish.tk/ *
* itspanish@iespana.es *
* ~~~w0w~~~ *
;********************************* CAMINO CONSECUTIVO **********************************
;Modificado por InnerCity <itspanish> <http>
(defun c:sumcam ()
(setvar "cmdecho" 0)
(graphscr)
(setq
p1 (getpoint "\nSelecciona el primer punto: ")
p2 (getpoint p1 "\nSelecciona el siguiente punto: ")
d1 (distance p1 p2)
prdist (strcat "\nDistancia inicial: " (rtos d1))
)
(princ prdist)
(setq p3 (getpoint p2 "\nSelecciona el siguiente punto o ENTER para acabar"))
(while p3
(setq
d0 (distance p2 p3)
d1 (+ (distance p2 p3) d1)
p2 p3
prdist (strcat "\nDistancia parcial: " (rtos d0) ", Distancia acumulada: " (rtos d1))
)
(princ prdist)
(setq p3 (getpoint p2 "\nSelecciona el siguiente punto o ENTER para acabar: "))
)
(setq cumd (strcat "Distancia total: " (rtos d1)))
(prompt cumd)
(princ)
)
;********************************* CAMINO NO CONSECUTIVO ********************************
;Running distance calculator
;Modificado por InnerCity <itspanish> <http>
(defun c:sumcnc (/ pt1 pt2 d0 d1 )
(graphscr)
(setvar "CMDECHO" 0)
(setq pt1 (getpoint " Selecciona el primer punto: "))(terpri)
(setq pt2 (getpoint " Selecciona el siguiente punto: " pt1))(terpri)
(setq d1 (distance pt1 pt2))
(prompt " Distancia inicial: ")(prompt (rtos d1 2 4))
(while
(setq pt1 (getpoint "\nSelecciona el siguiente primer punto o ENTER para acabar: " )) (terpri)
(setq pt2 (getpoint " Selecciona el siguiente punto: " pt1 )) (terpri)
(setq d0 (distance pt1 pt2))
(setq d1 (+ (distance pt1 pt2) d1))
(prompt "Distancia parcial: ")(prompt (rtos d0 2 4))(prompt " Distancia acumulada: ")(prompt (rtos d1 2 4))
)
(prompt "Distancia total: ")(prompt (rtos d1 2 4))
(princ)
)
; ----------------------------------------------------------------------
; (Returns the sum of selected arc objects)
; Copyright (C) 1998 DotSoft, All Rights Reserved
; ----------------------------------------------------------------------
(defun c:sumarco ()
(setq tlen 0.0)
(setq sset (ssget '((0 . "ARC"))))
(setq num (sslength sset) itm 0)
(while (</color> eang sang)
(setq iang (- eang sang))
(setq iang (+ (- 6.28319 sang) eang))
)
(setq larc (* iang rads))
(setq tlen (+ tlen larc))
(setq itm (1+ itm))
)
(princ (strcat "\nLongitud Total: " (rtos tlen)))
(princ)
)
; ----------------------------------------------------------------------
; (Returns the sum of selected line objects)
; Copyright (C) 1997 DotSoft, All Rights Reserved
; ----------------------------------------------------------------------
; 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)))
(setq pt2 (cdr (assoc 11 ent)))
(setq dis (distance pt1 pt2))
(setq tot (+ tot dis))
(setq itm (1+ itm))
)
(princ (strcat "\nLongitud Total: " (rtos tot)))
)
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Written by Joshua M Orth. February 2000
; Modificado por InnerCity <itspanish> <http>
(defun C:sumlp (/ p l e sxy exy sum1 sum2 sum3)
(setq p (ssget (list (cons -4 "<or")
(cons 0 "LINE")
(cons 0 "LWPOLYLINE")
(cons -4 "<and")
(cons 0 "POLYLINE")
(cons -4 "<not>")
(cons -4 "and>")
(cons -4 "or>")
)
)
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))
(princ "\nLa suma total de longitudes para lineas es: ")
(princ (rtos sum1))
(princ "\nLa suma total de longitudes para polilineas es: ")
(princ (rtos sum2))
(princ "\nLa suma total de longitudes para lineas y/o polilineas es: ")
(princ (rtos sum3))
)
(princ "\nNo has seleccionado ninguna linea o polilinea")
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Suma el area y perimetro de distintas polilineas mediante seleccion directa
; Written by Joshua M Orth. February 2000
; Readaptado por InnerCity <itspanish> <http>
(defun C:sumarea (/ p l e sum1 sum2)
(setq p (ssget (list (cons -4 "<or")
(cons 0 "LWPOLYLINE")
(cons -4 "<and")
(cons 0 "POLYLINE")
(cons -4 "<not>")
(cons -4 "and>")
(cons -4 "or>")
)
)
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> <http>
(defun C:sumlcapa ( / l suml en sumln)
(defun sumln ( / count ss1 e sxy exy)
(setq suml 0.0)
(if (=(type l)'STR)
(progn
(setq ss1 (ssget "_X" (list (cons 0 "LINE") (cons 8 l)))
count 0
)
(if ss1
(progn
(princ "\n")(princ(sslength ss1))(princ " lineas encontradas")
(princ "\nEspere, por favor ")
(repeat (sslength ss1)
(setq e (entget (ssname ss1 count))
sxy (cdr (assoc 10 e))
exy (cdr (assoc 11 e))
suml (+ suml (distance sxy exy))
count (1+ count)
)
)
)
(princ (strcat "\nNo se han encontrado lineas en la capa: " l))
)
)
)
)
(while (not (setq en (entsel "\nSelecciona la capa de trabajo: "))))
(setq l (cdr (assoc 8 (entget (car en)))))
([color=black
No me funcinan justo las que más me interesan... ¿las podrías mandar en fichero a la cuenta de correo del foro (por si alguien más la quiere)?
Me da que al copiarlo de pantalla me puedo estar llevando algo más que el LISP limpio... de echo, al arrastrarlo sobre el dibujo me da error en una variable, mientras que al cargarlo mediante APPLOAD carga bien...
Os estoy viendo...
Ahora si...!!!
Me da que al copiar de aqui a un TXT algo debía de fallar...
No veas lo que me ahorra de tiempo... ahora sólo me queda buscar un método rápido para poder superficiar la pintura de las calles descontando los huecos.... de las polilíneas...
Cosas de los jefes...
Un millón...
Si algún día nos conocemos te debo tantas cañas que mejor nos vamos de comida..
Me da que al copiar de aqui a un TXT algo debía de fallar...
No veas lo que me ahorra de tiempo... ahora sólo me queda buscar un método rápido para poder superficiar la pintura de las calles descontando los huecos.... de las polilíneas...
Cosas de los jefes...
Un millón...
Si algún día nos conocemos te debo tantas cañas que mejor nos vamos de comida..
Os estoy viendo...
¿Quién está conectado?
Usuarios navegando por este Foro: Bing [Bot] y 35 invitados