AutoCad - Descripción de capa en extracción de datos

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

Descripción de capa en extracción de datos

Publicado por Juanma (140 intervenciones) el 27/01/2023 00:07:16
Buenas,
Hace unos días intenté usar la columna descripción de las capas, para incluir el tipo de material o el espesor de chapa... Etc
Pero al intentar sacar los datos de los objetos me fué imposible añadir la columna descripción, como se puede hacer con el nombre de capa, o el color, etc.

También me serviría (o sería incluso mejor) poder escribir y leer el campo descripción mediante una lisp, o al menos leerlo, para incorporarlo a una lisp que tengo, y que calcula el peso de sólidos y te escribe el peso, y el nombre de su capa en un texto
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

Descripción de capa en extracción de datos

Publicado por Gerardo (986 intervenciones) el 28/01/2023 01:33:43
Hola estimado

Esa descripción se almacena como xdata de cada objeto Layer bajo la aplicación AcAecLayerStandard

echale un ojo a estas funciones a ver si te sirve integrarlas en tu código


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
(defun getlaydesc (capa / ename)
	(if
		(setq
			ename
			(tblobjname
				"LAYER"
				capa
			)
		)
		(cdr
			(assoc
				1000
				(cddadr
					(assoc
						-3
						(entget
							ename
							'("AcAecLayerStandard")
						)
					)
				)
			)
		)
	)
)
(regapp "AcAecLayerStandard")
(defun setlaydesc (capa desc / ename)
	(if
		(setq
			ename
			(tblobjname
				"LAYER"
				capa
			)
		)
		(entmod
			(append
				(entget ename)
				(list
					(list
						-3
						(list
							"AcAecLayerStandard"
							'(1000 . "")
							(cons 1000 desc)
						)
					)
				)
			)
		)
	)
)
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 Juanma
Val: 171
Bronce
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Descripción de capa en extracción de datos

Publicado por Juanma (140 intervenciones) el 28/01/2023 16:39:14
genial, en cuanto pueda lo incorporaré a mi aplicación.

otra duda que me surge, es como podría obtener el valor de la altura de un sólido de extrusión, ya que en la lista de propiedades aparece, pero no encuentro la forma de consultarlo.
He estado buscando algo parecido a la función para consultar el volumen "VLA-GET-VOLUME" pero "VLA-GET-HEIGHT" no funciona
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

Descripción de capa en extracción de datos

Publicado por Gerardo (986 intervenciones) el 28/01/2023 22:45:24
Que bueno que te sirviera

Sobre la altura de extrusión es todo un tema

Primeramente porque la estructura de los sólidos no está abierta en el autolisp. Si ves un entget de un sólido notarás que la definición del mismo viene en un grupo de cadenas que muestran lenguaje de máquina.

Luego porque la extrusión es una propiedad dinámica, y estas son adiciones hechas a versiones posteriores de autocad que se almacenan en sitios distintos a los nodos de definicion de primitivas. La descripción de las capas es un buen ejemplo. En el AutoCad 10,11,12 no existía esa característica por lo que la definición estandar de la capa no tiene un campo de descripción y posteriormente se agregó pero como "xdata". En este caso de las extrusiones hay una serie de datos en estructuras paralelas almacenadas en diccionarios

Y en tercer lugar, lo más importante quizás. Autodesk no facilita esta programación. Eso que pides de una función "get-height" no sería nada dificil de adicionar, pero simplemente por políticas de empresa no lo hicieron. Por ahí había leído que ocultan parte de las funcionalidades de sólidos para proteger el licenciamiento del programa Inventor, que al final comparte métodos de análisis 3D con el autocad y que mantiene una férrea competencia con el solidworks

En fin. Si quisieras ir más allá con programación 3D te recomendaría ir pensando en aprender a programar en ObjectArx, y que aún así hay ciertas limitaciones estructurales.


Pero bueno, volviendo a lo que necesitas, después de leer y experimentar un poco, me encontré con una clase de "Historia" que guarda la posición transformada del grip que estiras para cambiar la altura de extrusión, y eso es suficiente para obtener la altura

En este código tienes un paso a paso. Y como digo, no se trata de la altura real sino de la posición del pinzamiento, pero bueno, al fin de cuentas siempre son el mismo valor. Te da la altura de extrusion.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
(setq ent	(car (entsel "Seleccione un sólido de extrusión"));3D Solid
		lnt1	(entget ent)
		hist	(cdr (assoc 350 lnt1));ACSH_HISTORY_CLASS
		lnt2	(entget hist)
		evlt	(cdr (assoc 360 lnt2));ACAD_EVALUATION_GRAPH
		lnt3	(entget evlt)
)
(if
	(and
		(setq	extr	(cdr (assoc 360 lnt3)))
		(=
			(cdr
				(assoc
					0
					(setq	lnt4	(entget extr))
				)
			)
			"ACSH_EXTRUSION_CLASS"
		)
	)
	(alert
		(strcat
			"Altura de extrusión: "
			(rtos
				(distance
					'(0. 0. 0.)
					(cdr (assoc 10 lnt4))
				)
			)
		)
	)
	(alert "No se reconoce altura de extrusión")
)
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 Gerardo

Descripción de capa en extracción de datos

Publicado por Gerardo (4 intervenciones) el 07/06/2023 21:50:27
Si deseas acceder a la columna "Descripción" de las capas en AutoCAD utilizando una LISP, puedes utilizar la función "vla-get-Description" para leer el valor de ese campo. Aquí tienes un ejemplo básico de cómo puedes acceder a la descripción de una capa en AutoCAD utilizando LISP:

(defun c:ObtenerDescripcionCapa ()
(setq ent (car (entsel "\nSelecciona un objeto: ")))
(setq layer (cdr (assoc 8 (entget ent))))

(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq layers (vla-get-Layers doc))

(setq layerObj (vlax-ename->vla-object (tblsearch "LAYER" layer)))
(setq description (vla-get-Description layerObj))

(princ (strcat "\nLa descripción de la capa " layer " es: " description))
(princ)
)

Este código te permitirá seleccionar un objeto en AutoCAD y mostrará en la línea de comandos la descripción de la capa a la que pertenece ese objeto.

Una vez que tengas el valor de la descripción, puedes utilizarlo en tu LISP para realizar los cálculos necesarios y escribir el peso y el nombre de la capa en un texto.

Recuerda que la disponibilidad y funcionalidad de ciertas funciones pueden variar según la versión de AutoCAD que estés utilizando, por lo que te sugiero consultar la documentación o el manual de AutoCAD específico para tu versión en caso de necesitar más información sobre las funciones y propiedades disponibles.


______________________________________________________
Estudia la Licenciaturas Ejecutivas en Programación y Transformación Digital
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