Foros del Web » Programando para Internet » ASPX (.net) »

Linea de Bresenham en picturebox

Estas en el tema de Linea de Bresenham en picturebox en el foro de ASPX (.net) en Foros del Web. Buenas, Necesito dibujar una recta en un picturebox por el algoritmo de Bresenham de la recta, pero no se como solucionar la definición de las ...
  #1 (permalink)  
Antiguo 09/12/2010, 11:11
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 15 años, 9 meses
Puntos: 0
Linea de Bresenham en picturebox

Buenas,

Necesito dibujar una recta en un picturebox por el algoritmo de Bresenham de la recta, pero no se como solucionar la definición de las coordenadas para que lo dibuje bien ...


Código ASP:
Ver original
  1. Dim lx(1), ly(1) As Integer 'Coordenadas de la linea linea

en el mouseDown

Código ASP:
Ver original
  1. Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
  2.         If CheckBox2.Checked Then 'Linea, guarda primer punto de la linea
  3.             If Not clicked Then
  4.                 TextBox3.Text = ejex.ToString
  5.                 TextBox4.Text = ejey.ToString
  6.                 lx(0) = e.X
  7.                 ly(0) = e.Y
  8.                 clicked = True
  9.             End If
  10.         End If
  11.     End Sub

y en el mouseUp

Código ASP:
Ver original
  1. Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
  2.         Dim penMouseUP As Pen = Pens.Blue
  3.         If CheckBox2.Checked Then 'Linea, guarda primer punto de la linea  
  4.             TextBox5.Text = ejex.ToString
  5.             TextBox6.Text = ejey.ToString
  6.             lx(1) = e.X
  7.             ly(1) = e.Y
  8.             Bresenham(lx(0), lx(1), ly(0), ly(1), New PlotFunction(AddressOf plot))
  9.             PictureBox1.CreateGraphics.DrawLine(penMouseUP, lx(0), ly(0), lx(1), ly(1))
  10.             clicked = False
  11.         End If
  12.     End Sub

Algoritmo de bresenham...

Código ASP:
Ver original
  1. Sub Bresenham(ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long, ByVal plot As PlotFunction)
  2.         Dim steep As Boolean = (Math.Abs(y2 - y1) > Math.Abs(x2 - x1))
  3.         If (steep) Then
  4.             Swap(x1, y1)
  5.             Swap(x2, y2)
  6.         End If
  7.  
  8.         If (x1 > x2) Then
  9.             Swap(x1, x2)
  10.             Swap(y1, y2)
  11.         End If
  12.  
  13.         Dim deltaX As Long = x2 - x1
  14.         Dim deltaY As Long = y2 - y1
  15.         Dim err As Long = deltaX / 2
  16.         Dim ystep As Long
  17.         Dim y As Long = y1
  18.  
  19.         If (y1 < y2) Then
  20.             ystep = 1
  21.         Else
  22.             ystep = -1
  23.         End If
  24.  
  25.         For x As Long = x1 To x2
  26.             Dim result As Boolean
  27.             If (steep) Then result = plot(y, x) Else result = plot(x, y)
  28.             If (Not result) Then Exit Sub
  29.             err = err - deltaY
  30.             If (err < 0) Then
  31.                 y = y + ystep
  32.                 err = err + deltaX
  33.             End If
  34.         Next
  35.     End Sub
  36.  
  37.     Function plot(ByVal x As Long, ByVal y As Long) As Boolean
  38.         pic.CreateGraphics.FillEllipse(Brushes.Green, x, y, 2, 2)
  39.         Return True 'This just prints each co-ord
  40.     End Function

Si alguien puede salvarme de meterle ( de forma oculta ) un

Código ASP:
Ver original
  1. PictureBox1.CreateGraphics.DrawLine(penMouseUP, lx(0), ly(0), lx(1), ly(1))

Que este si me lo hace bien ......................

Saludos y gracias

Etiquetas: linea, picturebox, aspx
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:23.