AutoCad - AutoLISP: coordenadas, selección de puntos

 
Vista:
Imágen de perfil de Nicolás
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (33 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
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

AutoLISP: coordenadas, selección de puntos

Publicado por Gerardo (986 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
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (33 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
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

AutoLISP: coordenadas, selección de puntos

Publicado por Gerardo (986 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
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (33 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
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

AutoLISP: coordenadas, selección de puntos

Publicado por Gerardo (986 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
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (33 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
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

AutoLISP: coordenadas, selección de puntos

Publicado por Gerardo (986 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
Imágen de perfil de oannes
Val: 11
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AutoLISP: coordenadas, selección de puntos

Publicado por oannes (5 intervenciones) el 15/04/2017 04:38:54
Muchas gracias Gerardo, un gran aporte. Logre ubicar un archivo que me exportaba las coordenas a excel de cualquier punto y siempre me intrigaba saber el codigo que lo hacia trabajar, por desgracia estaba compilado y no te permitia ver su codigo. Con tu informacion se abre un amplio rango de posibilidades para crear un lisp que me metre archivos de estructuras. MUCHAS GRACIAS, un gran abrazo. Saludos desde Cusco-Peru
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 Jhon Milton Copete (3 intervenciones) el 23/10/2018 02:11:51
Gerardo Saludo Cordial desde Cali - Colombia
Por tus conocimientos que expones aquí, creo que me puedes ayudar o guiar en lo siguiente:
Primero aclaro que apenas estoy ingresando al mundo de programación en AutoCAD mediante lisp, pero ya he hecho algunas aplicaciones de uso personal en Android (lenguaje JAVA), no muy sofisticadas pero tampoco tan simples, mi curiosidad es que si teniendo un polígono cerrado, se puede detectar mediante programación las coordenadas de textos escritos al interior de dicho polígono, pero sin necesidad de convertir el polígono y los textos en un bloque, por que hasta donde he leído, fácilmente se puede hacer lo anterior pero si pertenecen a un bloque; el otro tema que me interesa es, saber si se puede cambiar la identificación que AutoCAD le da automáticamente a un objeto, por el nombre que nosotros queramos pero sin convertirlos en bloques, lo pregunto para evitar en lo posible el uso de Bloques, y por último cómo seria una rutina que calcule el área de una sombra, pero no clickando con el ratón el punto en tiempo real, sino que al seleccionar los polígonos, el programa tome la coordenada para la sombra de un texto que va colocado previamente al interior de la polilínea o región a calcular.

Aclaro que el o los polígonos y los textos no harían parte de bloque alguno, son dibujos simples

Gracias de Antemano por la ayuda que me puedas brindar
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
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (33 intervenciones) el 24/10/2018 18:33:44
Buenas Jhon! hace ya mas de un año que he abandonado mi incursión en el autoLISP pero tengo el recuerdo de que haría para obtener las coordenadas que dices. No se que tanta idea tienes de autoLISP pero te doy un pantallazo.

Deberás obtener los vértices del polígono en una lista, para que luego se seleccione lo que hay en su interior, esos se almacenarán en una lista por sus nombres de entidad, y ahí irás recorriendo uno por uno para obtener sus coordenadas e inclusive si quieres sus textos contenidos.

Primero seleccionaría el polígono con un (entsel), el cual debe ser una polilínea 2D ya que 3D no se obtienen sus vértices de la misma manera. Este entget te da una lista con el nombre de entidad y la coordenada del clic. Solo necesitas el nombre por lo que lo obtienes con (car) que devuelve el primer valor de una lista. Luego (entget) te dará los datos de esa polilínea entre los cuales están sus vértices los cuales usaremos para seleccionar luego los textos o inclusive cualquier objeto que haya dentro de él. Los anteriores comandos se utilizarían del siguiente modo. Por cierto, es básico pero (setq <nombre_de_variable> <dato>) sirve para guardar un dato en una variable.

(setq Poligono (entget (car (entsel)))) Ahí tienes una lista con los datos del poligono.

Cada miembro de la lista es otra lista con un código y su dato, (pon ese comando en las lineas de comando de autocad, selecciona un polígono u otro objeto y verás como los muestra). El código de los vértices es el 10. ej: (10 <coordX> <coordY> )
Acá viene la parte de código que no recuerdo muy bien, deberás ir recorriendo los datos de la lista con un (foreach) y cada vez que encuentres el codigo 10 como primer valor de cada sublista, guardás la coordenada X e Y en una lista de vertices, quizás debas agregar un 0 como coordenada Z. El comando para ir agregando datos a una lista sería:

(setq <nombre_de_lista> (cons <nombre_de_lista> (list <coorX> <coorY> <coorZ> ))) agrega las coordenadas de un vértice a la lista de vértices

Luego de ya tener la lista de vertices es hora de la selección... Usaras el (ssget), algunos de los modos que te pueden servir son:

(ssget "_CP" <lista_pt>):
Crea un conjunto de selección con todos los objetos que pasan por el polígono y los que están dentro definidos por lista_pt
(ssget "_F" <lista_pt>):
Crea un conjunto de selección con todos los objetos que intersecan el borde definido por lista_pt
(ssget "_WP" <lista_pt> <lista_filtros>):
Crea un conjunto de selección con todos los objetos dentro del polígono definido por lista_pt que coinciden con la lista_filtros, ahi decidirías si solo querés que seleccione texto por ejemplo, aunque hay mas para explicar en ese caso jaja

Cada modo precedido por un "(setq <nombre_variable> " para que se guarde en una variable. Ahora con un while y el ssname recorrés las selecciones. El (sslength <variable_seleccion>) te dice la cantidad de elementos seleccionados.

(ssname <variable_seleccion> <indice>) el indice va de 0 a cantidad de elementos menos 1.

El ssname te devuelve el nombre de entidad que como antes con el entget sacas sus datos entre los cuales estan sus coordenadas y el texto.

Perdón por la extensa y quizás poco aclaradora respuesta jaja. Así es como recuerdo que lo haría, te conviene buscar un poco respecto de los comandos que te describí. Cualquier cosa no dudes en consultar lo que no hayas entendido. O si quieres espera el msj de Gerardo que es un genio. Suerte!
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 Jhon Milton Copete (3 intervenciones) el 24/10/2018 18:54:15
Aclaro que cuando digo coordenadas de texto, me refiero es al punto de inserción del texto, no que la coordenada está escrita en el contenido del texto, lo que contendría el texto es el nombre o identificador de la región a calcular. También me surge otra idea en caso de no ser posible identificar objetos (punto de inserción de texto y contenido de texto en mi caso) dentro de un polígono, la idea es que si se podría hacer una rutina que de alguna manera amarre, conecte o identifique, ¿un objeto con el polígono que lo contiene?, pero sin llegar a hacer un bloque.
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 Jhon Milton Copete (3 intervenciones) el 24/10/2018 19:16:46
Gracias por tu respuesta, acababa de publicar un comentario (aclaración) cuando me llegó el tuyo, interpretaste muy bien mis inquietudes, por ahora me alegra que si se puedan reconocer objetos al interior de un polígono, que ciertamente solo trabajo en 2D, la idea es que con las coordenadas del punto de inserción del objeto texto haga una sombra no necesariamente visible, y obtener el área, próximamente estaré retomando los manuales de AutoLISP, para irle dando forma al código, lo primero que necesito es exactamente lo que me has descrito, seleccionar el o los polígonos y determinar tales o cuales coordenadas junto con el contenido de texto.

De nuevo GRACIAS!, ya estaré comentando por aquí como me ha ido.
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
Val: 42
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AutoLISP: coordenadas, selección de puntos

Publicado por Nicolás (33 intervenciones) el 24/10/2018 21:10:01
Me alegra que te sirviera. Un extra... El texto tiene 2 coordenadas dependiendo la justificación, ambas obtenibles, si tiene la justificación predeterminada (abajo izquierda) el código 10 de la lista del entget, será la coordenada del texto, pero si vos le pusiste alguna justificación tendrás un 10 con las coordenadas de la inserción predeterminada y un 11 con las coordenadas de inserción de la justificación que hayas elegido.

Yo tenía un manual con la lista de códigos de entget de cada entidad... Lamentablemente lo perdí, pero buscando seguro encuentras lo que te haga falta, el resto es prueba y error.
Suerte!
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 Ronald (3 intervenciones) el 03/02/2020 21:31:04
Buen día ¿Cómo puedo hacer para agrupar celdas? desde atuocad, ya pudeo crear archivo excel y cambiar el formato a toda la hoja, si se puede hacer a una celda especifica sería genial, y lo mas importante agrupar dos ó mas celdas.
Se Agradece
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

AutoLISP: coordenadas, selección de puntos

Publicado por Gerardo (986 intervenciones) el 04/02/2020 04:13:21
Hola
Me imagino que con agrupar te refieres a mezclar. ¿O me equivoco?

Obten el rango desde el conjunto de celdas y aplicales el método "Merge"
Algo como así

1
2
3
4
5
6
7
8
9
(vlax-invoke
	(vlax-get-property
		HOJA
		"Range"
		(vlax-get-property CELDAS 'item 1 2)
		(vlax-get-property CELDAS 'item 1 5)
	)
	'Merge
)

En ese ejemplo estamos tomando por rango las celdas de 2 a 5 en la fila 1, y esas se mezclan

Y de la misma forma puedes tomar cualquier rango, así sea una sola celda y aplicarle formato
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