Buenos días.
¿Existe alguna función o lisp para listar los elementos (principalmente líneas o polilíneas) que crucen una polilínea?
Básicamente lo que quiero hacer es que me liste el nº de tubos o cables que hay en una zanja, tal y como se muestra en la imagen adjunta.
Con que ponga el nº de polilíneas y su capa correspondiente que lo atraviesan me sirve, no es necesario que ponga los diámetros o las secciones.
Muchas gracias.
Un saludo
¡Resuelto! Ir a solución.
Resuelto por calderg1000. Ir a solución.
Estimado @jjaneiro
Aqui te adjunto la siguiente rutina que te puede servir de ayuda.
;;;Routine Autolisp For Calderg1000, 02-01-21, para dar respuesta en el foro de la comunidad Autodesk en Español
;;;Selecciona polilineas y lista el nombre de las capas de cada polilinea y el numero total de la seleccion.
;;;------------------------------------------------------------------------------------------------------------
(defun c:npol( / sel p1 i elist nc e )
(if
(setq sel(ssget'((0 . "*line"))))
(progn
(setq p1(getpoint "Ingrese Ubic. de Resultado: "))
(vl-cmdf "text" p1 0.8 0 (strcat "Num.Tot. de Tub.= " (itoa (sslength sel))))
(setq e 1.5)
(repeat(setq i(sslength sel))
(setq elist(entget(ssname sel (setq i (1- i))))
nc(cdr(assoc 8 elist)))
(vl-cmdf "text" (mapcar '+ p1 (list 0 e 0)) 0.8 0 (strcat "Capa: " nc))
(setq e (1+ e))
)
)
)
)
Carlos Calderon G
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.
Estimado @jjaneiro
Aqui una mejora para poder identificar las capas de cada polilinea por color.
;;;Routine Autolisp For Calderg1000, 02-01-21, para dar respuesta en el foro de la comunidad Autodesk en Español
;;;Selecciona polilineas y lista el nombre de las capas de cada polilinea y el numero total de la seleccion.
;;;------------------------------------------------------------------------------------------------------------
(defun c:npol (/ sel p1 i elist nc e)
(vl-load-com)
(if
(setq sel (ssget '((0 . "*line"))))
(progn
(setq p1 (getpoint "Ingrese Ubic. de Resultado: "))
(vl-cmdf "text"
p1
0.8
0
(strcat "Num.Tot. de Tub.= " (itoa (sslength sel)))
)
(setq e 1.5)
(repeat (setq i (sslength sel))
(setq elist (entget (ssname sel (setq i (1- i))))
nc (cdr (assoc 8 elist))
)
(vl-cmdf "text"
(mapcar '+ p1 (list 0 e 0))
0.8
0
(strcat "Capa: " nc)
)
(vla-put-layer (vlax-ename->vla-object (entlast)) nc)
(setq e (1+ e))
)
)
)
)
Carlos Calderon G
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.
Muchas gracias calderg1000
No es exactamente lo que estaba buscando, pues con el lisp tengo que seleccionar las polilíneas. En mi caso lo que busco es seleccionar las líneas/polilíneas que cruzan (de color blanco) y en cada una de ellas colocar el texto.
Pero creo que con código puede que lo pueda adaptar y conseguirlo.
Estimado @jjaneiro
Modifique el código y talvez se ajuste mejor a lo que requieres.
(defun c:npol2 (/ ss p1 p2 sel p1 i elist nc e)
(vl-load-com)
(setq ss (car (entsel)))
(setq p1 (vlax-curve-getstartpoint (vlax-ename->vla-object ss)))
(setq p2 (vlax-curve-getendpoint (vlax-ename->vla-object ss)))
(if
(setq sel (ssget "f" (list p1 p2) '((0 . "*line"))))
(progn
(setq p1 (getpoint "Ingrese Ubic. de Resultado: "))
(vl-cmdf "text"
p1
0.8
0
(strcat "Num.Tot. de Tub.= " (itoa (sslength sel)))
)
(setq e 1.5)
(repeat (setq i (sslength sel))
(setq elist (entget (ssname sel (setq i (1- i))))
nc (cdr (assoc 8 elist))
)
(vl-cmdf "text"
(mapcar '+ p1 (list 0 e 0))
0.8
0
(strcat "Capa: " nc)
)
(vla-put-layer (vlax-ename->vla-object (entlast)) nc)
(setq e (1+ e))
)
)
)
)
Carlos Calderon G
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.
¿No encontraste lo que buscabas? Pregúntale a la comunidad o comparte tus conocimientos.