Alguien que sepa GDI+

16/08/2004 - 18:30 por Fernando Balderrama | Informe spam
Tengo trazadas varias rectas y quiero que al hacer clic sobre una de ellas,
identifique cual de las rectas es.
He tratado de aplicar el concepto de Region asignando una a cada recta, pero
al tratarse de una recta parece que la region no se crea, es decir, no
existe el area que contiene la recta.

Alguien puede ayudarme?

Gracias


Fernando
 

Leer las respuestas

#1 Leonardo Azpurua
16/08/2004 - 19:32 | Informe spam
"Fernando Balderrama" escribió en el
mensaje news:
Tengo trazadas varias rectas y quiero que al hacer clic sobre una de


ellas,
identifique cual de las rectas es.
He tratado de aplicar el concepto de Region asignando una a cada recta,


pero
al tratarse de una recta parece que la region no se crea, es decir, no
existe el area que contiene la recta.

Alguien puede ayudarme?




Hola, Fernando:

En realidad se bien poco sobre GDI+. Pero me da la impresión de que lo de
las áreas no te debe funcionar (no me hagas mucho caso, pero creo que las
areas son rectangulares y como dos rectangulos se solapen no sabrás de qué
recta se trata).

Si almacenas las rectas como un arreglo (x1, y1, x2, y2), o (Point1,
Point2), podrías, dado un click en un punto, "preguntar" a cada recta si el
punto le pertenece.

Public Function PuntoEnRecta(candidato As PointF, Recta As RectangleF) As
Boolean
If candidato.X < Recta.Left OrElse candidato.X > Recta.Left +
Recta.Width _
OrElse candidato.Y > Recta.Top + Recta.Height OrElse Candidato.Y <
Recta.Top Then
Return False ' No esta dentro del rectangulo que encierra la recta
End If
' Calculamos la posición de Y en función de X:
' Las coordenadas verticales en GDI van al reves de las coordenadas
tradicionales
' como quiero usar una formula "tradicional" convierto las coordenadas:
Dim yx As Single, y1 As Single = Recta.Y + Recta.Height
yx = y1 + (PointF.X - Recta.Left) * Recta.Height / Recta.Width
' Ahora vuelvo a convertir yx al plano GDI+
yx = Recta.Y + Recta.Height - yx

Return (yx = candidato.Y)
End Function

no tengo cabeza (ni tiempo) para determinar si la conversión de GDI a
cartesiano y de cartesiano a GDI de verdad funciona.

Un último consejo es que determines la igualdad en la comparacion de retorno
con un margen de tolerancia, es decir (Abs(yx-candidato.Y) < Margen), si es
que pretendes reaccionar a un evento del mouse.

Despues puedes empacar tu conjunto de rectas en una clase con su array, e
implementar esta operación a nivel de la clase.

Salud!

Leonardo
[MVP Visual Basic]
leonardo<arroba>mvps<punto>org

Preguntas similares