Cambio del cursor al pasar por una linea dibujada con DrawLine

29/08/2006 - 13:07 por Nurilla | Informe spam
Hola, que tal?
Quiero que se cambie el cursor al pasar por una linea que he dibujado con
DrawLine del objecto Graphics, sé que hay una manera y es con la clase
GraphicsPath , pero me da problemas por otros lados, entonces lo que quiero
es que el ratón me detecte que estoy sobre una linea ( en cualquier parte de
la linea), ¿alguien sabe como puedo hacerlo sin GraphicsPath?

Muchas gracias

Preguntas similare

Leer las respuestas

#6 Jorge Serrano [MVP VB]
30/08/2006 - 11:33 | Informe spam
Estoy con Eduardo.

A mí también me interesa echarle un ojo, así que sino es mucha molestia,
¿podrías ponerlo aquí?.

Seguramente aprendamos algo nuevo o podamos compartir nuestros puntos de
vista. :-)

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Blog de Jorge Serrano
http://geeks.ms/blogs/jorge/default.aspx


"Eduardo Alvarado Meza" wrote:

Pues pasamelo para ver que resulta mas eficiente tal vez ese codigo esta
mejorado.

"Nurilla" escribió en el mensaje
news:
> Hola Eduardo, gracias por la respuesta, pero ya he encontrado el código
> que
> da todas las coordenadas de una linea, si a alguien le interesa que me lo
> pida.
>
> Muchas gracias.
>
> "Eduardo Alvarado Meza" escribió:
>
>> Ya Jorge te dijo como era, facilitarte la ecuación es otro rollo pero
>> aqui
>> esta como se calcula la ecuacion de una recta con dos puntos. Ya sabiendo
>> eso y los limites de las rectas dado por el punto inicial y final todo te
>> sera sencillo.
>>
>> http://www.sectormatematica.cl/cont...puntos.htm
>>
>> Como nota ten cuidado con los decimales, la ecuacion es exacta, recuerda
>> que
>> en la pantalla las coordenadas son enteras por lo que deberias tener un
>> margen de error.
>>
>>
>>



Respuesta Responder a este mensaje
#7 Nurilla
30/08/2006 - 13:40 | Informe spam
Este es el código que encontré en una web:

Public Overloads Function GetLinePoints( _
ByVal x1 As Integer, _
ByVal y1 As Integer, _
ByVal x2 As Integer, _
ByVal y2 As Integer) As Point()
'this function returns the points
'(pixels) in a line, and is a
'direct port of code written by
'Tom Ootjers to calculate all points in a line
'based on Bresenham algorithm, which
'I think is the algorithm used in terrarium.

' The difference between the x's
Dim deltax As Integer = Math.Abs(x2 - x1)
' The difference between the y's
Dim deltay As Integer = Math.Abs(y2 - y1)
' Start x off at the first pixel
Dim x As Integer = x1
' Start y off at the first pixel
Dim y As Integer = y1
Dim xinc1 As Integer
Dim xinc2 As Integer
Dim yinc1 As Integer
Dim yinc2 As Integer
Dim den As Integer
Dim num As Integer
Dim numadd As Integer
Dim numpixels As Integer
Dim retPixel() As Point

If (x2 >= x1) Then
' The x-values are increasing
xinc1 = 1
xinc2 = 1
Else
' The x-values are decreasing
xinc1 = -1
xinc2 = -1
End If

If (y2 >= y1) Then
' The y-values are increasing
yinc1 = 1
yinc2 = 1
Else
' The y-values are decreasing
yinc1 = -1
yinc2 = -1
End If


If (deltax >= deltay) Then
' There is at least one x-value for every y-value
' Don't change the x when numerator >= denominator
xinc1 = 0
' Don't change the y for every iteration
yinc2 = 0
den = deltax
num = deltax / 2
numadd = deltay
' There are more x-values than y-values
numpixels = deltax
Else
' There is at least one y-value for every x-value
' Don't change the x for every iteration
xinc2 = 0
' Don't change the y when numerator >= denominator
yinc1 = 0
den = deltay
num = deltay / 2
numadd = deltax
' There are more y-values than x-values
numpixels = deltay
End If

Dim curpixel As Integer = 0
ReDim retPixel(numpixels)
Do While curpixel <= numpixels
' store the current pixel
retPixel(curpixel).X = x
retPixel(curpixel).Y = y
' Increase the numerator by the top of the fraction
num += numadd
' Check if numerator >= denominator
If (num >= den) Then
' Calculate the new numerator value
num -= den
' Change the x as appropriate
x += xinc1
' Change the y as appropriate
y += yinc1
End If
' Change the x as appropriate
x += xinc2
' Change the y as appropriate
y += yinc2
curpixel += 1
Loop
Return retPixel
End Function

Espero que os sirva.

Saludos



"Jorge Serrano [MVP VB]" escribió:

Estoy con Eduardo.

A mí también me interesa echarle un ojo, así que sino es mucha molestia,
¿podrías ponerlo aquí?.

Seguramente aprendamos algo nuevo o podamos compartir nuestros puntos de
vista. :-)

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Blog de Jorge Serrano
http://geeks.ms/blogs/jorge/default.aspx


"Eduardo Alvarado Meza" wrote:

> Pues pasamelo para ver que resulta mas eficiente tal vez ese codigo esta
> mejorado.
>
> "Nurilla" escribió en el mensaje
> news:
> > Hola Eduardo, gracias por la respuesta, pero ya he encontrado el código
> > que
> > da todas las coordenadas de una linea, si a alguien le interesa que me lo
> > pida.
> >
> > Muchas gracias.
> >
> > "Eduardo Alvarado Meza" escribió:
> >
> >> Ya Jorge te dijo como era, facilitarte la ecuación es otro rollo pero
> >> aqui
> >> esta como se calcula la ecuacion de una recta con dos puntos. Ya sabiendo
> >> eso y los limites de las rectas dado por el punto inicial y final todo te
> >> sera sencillo.
> >>
> >> http://www.sectormatematica.cl/cont...puntos.htm
> >>
> >> Como nota ten cuidado con los decimales, la ecuacion es exacta, recuerda
> >> que
> >> en la pantalla las coordenadas son enteras por lo que deberias tener un
> >> margen de error.
> >>
> >>
> >>
>
>
>
Respuesta Responder a este mensaje
#8 Eduardo Alvarado Meza
30/08/2006 - 19:56 | Informe spam
Pues a simple vista se mira bien, es sencillo y es interesante como calcula
la cantidad de puntos, sin embargo aun me queda la duda si es mas eficiente
buscar en un arreglo que solamente verificar que si pertenece a la recta con
la ecuacion.

Sin embargo habria que ver si los puntos que te arroja la funcion coinciden
con exactitud con los que pinta el sistema en la pantalla, pero a mi parecer
tiene altas posibilidades, habria que probarlo con el Paint.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida