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...
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>
(defunc:sumcam()
(setvar"cmdecho"0)
(graphscr)
(setq p1(getpoint"\nSelecciona el primer punto: ") p2(getpointp1"\nSelecciona el siguiente punto: ") d1(distancep1 p2) prdist(strcat"\nDistancia inicial: "(rtosd1))
)
(princprdist)
(setqp3(getpointp2"\nSelecciona el siguiente punto o ENTER para acabar"))
(whilep3 (setq d0(distancep2 p3) d1(+(distancep2 p3)d1) p2 p3
prdist(strcat"\nDistancia parcial: "(rtosd0)", Distancia acumulada: "(rtosd1))
)
(princprdist)
(setqp3(getpointp2"\nSelecciona el siguiente punto o ENTER para acabar: "))
)
(setqcumd(strcat"Distancia total: "(rtosd1)))
(promptcumd)
(princ)
)
;********************************* CAMINO NO CONSECUTIVO ********************************
;Running distance calculator
;Modificado por InnerCity <itspanish> <http>
(defunc:sumcnc(/pt1 pt2 d0 d1)
(graphscr)
(setvar"CMDECHO"0)
(setqpt1(getpoint" Selecciona el primer punto: "))(terpri)
(setqpt2(getpoint" Selecciona el siguiente punto: "pt1))(terpri)
(setqd1(distancept1 pt2))
(prompt" Distancia inicial: ")(prompt(rtosd12 4))
(while (setqpt1(getpoint"\nSelecciona el siguiente primer punto o ENTER para acabar: ")) (terpri)
(setqpt2(getpoint" Selecciona el siguiente punto: "pt1)) (terpri)
(setqd0(distancept1 pt2))
(setqd1(+(distancept1 pt2)d1))
(prompt"Distancia parcial: ")(prompt(rtosd02 4))(prompt" Distancia acumulada: ")(prompt(rtosd12 4))
)
(prompt"Distancia total: ")(prompt(rtosd12 4))
(princ)
)
; ----------------------------------------------------------------------
; (Returns the sum of selected arc objects)
; Copyright (C) 1998 DotSoft, All Rights Reserved
; ----------------------------------------------------------------------
; ----------------------------------------------------------------------
; (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.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Written by Joshua M Orth. February 2000
; Modificado por InnerCity <itspanish> <http>
(defunC:sumlp(/p l e sxy exy sum1 sum2 sum3)
(setqp(ssget(list(cons-4"<or")
(cons0"LINE")
(cons0"LWPOLYLINE")
(cons-4"<and")
(cons0"POLYLINE")
(cons-4"<not>")
(cons-4"and>")
(cons-4"or>")
)
) sum10.0 sum20.0 sum30.0 ) ;check for null selection set (ifp (progn (setql0)
(repeat(sslengthp)
(cond ((="LINE"(cdr(assoc0(setqe(entget(ssnamep l))))))
(setqsxy(cdr(assoc10e)) exy(cdr(assoc11e)) sum1(+sum1(distancesxy exy))
)
(terpri)
)
((="LWPOLYLINE"(cdr(assoc0(entget(setqe(ssnamep l))))))
(command"_.area" "_E"e)
(setqsum2(+sum2(getvar"perimeter")))
(terpri)
)
((="POLYLINE"(cdr(assoc0(entget(setqe(ssnamep l))))))
(command"_.area" "_E"e)
(setqsum2(+sum2(getvar"perimeter")))
(terpri)
)
)
(setql(1+l))
)
(setqsum3(+sum1 sum2))
(princ"\nLa suma total de longitudes para lineas es: ")
(princ(rtossum1))
(princ"\nLa suma total de longitudes para polilineas es: ")
(princ(rtossum2))
(princ"\nLa suma total de longitudes para lineas y/o polilineas es: ")
(princ(rtossum3))
)
(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>
(defunC:sumarea(/p l e sum1 sum2)
(setqp(ssget(list(cons-4"<or")
(cons0"LWPOLYLINE")
(cons-4"<and")
(cons0"POLYLINE")
(cons-4"<not>")
(cons-4"and>")
(cons-4"or>")
)
) sum10.0 sum20.0 ) ;check for null selection set (ifp (progn (setql0)
(repeat(sslengthp)
(cond ((="LWPOLYLINE"(cdr(assoc0(entget(setqe(ssnamep l))))))
(command"_.area" "_E"e)
(setqsum1(+sum1(getvar"area")))
(setqsum2(+sum2(getvar"perimeter")))
(terpri)
)
((="POLYLINE"(cdr(assoc0(entget(setqe(ssnamep l))))))
(command"_.area" "_E"e)
(setqsum1(+sum1(getvar"area")))
(setqsum2(+sum2(getvar"perimeter")))
(terpri)
)
)
(setql(1+l))
)
(princ"\nLa suma total de perimetros/longitudes es: ")
(princ(rtossum2))
(princ"\nLa suma total de areas es: ")
(princ(rtossum1))
)
(princ"\nNo has seleccionado ninguna polilinea")
)
(princ)
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; SUMLCAPA program, modified by Joshua M Orth. February 2000
; Modificado por InnerCity <itspanish> <http>
(defunC:sumlcapa(/l suml en sumln)
(defunsumln(/count ss1 e sxy exy)
(setqsuml0.0)
(if(=(typel)'STR)
(progn (setqss1(ssget"_X"(list(cons0"LINE") (cons8l))) count0 )
(ifss1 (progn (princ"\n")(princ(sslengthss1))(princ" lineas encontradas")
(princ"\nEspere, por favor ")
(repeat(sslengthss1)
(setqe(entget(ssnamess1 count)) sxy(cdr(assoc10e)) exy(cdr(assoc11e)) suml(+suml(distancesxy exy)) count(1+count)
)
)
)
(princ(strcat"\nNo se han encontrado lineas en la capa: "l))
)
)
)
)
(while(not(setqen(entsel"\nSelecciona la capa de trabajo: "))))
(setql(cdr(assoc8(entget(caren)))))
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...
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..