Comunidad
AutoCAD - Todos los productos - Español
Bienvenido/a al foro de los productos de la familia AutoCAD de Autodesk! Comparte tu conocimiento, haz preguntas y explora los temas populares de AutoCAD.
cancelar
Mostrando los resultados de 
Mostrar  solo  | Buscar en lugar de 
Quiere decir: 

Listar elementos que crucen una polilínea

5 RESPUESTAS 5
RESUELTAS
Responder
Mensaje 1 de 6
jjaneiro
573 Vistas, 5 Respuestas

Listar elementos que crucen una polilínea

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. 

jjaneiro_1-1608801917311.png

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

 

 

5 RESPUESTAS 5
Mensaje 2 de 6
calderg1000
en respuesta a: jjaneiro

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))
  )
  
  )
  )
  )

 

tub01.JPG


Carlos Calderon G
EESignature
>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.

Mensaje 3 de 6
calderg1000
en respuesta a: calderg1000

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
EESignature
>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.

Mensaje 4 de 6
jjaneiro
en respuesta a: calderg1000

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.

Mensaje 5 de 6
calderg1000
en respuesta a: jjaneiro

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
EESignature
>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.

Mensaje 6 de 6
jjaneiro
en respuesta a: calderg1000

Muchas gracias.

 

Si esto es más o menos lo que estaba buscando.

¿No encontraste lo que buscabas? Pregúntale a la comunidad o comparte tus conocimientos.

Publicar en los foros  

Autodesk Design & Make Report

New events in the Spanish Community