AutoCad - AutoLISP: coordenadas, selección de puntos

   
Vista:
Imágen de perfil de Nicolás

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (21 intervenciones) el 09/06/2015 04:02:22
Hola programadores! estoy buscando la forma en la que seleccionando un conjunto de puntos me guarde las coordenadas, no importa el orden realmente... Yo se como pero seleccionando uno por uno, y me haría el trabajo mucho más veloz el poder seleccionar todos de una.

Tengo bastante conocimiento del Autolisp y lo que no se, suelo encontrarlo medianamente rápido, pero esto no lo encuentro por ningún lado y temo que no sea posible.


Ya que estamos hago la siguiente pregunta, es posible escribir datos en determinadas celdas de excel?
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
información
Otras secciones de LWP con contenido de AutoCad
- Cursos de AutoCad
- Temas de AutoCad
- Chat de AutoCad
información
Cursos y Temas de AutoCad
- Manual práctico de Autocad 2006
- Curso de AutoCad 2015
- Trucos para AutoCAD

AutoLISP: coordenadas, selección de puntos

Publicado por Gerardo (443 intervenciones) el 09/06/2015 08:29:09
Si como dices tienes bastante conocimiento en autolisp no debes tener ningun problema
haces una seleccion segun la necesidad, criterio y modo que gustes

1
(setq sleeccion ssget... ...' (0 . "POINT")...,


luego iteras a traves de ella en un bucle

1
(repeat (sslength seleccion)...


tomando en el cuerpo del bucle punto por punto y de la misma forma que sabes tomar las coordenadas de uno, vas tomandolas y puedes irlas agregando en una lista.

Yo por ejemplo prefiero usar listas dxf:

1
(setq listadepuntos (cons (cdr (assoc 10 (entget (ssname seleccion N)))) listadepuntos))


En cuanto a tu segunda pregunta, si se puede, con las extensiones de vlisp
Tomas el objeto "excel.application" con vlax-get-or-create-object
de la aplicacionn tomas el documento activo o abres el que te interese, o buscas por nombre el que este abierto que coincida con lo que quieras, de ese documento tomas la hoja de tu interes y de la hoja la propiedad cells (celdas), siempre con la funcion vlax-get-property
En el objeto celdas utilizas la propiedad item con un doble indice, el primero se refiere a la columna y el segundo a la fila.
Por ejemplo, para escribir tu nombre en la tercera columa ("C") y cuarta fila, suponiendo que en la variable celdas tienes la propiedad cells de la hoja, pones

1
(vlax-put-property celdas 'item 3 4 "Nicolas")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Nicolás

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (21 intervenciones) el 09/06/2015 17:28:34
Gerardo siempre me salvás, sos un genio!, el comando que me había faltado era ssname, no se como no me salto buscando en internet xD y me hiciste dar cuenta de ssget que yo solo lo usaba sin conocimiento de las listas de parámetros.

Con respecto a lo de excel, como sería eso de tomar el objeto "excel.application"
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

AutoLISP: coordenadas, selección de puntos

Publicado por Gerardo (443 intervenciones) el 09/06/2015 23:21:35
te adjunto un código de ejemplo para que lo analices
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(setq excel (vlax-get-or-create-object "Excel.Application")
		libros (vlax-get-property excel 'Workbooks)
		nuevolibro (Vla-Add libros nil)
		hoja (vlax-get-property nuevolibro 'ActiveSheet)
		celdas (vlax-get-property hoja 'cells)
		fila 2
)
(vla-put-visible excel :vlax-true)

(foreach cad '("Valor1" "Valor2" "Valor3" "Total")
	(vlax-put-property celdas 'item fila 2 cad)
	(setq fila (1+ fila))
)
(vlax-put-property celdas 'item 2 3 "5")
(vlax-put-property celdas 'item 3 3 "8")
(vlax-put-property celdas 'item 4 3 "-2")
(vlax-put-property celdas 'item 5 3 "=C2+C3+C4")

Asi puedes tomar y setear cualquier valor de celdas o rangos de celdas asi como sus propiedades, mezclar celdas, alinear contenidos etc. Es importante cerrar cada Excel que abras o al menos dejarlo visible para que el usuario lo pueda cerrar, además de liberar la memoria de los objetos con vlax-relase-object

Para esto solo hay que pelotear un rato con las funciones vlax- sobretodo con vlax-dump-object que es la que te mostrará las propiedades de cada objeto que puedes tomar, leer o asignar.
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
Imágen de perfil de Nicolás

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (21 intervenciones) el 10/06/2015 01:45:45
Wow, me impresiona la cantidad de conocimientos que tenes, te agradezco mucho, cuando llegue a ese punto lo veré con más detalle.
Te repito siempre me salvas, sos un experto en la programación. Gracias
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

AutoLISP: coordenadas, selección de puntos

Publicado por Gerardo (443 intervenciones) el 10/06/2015 05:51:10
Me alegro que te sirva
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
Imágen de perfil de Nicolás

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (21 intervenciones) el 12/06/2015 06:24:06
Tengo una ultima consulta, ya termine finalmente de hacer el programa, pero me gustaría saber si es posible lo siguiente...

En vez de crear un nuevo excel, que se abra uno ya existente y modificarlo. Por ejemplo:

Yo tengo un excel modelo que esta en el directorio "C:\\Users\\NICOLAS\\Documents\\Base.xlsx" el cual uso para modificar determinadas celdas.

Luego de modificarse usaria los comandos:

(setq arch (getstring "Ingrese nombre de archivo: "))
(setq archivo (strcat "C:\\Users\\NICOLAS\\Documents\\" arch ".xlsx"))

Para elegir el lugar donde se guardara, así no se sobre escribe "Base.xlsx" pondré lo siguiente:

(vlax-invoke-method abks 'SaveAs archivo -4143 nil nil :vlax-false :vlax-false 1 2)

Realmente no se que significa cada parametro (seguro vos sepas) pero me percaté de su función en un autolisp de ejemplo que encontré investigando, y lo use para guardar mi excel creado, ya que aun no se como abrir un existente :P .
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

AutoLISP: coordenadas, selección de puntos

Publicado por Gerardo (443 intervenciones) el 12/06/2015 07:09:59
prueba esto para abrir un libro
1
2
3
4
(setq *AplExcel* (vlax-create-object "excel.application")
      *Libros*  (vlax-get-property *AplExcel* "Workbooks")
      abks	(vla-open *Libros* archivo)
)


en cuanto al metodo saveas, pues estas pasando los primeros 8 parametros (desde archivo hasta 2) de los 12 posibles que recibe esta funcion. Recuerda que esto depende de la definicion de metodos del excel, no del autocad. Puedes ver la lista de parametros y su significado aqui: https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas.aspx
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