AutoCad - capturar polilinea generada con entmake

<<>>
 
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

capturar polilinea generada con entmake

Publicado por Juanma (157 intervenciones) el 15/04/2025 22:14:07
Buenas,

he programado la siguiente lisp, a partir de una función que dibuja una polilínea.

en principio funciona bien, pero para capturar la polilínea generada, he tenido que recurrir a (entlast)
he intentado capturar la polilínea con algo como "(setq marca-centro (entmake......." pero no funciona.
creo que el problema está en que en ese punto, aun no se a "creado" la polilínea, por lo que no es una polilínea completa (le faltan datos, como el nombre, etc)

Me pregunto como ejercicio, si se podría capturar de una forma mas apropiada.

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
(defun c:centro_taladros (/		lista-entidades
			  entidad	datos-entidad x
			  y		z	      centro
			  radio		nuevo-taladro contadorcillo
			 )
 
 
  (defun cen-tal (punto-origen)
    (setq punto-origen (cons 0 punto-origen))
 
    (setq puntos (mapcar '(lambda (A)
			    (if	(= (car A) 10)
			      (mapcar '+ A punto-origen)
			      A
			    )
			  )
			 '((10 0.0 1.0)
			   (40 . 0.0)
			   (41 . 0.0)
			   (42 . 0.0)
			   (10 0.0 -1.0)
			   (40 . 0.0)
			   (41 . 0.0)
			   (42 . 0.414214)
			   (10 1.0 0.0)
			   (40 . 0.0)
			   (41 . 0.0)
			   (42 . 0.0)
			   (10 -1.0 0.0)
			   (40 . 0.0)
			   (41 . 0.0)
			   (42 . -0.376748)
			   (10 -0.129225 0.991615)
			   (40 . 0.0)
			   (41 . 0.0)
			   (42 . 0.0)
			  )
		 )
    )
  (entmake
      (append
	'((0 . "LWPOLYLINE")
	  (100 . "AcDbEntity")
	  (100 . "AcDbPolyline")
	  (38 . 0)
	  (90 . 20)
	  (70 . 0)
	 )
	puntos
      )					;append
    )					;entmake
    (cdr (assoc 10 (reverse puntos)))
  )					;defun
 
 
  (setq	lista-entidades
			(ssget '((0 . "CIRCLE,ARC")))
	contadorcillo	0
  )
  (while (< contadorcillo (sslength lista-entidades))
    (setq entidad (ssname lista-entidades contadorcillo))
    (setq datos-entidad	(entget entidad)
	  x		(cdr (assoc 10 datos-entidad))
	  y		(cdr (assoc 20 datos-entidad))
	  z		(cdr (assoc 30 datos-entidad))
	  centro	(car (list x y))
	  radio		(cdr (assoc 40 datos-entidad))
    )
    (entdel entidad)
    (princ "\n----")
    (princ radio)
    (princ "\n----")
    (princ centro)
    (princ "\n----")
    (cen-tal centro)
    (setq nuevo-taladro	(entlast)
	  contadorcillo	(+ contadorcillo 1)
    )
					; Escala la *nueva* polilínea
    (command "_scale" nuevo-taladro "" centro radio "")
  )
  (princ)
)
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

capturar polilinea generada con entmake

Publicado por Gerardo (1013 intervenciones) el 15/04/2025 22:57:08
Hola

entlast está bien para eso, teniendo cuidado de llamarlo inmediatamente después del entmake

pero para hacerlo como quieres usa la función entmakex en vez de entmake

(setq marca-centro (entmakex '((0 . "LWPOLYLINE") ...

Yo era receloso con esa función por algo que dice la ayuda como que las entidades se crean "huerfanas", pero después de ver a muchos programadores expertos usarla así para capturar la entidad, le he ido perdiendo el miedo, Hacé tus pruebas
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

capturar polilinea generada con entmake

Publicado por Juanma (157 intervenciones) el 15/04/2025 23:57:24
Pués a funcionado estupendamente, aunque me crea la duda de que puede significar eso de entidad uerfana.
Supongo que si lo usan con programas complejos, no debe haber problema con una rutina tan simple como la mía
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