Extraer contenido de comando LIST en un .txt

Página 2 de 2. Precedente  1, 2

Ver el tema anterior Ver el tema siguiente Ir abajo

Re: Extraer contenido de comando LIST en un .txt

Mensaje por nolo el Miér Dic 20, 2017 9:01 pm

Hola Luis Alberto,
La rutina que subes, no sirve para el portapapeles porque escribe secuencialmente en un archivo y al portapapeles hay que mandarlo de una sola vez. Como te decía, lo positivo es crear una lista de datos para después convertirla en un string con tabuladores y saltos de línea que es el que se pasa al portapapeles en una sola operación.
Creí que el tema estaba resuelto con las rutina que preparé en este mismo hilo.
Por favor, explícame que problemas tienen para tratar de corregirlo.

Un saludo

nolo

Mensajes : 156
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Extraer contenido de comando LIST en un .txt

Mensaje por Luis Alberto Benitez el Jue Dic 21, 2017 11:35 am

Nolo.
Antes que nada gracias por responder.
El problema es que aplicando la rutina
Código:
(defun c:lp2clip1( / old 2clip ss sl)
;; puntos lwpolilinea al portapapeles
;; by nolo Nov 2017 en http://acadhispano.foroargentina.net/
(VL-LOAD-COM)
(setq old (getvar 'dimzin))
(setvar 'dimzin 0)
(defun 2clip(pasar / portapa)
;mardar el dato al portapapeles Original de Topoward
  (vlax-invoke (vlax-get (vlax-get
         (setq portapa (vlax-create-object "htmlfile"))
 'PARENTWINDOW)  'CLIPBOARDDATA)
 'setdata "Text"
  pasar)
  (vlax-release-object portapa )
(if (< (strlen pasar)500)
 (alert (strcat "Los datos \n"pasar"\nse han cargado en el portapapeles" ))
 (alert "Los datos se han cargado en el portapapeles")
)
)

(if (progn (princ(strcat(chr 10) "Seleccionar una polilínea : "))
(PRINC "\nSeleccionar una Polilínea : ")

(setvar 'nomutt 1);Suprime la visualización de mensajes (silenciamiento) que no se suprimiría normalmente
                  ;0 Reanuda el comportamiento normal de silenciamiento.
                  ;1 Suprime el silenciamiento de forma indefinida.

(setq ss (ssget '((0 . "LINE,LWPOLYLINE,POLYLINE"))))

 (setvar 'nomutt 0);Suprime la visualización de mensajes (silenciamiento) que no se suprimiría normalmente
                  ;0 Reanuda el comportamiento normal de silenciamiento.
                  ;1 Suprime el silenciamiento de forma indefinida.

 )
 (2clip(APPLY 'STRCAT (apply 'append
 (setq sl (entget (ssname ss 0))
 sl (mapcar 'cdr (vl-remove-if '(lambda(a) (/= (car a) 10)) sl))
 sl (mapcar '(lambda(a) (cons (chr 10)
 (mapcar '(lambda(b)(strcat (rtos (* 1 b) 2 2)(chr 9) ) ) a))
 )(mapcar '(lambda(x)(trans x 0 1))sl));; aquí está la corrección Para SCP
 ))))
 (princ (strcat (chr 10)"No ha seleccionado una polilinea ...."))
)
(setvar 'dimzin old)
(princ)
)


Esta rutina selecciona una polilinea 2d
y toma los valores x,y,z de la misma
pero no selecciona una polilinea 3d
que es lo que estoy buscando para
los valores x,y,z de la misma.
Un Saludo

Luis Alberto Benitez

Mensajes : 51
Fecha de inscripción : 29/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Extraer contenido de comando LIST en un .txt

Mensaje por nolo el Vie Dic 22, 2017 11:59 pm

Pero eso es lo que obtienes con (capon 1) anque si lo prefieres puedes incorporar la rutina de vlisp que genera los puntos en la que te preparé según tus deseos para una sola polilinea 2d para que admita también las 3d:
Código:
(defun c:lp2clip3( / puntos old 2clip ss sl)
;; puntos polilinea al portapapeles
;; en coordenadas del ucs actual
;; by nolo Nov 2017 en http://acadhispano.foroargentina.net/
(VL-LOAD-COM)
(setq old (getvar 'dimzin))
(setvar 'dimzin 0)
(defun 2clip(pasar / portapa)
;mardar el dato al portapapeles Original de Topoward
  (vlax-invoke (vlax-get (vlax-get
         (setq portapa (vlax-create-object "htmlfile"))
 'PARENTWINDOW)  'CLIPBOARDDATA)
 'setdata "Text"
  pasar)
  (vlax-release-object portapa )
(if (< (strlen pasar)500)
 (alert (strcat "Los datos \n"pasar"\nse han cargado en el portapapeles" ))
 (alert "Los datos se han cargado en el portapapeles")
)
)

(defun puntos( obj / flag lp i lt l)
(if (=(type obj)'ENAME)(setq obj(vlax-ename->vla-object obj)))
 (setq flag (1+(length
 (member (vlax-get-property obj 'ObjectName) '("AcDb3dPolyline""AcDbPolyline"))
 ))
 )
 (setq lp(vlax-get-property obj 'coordinates)
 lp (vlax-safearray->list  (variant-value lp))
 i 0 lt '())
 (foreach a lp (setq l (append l (list a)))
 (if (zerop (rem (setq i (1+ i)) flag))
 (setq lt (append lt (list l)) l '())
 ))
 (if (= flag 2)
 (mapcar '(lambda(a)(append a (list(vlax-get-property obj 'Elevation))) ) lt)
 lt
 )
)

(if (progn (princ(strcat(chr 10) "seleccionar una polilínea : "))
 (setq ss (ssget "_+.:S:E"'((0 . "LWPOLYLINE,POLYLINE"))))
 )
 (2clip(APPLY 'STRCAT (apply 'append
 (setq sl (puntos (ssname ss 0))
 sl (mapcar '(lambda(a) (cons (chr 10)
 (mapcar '(lambda(b)(strcat (rtos b 2 4)(chr 9) ) ) a))
 )(mapcar '(lambda(x)(trans x 0 1))sl)) ;; o )sl) para universal
 ))))
 (princ (strcat (chr 10)"No ha seleccionado una polilinea ...."))
)
(setvar 'dimzin old)
(princ)
)

Un saludo y Feliz Navidad

nolo

Mensajes : 156
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Extraer contenido de comando LIST en un .txt

Mensaje por Luis Alberto Benitez el Sáb Dic 23, 2017 11:43 am

Nolo:
Gracias Maestro la rutina funciona de una.
Un Saludo
Y Felices Fiestas.

Luis Alberto Benitez

Mensajes : 51
Fecha de inscripción : 29/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Extraer contenido de comando LIST en un .txt

Mensaje por Luis Alberto Benitez el Mar Dic 26, 2017 12:42 pm

Nolo.
Estoy Tratando de mejorar la rutina separando
las columnas los valores X,Y,Z
de la polilinea 3d pero al copiar repite los
valores de las columnas.
Lo otro seria colocar los encabezados de cada columna.
Nuevamente Gracias.
Código:
;;; Exporta vertices de polilinea al Portapapeles
 
(defun c:lp2clip4( / puntos old 2clip ss sl)
;; Vertices de  polilinea al portapapeles
;; en coordenadas del ucs actual
;; by nolo DIC 2017 en http://acadhispano.foroargentina.net/
(VL-LOAD-COM)
(setq old (getvar 'dimzin))
(setvar 'dimzin 0)
(defun 2clip(pasar / portapa)
;mardar el dato al portapapeles Original de Topoward
  (vlax-invoke (vlax-get (vlax-get
         (setq portapa (vlax-create-object "htmlfile"))
 'PARENTWINDOW)  'CLIPBOARDDATA)
 'setdata "Text"
  pasar)
  (vlax-release-object portapa )
(if (< (strlen pasar)500)
 (alert (strcat "Los datos \n"pasar"\nse han cargado en el portapapeles" ))
 (alert "Los datos se han cargado en el portapapeles")
)
)

(defun puntos( obj / flag lp i lt l)
(if (=(type obj)'ENAME)(setq obj(vlax-ename->vla-object obj)))
 (setq flag (1+(length
 (member (vlax-get-property obj 'ObjectName) '("AcDb3dPolyline""AcDbPolyline"))
 ))
 )
 (setq lp(vlax-get-property obj 'coordinates)
 lp (vlax-safearray->list  (variant-value lp))
 i 0 lt '())
 (foreach a lp (setq l (append l (list a)))

 (if (zerop (rem (setq i (1+ i)) flag))
 (setq lt (append lt (list l)) l '())
 ))
 (if (= flag 2)
 (mapcar '(lambda(a)(append a (list(vlax-get-property obj 'Elevation))) ) lt)
 lt
 )
)

(if (progn (princ(strcat(chr 10) "Seleccionar una Polilínea : "))
(PRINC "\nSeleccionar una Polilínea : ")

(setvar 'nomutt 1);Suprime la visualización de mensajes (silenciamiento) que no se suprimiría normalmente
                  ;0 Reanuda el comportamiento normal de silenciamiento.
                  ;1 Suprime el silenciamiento de forma indefinida.

(setq ss (ssget '((0 . "LINE,LWPOLYLINE,POLYLINE"))))

 (setvar 'nomutt 0);Suprime la visualización de mensajes (silenciamiento) que no se suprimiría normalmente
                  ;0 Reanuda el comportamiento normal de silenciamiento.
                  ;1 Suprime el silenciamiento de forma indefinida.

 
 ;(setq ss (ssget "_+.:S:E"'((0 . "LWPOLYLINE,POLYLINE"))))
 )
 (2clip(APPLY 'STRCAT (apply 'append
 (setq sl (puntos (ssname ss 0))
 sl (mapcar '(lambda(a) (cons (chr 10)





 (mapcar '(lambda(b)(strcat


 ;(rtos b 2 3)(chr 9) ) ) a)));Corregir para cantidad de Decimales
  (rtos(car a) 2 4)(chr 9)(rtos(cadr a) 2 3)(chr 9)(rtos(caddr a) 2 2)(chr 9) ) ) a)));Corregir para cantidad de Decimales en X,Y.Z



 (mapcar '(lambda(x)(trans x 0 1))sl)) ;;       o )sl) para Sistema de Coordenadas Universal
 ))))
 (princ (strcat (chr 10)"No ha seleccionado una polilinea ...."))
)
(setvar 'dimzin old)
(princ)
)


(prompt "\nNuevo comando lp2clip4 cargado")


Luis Alberto Benitez

Mensajes : 51
Fecha de inscripción : 29/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Extraer contenido de comando LIST en un .txt

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Página 2 de 2. Precedente  1, 2

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.