Exportar longitud y coordenadas de polilineas a excel

Exportar longitud y coordenadas de polilineas a excel

sergio_gonza
Participant Participant
2,910 Views
9 Replies
Message 1 of 10

Exportar longitud y coordenadas de polilineas a excel

sergio_gonza
Participant
Participant

Buenas a todos,

 

Soy un estudiante que actualmente estoy tratando de realizar un archivo lsp para la obtención de coordenadas y longitudes de polilíneas seleccionadas y exportarlo a excel. 

Encontré por este foro varios archivos .lsp pero resulta que no hacen lo que quiero, uno de ellos (cpol) te exporta SOLO las coordenadas de las polilíneas seleccionadas.

El segundo archivo (polyinfo) me saca las coordenadas y longitud DE LOS SEGMENTOS DE LA POLILINEA, no te la polilínea entera por lo que no me valdría este método aparte que solo puedo extraer los datos UNA por UNA polilínea.

 

Lo que trato de conseguir es exportar a un formato .csv las coordenadas y longitudes de las polilíneas seleccionadas para así hacer coincidir con las textos que están insertados en el plano DWG (exportando también estos textos a un archivo .csv, eso con la herramienta extracción de datos lo hago fácil), los hago coincidir con las coordenadas de las polilíneas para así poner el nombre de esa polilínea.

No se si este ultimo método se podría hacer con un lisp, exportando a la vez el nombre del texto asociado a esa polilínea (nose como se haría), pero esto es secundario.

 

 

0 Likes
Accepted solutions (1)
2,911 Views
9 Replies
Replies (9)
Message 2 of 10

ВeekeeCZ
Consultant
Consultant

Post some dwg example... and desired output.

As a student, shouldn't you rather learn how to program?

0 Likes
Message 3 of 10

sergio_gonza
Participant
Participant

.

0 Likes
Message 4 of 10

sergio_gonza
Participant
Participant

Estoy estudiando una ingeniería (realizando el trabajo final de grado, dibujando una planta fotovoltaica, por lo que tengo muchas polilíneas dibujadas simulando los cables), nos proporcionan métodos de programación básicos, pero me interesa el tema y amplio conocimientos, ya que si consigo hacer este lsp, me ahorraría mucho tiempo a la hora de extraer datos.

 

sergio_gonza_0-1675685950215.png

 

sergio_gonza_1-1675685950216.png

 

 

El punto de inserción del texto lo hago coincidir con el final de la polilínea para así poder relacionarlos despues en el .csv. con sus coordenadas X.

Obtendria una tabla de la siguiente forma:

sergio_gonza_2-1675685950222.png

 

He metido a mano la posicion y longitud para dar un ejemplo de como quedaria. La posicion X tendria que coincidir con la polilinea y el texto para asi asociarlos.

0 Likes
Message 5 of 10

ВeekeeCZ
Consultant
Consultant

So supplement your extensive knowledge of what "post dwg" means. Some portion of it, not some huge file.

0 Likes
Message 6 of 10

sergio_gonza
Participant
Participant

Sorry 😅

0 Likes
Message 7 of 10

ВeekeeCZ
Consultant
Consultant

So as I understand it, the ultimate goal is to get a list of 

name, length

0 Likes
Message 8 of 10

sergio_gonza
Participant
Participant

Si, he expuesto el método como yo lo haría, pero seguramente habrá otros métodos.

La finalidad principal es obtener una tabla .csv con el nombre de cada cable y longitud, ya que imagínate meter 5000 cables a mano, es demasiado laborioso.

0 Likes
Message 9 of 10

ВeekeeCZ
Consultant
Consultant
Accepted solution

Ok, this should do the trick. You can still try your method to prove that the result is correct.

 

BTW One of the issues is that some plines are in reversed direction (eg. STR-10.02.16.02)

If the dist is not 0 or close to it, it is worth to double-check the drawing.

 

(vl-load-com)

(defun c:Cabellength ( / *error* f s_p s_m l_p l_m e d i p)
  
  (defun *error* (errmsg)
    (if (not (wcmatch errmsg "Function cancelled,quit / exit abort,console break,end"))
      (princ (strcat "\nError: " errmsg)))
    (if f (close f))
    (princ))
  
  (if (and (princ "\nPolylines, ")
	   (setq s_p (ssget '((0 . "LWPOLYLINE"))))
	   (princ "\nMtexts, ")
	   (setq s_m (ssget '((0 . "MTEXT"))))
	   (setq f (open (strcat (getvar "dwgprefix") (getvar "dwgname") ".txt") "w"))
	   (write-line "name,length,dist,xm,ym,xp,yp" f)
	   )
    (progn
      (repeat (setq i (sslength s_p))
	(setq e (ssname s_p (setq i (1- i)))
	      d (entget e)
	      l_p (cons (list (cdr (assoc 10 d)) (getpropertyvalue e "Length")) l_p)  ; pl_start_point
	      l_p (cons (list (cdr (assoc 10 (reverse d))) (getpropertyvalue e "Length")) l_p))) ; pl_end_point
      (repeat (setq i (sslength s_m))
	(setq e (ssname s_m (setq i (1- i)))
	      d (entget e)
	      l_m (cons (list (cdr (assoc 10 d)) (getpropertyvalue e "Text")) l_m)))
      
      (setq l_m (vl-sort l_m '(lambda (s1 s2) (< (cadr s1) (cadr s2)))))
      
      (foreach m l_m
	(setq l_p (vl-sort l_p '(lambda (d1 d2) (< (distance (car d1) (car m)) (distance (car d2) (car m)))))
	      p (car l_p))
	
	
	(write-line (strcat (cadr m) ","
			    (rtos (cadr p) 2 4) ","
			    (rtos (distance (car p) (car m)) 2 4) ","
			    (rtos (caar m) 2 4) ","
			    (rtos (cadar m) 2 4) ","
			    (rtos (caar p) 2 4) ","
			    (rtos (cadar p) 2 4))
	  f))))
  (*error* "end")
  )

 

0 Likes
Message 10 of 10

sergio_gonza
Participant
Participant
Funciona perfectamente, muchas gracias por tu tiempo, eres un crack!
0 Likes