Controlar selección de puntos en pantalla
2 participantes
Página 1 de 1.
Controlar selección de puntos en pantalla
Hola como están.
Me podrían ayudar a solucionar esto.
Estoy tratando de seleccionar cuatro puntos en pantalla, p1 p2 p3 p4
Estoy tratando de hacerlo de la siguiente manera.
Que quiero hacer.
Seleccione p1 - no hay problema
Seleccione p2 - si p2 es igual que p1, vuelva a solicitar p2 y coloque el texto de que el punto esta duplicado, si doy enter deje de correr el programa
Seleccione p3 - si p3 es igual que p1 o igual que p2, vuelva a solicitar p3 y coloque el texto de que el punto esta duplicado, si doy enter deje de correr el programa
Seleccione p4 - si p4 es igual que p1, o igual que p2 o igual que p3, vuelva a solicitar p4 y coloque el texto de que el punto esta duplicado, pero si doy enter quiero que p4 sea igual que p3
No se que estoy haciendo mal o si hay alguna manera mejor de hacerlo.
Espero me hayan entendido y de antemano muchas gracias.
Saludos.
Me podrían ayudar a solucionar esto.
Estoy tratando de seleccionar cuatro puntos en pantalla, p1 p2 p3 p4
Estoy tratando de hacerlo de la siguiente manera.
- Código:
(setq p1 (getpoint "\nSeleccione p1: "))
(while (null p2)
(setq p2 (getpoint p1 "\nSeleccione p2: "))
(cond ((equal p1 p2) (princ "Punto duplicado.") (setq p2 nil))))
(while (null p3)
(setq p3 (getpoint p1 "\nSeleccione p3: "))
(cond ((or (equal p3 p1) (equal p3 p2)) (princ "Punto duplicado.") (setq p3 nil))))
(if (eq (setq ptemp (getpoint p1 "\nSeleccione p4: ")) nil)
(setq p4 p3)
(setq p4 ptemp))
Que quiero hacer.
Seleccione p1 - no hay problema
Seleccione p2 - si p2 es igual que p1, vuelva a solicitar p2 y coloque el texto de que el punto esta duplicado, si doy enter deje de correr el programa
Seleccione p3 - si p3 es igual que p1 o igual que p2, vuelva a solicitar p3 y coloque el texto de que el punto esta duplicado, si doy enter deje de correr el programa
Seleccione p4 - si p4 es igual que p1, o igual que p2 o igual que p3, vuelva a solicitar p4 y coloque el texto de que el punto esta duplicado, pero si doy enter quiero que p4 sea igual que p3
No se que estoy haciendo mal o si hay alguna manera mejor de hacerlo.
Espero me hayan entendido y de antemano muchas gracias.
Saludos.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Re: Controlar selección de puntos en pantalla
Se me ocurre utilizar una lista y comprobar la distancia entre puntos.
Yo he puesto cero en esta prueba pero podrías poner algo mas, por ejemplo 0,0001 o lo que quieras, dependiendo de la escala a la que estés trabajando
Un saludo
Yo he puesto cero en esta prueba pero podrías poner algo mas, por ejemplo 0,0001 o lo que quieras, dependiendo de la escala a la que estés trabajando
- Código:
(defun c:pro( / lp p lpro)
(setq lp '())
(while (and
(< (length lp) 4)
(setq p (getpoint (strcat "Punto "(itoa (+ (length lp)1)) " : ")))
)
(command "_point" p)
(if lp
(setq lpro (mapcar '(lambda(a)(distance p a)) lp))
(setq lp (cons p lp))
)
(if(member 0 lpro)
(princ (strcat (chr 10)"punto repetido ......"))
(if (not (member p lp)) (setq lp (cons p lp)))
)
)
(if (=(length lp)3) (setq lp (cons (last lp) lp)))
(princ lp)
(princ)
)
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: Controlar selección de puntos en pantalla
Hola nolo como has estado, muchas gracias por la solución.
Funciona muy bien, pero de esta forma, no puedo ver la linea elástica que se hace desde p1 hasta cada punto que se necesita seleccionar.
Que se logra colocando el p1 después de la función getpoint (setq p2 (getpoint p1 "\nSeleccione p2: "))
Y lo otro que veo es que no puedo personalizar los textos cuando voy a informar sobre la selección de cada punto.
Porque en este caso lo dejaste incluido en el while y solo aumentas su valor de punto.
Pero si quiero indicar seleccione punto 1 en el origen, pero el punto dos va a decir seleccione su ubicación arriba, no se si me entiendes.
Y como siempre muchas gracias también por tu ayuda.
Saludos.
Funciona muy bien, pero de esta forma, no puedo ver la linea elástica que se hace desde p1 hasta cada punto que se necesita seleccionar.
Que se logra colocando el p1 después de la función getpoint (setq p2 (getpoint p1 "\nSeleccione p2: "))
Y lo otro que veo es que no puedo personalizar los textos cuando voy a informar sobre la selección de cada punto.
Porque en este caso lo dejaste incluido en el while y solo aumentas su valor de punto.
Pero si quiero indicar seleccione punto 1 en el origen, pero el punto dos va a decir seleccione su ubicación arriba, no se si me entiendes.
Y como siempre muchas gracias también por tu ayuda.
Saludos.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Re: Controlar selección de puntos en pantalla
Bueno ... es solo un camino que tiene mil soluciones para lo que planteas.
Por ejemplo
Un saludo
Nota.-
Yo utilizo el chr 10 en vez de la barra invertida n porque a veces la página del foro se me come la barra. Una vez copiado, es fácil de cambiar
Por ejemplo
- Código:
(defun c:pro( / lp p lpro c)
(setq lp '())
(while (and
(< (setq c(length lp)) 4)
(cond
((zerop c)
(setq p (getpoint (strcat (chr 10)"Primer punto : ")))
)((= c 1)
(setq p (getpoint (car lp)(strcat (chr 10)"Segundo punto : ")))
)((= c 2)
(setq p (getpoint (car lp)(strcat (chr 10)"Tercer punto : ")))
)((= c 3)
(setq p (getpoint (car lp)(strcat (chr 10)"Punto final : ")))
)( t nill)
))
(command "_point" p)
(if lp
(setq lpro (mapcar '(lambda(a)(distance p a)) lp))
(setq lp (cons p lp))
)
(if(member 0 lpro)
(princ (strcat (chr 10)"punto repetido ......"))
(if (not (member p lp)) (setq lp (cons p lp)))
)
)
(if (=(length lp)3) (setq lp (cons (last lp) lp)))
(princ lp)
(princ)
)
Un saludo
Nota.-
Yo utilizo el chr 10 en vez de la barra invertida n porque a veces la página del foro se me come la barra. Una vez copiado, es fácil de cambiar
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: Controlar selección de puntos en pantalla
Hola nolo, como estas.
Mil gracias por la ayuda, todo esta muy bueno.
Un saludo.
Mil gracias por la ayuda, todo esta muy bueno.
Un saludo.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Temas similares
» Pantalla de texto estrecha
» Pantalla de texto estrecha
» Convertir cadena a lista de puntos
» Selección y dcl
» Mensaje en selección.
» Pantalla de texto estrecha
» Convertir cadena a lista de puntos
» Selección y dcl
» Mensaje en selección.
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|