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


0