AutoCad - Funcion para copiar resultado-Autolisp

 
Vista:
sin imagen de perfil

Funcion para copiar resultado-Autolisp

Publicado por Zloeh (3 intervenciones) el 11/01/2017 16:18:30
Hola buenas a todos, solo queria hacerles una consulta
Lo que pasa es que quisiera saber si existe una funcion en el autolisp para copiar el resultado de una rutina al portapapeles por ejemplo

(defun c:d0 ()
(setq d1 (getreal))
(setq d2 (getreal))
(setq diametro (* d1 d2))

)

que si yo pusiera que d1=3 d2=4

el valor de diametro que seria 12 se copiara al portapapeles

soy nuevo en esto y disculpen si es muy sencillo pero no encuentro como hacerlo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Funcion para copiar resultado-Autolisp

Publicado por Gerardo (986 intervenciones) el 11/01/2017 19:01:27
una sola funcion no la hay pero si un procedimiento.

1
2
3
4
5
6
7
8
9
10
11
12
(vlax-invoke
    (vlax-get
		 (vlax-get
			 (vlax-create-object "htmlfile")
			 'ParentWindow
		 )
	 'ClipBoardData
	)
    'setData
    "Text"
    (rtos diametro)
)

La parte: (vlax-get (vlax-get (vlax-create-object "htmlfile") 'ParentWindow ) 'ClipBoardData ) te retornará un objeto de tipo IHTMLDataTransfer, que tiene 3 métodos : setData para escribir en el portapapeles, getData para leer de el y clearData para limpiarlo. En este caso estamos invocando al primero de ellos. "Text" es el formato de datros, que debe ser ese salvo que estuvieras copiando una URL y luego el (rtos diametro) convierte tu numero a cadena de texto que es lo que se copia, no puede pasarlo como numero.
Si quieres puedes agregar los valores de formato y presicion del rtos y modificar la variable dimzin que controla la supresion de ceros a izq y der para que el numero salga con el formato listo para el sitio donde lo vayas a pegar.

Aqui tienes la referencia de microsoft del objeto htmldatatransfer por si quieres aprovecharlo mas en otras cosas:
https://msdn.microsoft.com/en-us/library/aa752703(v=vs.85).aspx
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Funcion para copiar resultado-Autolisp

Publicado por Zloeh (3 intervenciones) el 11/01/2017 19:48:02
Muchas gracias por responder si me funciona bien.
Ese procedimiento lo he visto en una de las rutinas que tengo descargado para copiar de excell y pegar al autocad sin usar el pegado especial pero no lo entiendo muy bien, busque que hacia cada una de las vlax pero luego no entendia lo del parentwindow, clipboardata setdata y demas. Trate de abrir tu enlace pero me dice que no se encuentra la pagina solicitada.

Editado: disculpa al final de la rutina me sale -1 a que se debe ese valor?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Funcion para copiar resultado-Autolisp

Publicado por Gerardo (986 intervenciones) el 11/01/2017 23:22:03
Si, ya vi que el link era temporal. Mejor poner en Google IHTMLDataTransfer y entre las primeras paginas te saldra una en MSDN.Microssoft que es la ayuda para programación de microsoft.


En cuanto al -1
La rutina devuelve lo ultimo evaluado, es decir, el resultado de la ultima funcion. Si lo ultimo es el codigo que te pase es el valor retornado por la funcion vlax-invoke que es la que cierra el ultimo parentesis. Puedes conservarlo para saber que se ha copiado bien al portapapeles, o puedes agregar otra cosa despues de esa. La función Princ sin argumentos no devuelve ningun valor, por lo que es la recomendada si quieres omitir ese tipo de salidas como el -1. Por ejemplo despues de todo el codigo puedes agregar esto:

1
2
(princ "Valor copiado al portapapeles")
(princ)
Así saldrá ese mensaje y nada más. (si no pones el ultimo (princ) el mensaje se muestra 2 veces, uno por la orden del primer princ y otro como valor retornado por esa misma instruccion que seria la ultima de la rutina)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Funcion para copiar resultado-Autolisp

Publicado por Zloeh (3 intervenciones) el 12/01/2017 16:29:02
Muchas gracias me has ayudado mucho con eso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion para copiar resultado-Autolisp

Publicado por Juan Arana (1 intervención) el 10/09/2021 07:38:23
Hola Zloeh
Me podrias pasar la rutina q comentas, q pasa del excel al Cad sin necesidad de usar el pegado especial
gracias y saludos dsd Perú
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar