Extraer contenido de comando LIST en un .txt

Página 2 de 2. Precedente  1, 2

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 : 165
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 : 55
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 : 165
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 : 55
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 : 55
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 Miér Ene 24, 2018 3:30 pm

Nolo: Retomando La rutina para completar
con el encabezado, al pegar en una planilla
de Exel se repite los valores en columnas.
Código:
;;; Exporta vertices de polilinea al Portapapeles
 
(defun c:lp2clip3( / 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)

  sl (mapcar '(lambda(a) (cons (strcat "X"(chr 9)"Y"(chr 9)"Cota"(chr 10)); Para Encabezado



 (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)));Para Corregir 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 lp2clip3 cargado")

Un Saludo
Luis

Luis Alberto Benitez

Mensajes : 55
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 Ene 26, 2018 12:17 pm

Pues díselo por orden
Código:
;;; Exporta vertices de una polilinea al Portapapeles
 
(defun c:lp2clip3( / 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 : "))
 ;(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
(setq sl (puntos (ssname ss 0))
   sl ;; añadir cabecera al final
 (cons (strcat "X"(chr 9)"Y"(chr 9)"Cota"(chr 10))
 ;; convertir en string segundo
 (mapcar '(lambda(a)(strcat(rtos(car a) 2 4)(chr 9)(rtos(cadr a) 2 3)(chr 9)(rtos(caddr a) 2 2)(chr 10) ) )
 ;; el trans a los puntos primero
 (mapcar '(lambda(x)(trans x 0 1)) sl)) )
)))
 (princ (strcat (chr 10)"No ha seleccionado una polilinea ...."))
)

(setvar 'dimzin old)
(princ)
)
(prompt "\nNuevo comando lp2clip3 cargado")

Otro detalle, es que el condicional if funciona en función del resultado final de una serie de operaciones encerradas en un (progn ...... ).
Si acabas con un nomut 0, el resultado de la evaluación sera siempre cero, no nil o ss que es lo que espera el condicional para saltar.
Como el resultado sea siempre 0, siempre evaluará lo primero del condicional.
Si lo que estas buscando es poder seleccionar varias polilineas a la vez, tendrías que corregir el progn y operar en bucle el resultado (foreach while o mapcar) y concatenar las lista total antes de mandarlo a c2clip

Un saludo

nolo

Mensajes : 165
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 Vie Ene 26, 2018 3:09 pm

Nolo.
Nuevamente Gracias Maestro
por completar la rutina y la explicación
didáctica, la tendré en cuenta.
Un saludo
Luis de Ctes.Arg,

Luis Alberto Benitez

Mensajes : 55
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

Volver arriba

- Temas similares

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