Obtener puntos en orden
Publicado por hernan (8 intervenciones) el 29/10/2016 06:37:45
Hola a todos, soy nuevo usando autolisp pero estoy aprendiendo rapio. Mi consulta es la siguiente: Estoy haciendo un programa que me calcula la distancia entre los puntos que selecciono en pantalla, la dificultad esta en que cuando voy seleccionando uno por uno los puntos el me arroja la distancia bien pero cuando hago una ventana de seleccion en ocasiones me arroja la distancia bien y en otras no, esto por la secuencia que toma los puntos. Como puedo hacer para que me corregir esto.
Este es el código, lo estoy terminando aun, pero funciona. En la imagen adjunta me arroja dos distancias diferentes de acuerdo como lo selecciones (Punto por punto - ventana de selección )
Este es el código, lo estoy terminando aun, pero funciona. En la imagen adjunta me arroja dos distancias diferentes de acuerdo como lo selecciones (Punto por punto - ventana de selección )
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
(defun c:colin ()
(initget 7)
(setq m " m")
(setq n (getint "Numero de Colindantes: "))
(setq i 0)
(while (< i n)
(setq inftexto (entget (car (entsel "Seleccione un texto:"))))
(setq texto (cdr (assoc 1 inftexto)))
(setq h (cdr (assoc 40 inftexto)))
(setq h (* h 0.8))
(setq puntos (ssget (list (cons 0 "POINT")))) ; Selecciona solo Puntos
(setq cant (sslength puntos)); cantidad de puntos seleccionados
;(entget (ssname puntos i)) ;Obtiene los atribulos de cada elemente
(setq j 0)
(setq dist 0) ; Inicializar distacia entre puntos
(repeat (- cant 1)
(setq p1 (cdr (assoc 10(entget (ssname puntos j))))) ; Obtiene las coordenadas primer punto
(setq p2 (cdr (assoc 10(entget (ssname puntos (+ j 1)))))) ; Obtiene las coordenadas segundo punto
(setq dist (+ dist (distance p1 p2))) ; Voy sumando las distancias entre puntos
(setq j (+ j 1))
)
(setq dist (rtos dist 2 2)) ; Convierte la distancia a texto con 2 decimales como precision
(setq punto (getpoint "\nIngrese punto de insercion: "))
(setq texto2 (strcat dist m))
(entmake(list
(cons 0 "TEXT")
(cons 100 "AcDbEntity")
(cons 100 "AcDbMText")
(cons 10 punto)
(cons 1 texto2)
(cons 40 h)))
(setq i (+ i 1))
)
(prin1)
)
Valora esta pregunta
0