AutoCad - Autolisp: calcular el número total de vértices de un polígono

 
Vista:
Imágen de perfil de Weiland
Val: 2
Ha aumentado su posición en 7 puestos en AutoCad (en relación al último mes)
Gráfica de AutoCad

Autolisp: calcular el número total de vértices de un polígono

Publicado por Weiland (1 intervención) el 27/08/2020 07:04:30
Estoy tratando de ver cómo se puede saber el número de vértices que contiene un polígono mediante lisp.
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: calcular el número total de vértices de un polígono

Publicado por Gerardo (986 intervenciones) el 27/08/2020 15:51:11
Hola
Yo lo hago con DXF, obteniendo la lista de definicion de la polilinea y contando las listas que tienen codigo de asociación 10, que son los vertices

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(alert
	(strcat
		"El polígono tiene: "
		(itoa
			(length
				(vl-remove-if
					'(lambda (sub)
						(/= (car sub) 10)
					)
					(entget (car (entsel)))
				)
			)
		)
		" vértices"
	)
)

Aunque también podrías usar las extensiones ActiveX de visual lisp. En este caso tomar la propiedad "Coordinates" del objeto, que es un vector de valores (x1 y1 x2 y2 x3 y3...). Si la polilinea es 2d cada dos valores del vector es un punto, entonces debe dividirse su longitud entre 2. (Si fuera poly 3d, hay que dividir por 3)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(alert
	(strcat
		"El polígono tiene: "
		(itoa
			(/
				(length
					(vlax-safearray->list
						(vlax-variant-value
							(vlax-get-property
								(vlax-ename->vla-object (car (entsel)))
								'Coordinates
							)
						)
					)
				)
				2
			)
		)
		" vértices"
	)
)

Y aunque no lo estás preguntando, esas son las formas de paso de obtener las coordenadas de todos los vértices. En el primer ejemplo es el cdr de cada sublista filtrada (codigo 10) y en el segundo es hacer listas de cada 2 elementos de la lista devuelta por vlax-safearray->list
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