tincho   09-05-2022, 14:27
#1
Hola amigos.
Alguien podría decirme como hacer para que paint no dibuje una linea cuando se posiciona en otro punto.
El problema aparece entre el punto 4 y el 5 que no debería estar dibujado.
En el ejemplo intento dibujar la letra "A" mayúscula pero ya ven el resultado.
[Imagen: g0CQKjB.png]
Código:
Private afPoints As New Float[][]

Public Sub ToolButton1_Click()

  afPoints.Add([10, 100])
  afPoints.Add([60, 10])

  afPoints.Add([60, 10])
  afPoints.Add([110, 100])

  afPoints.Add([30, 50])
  afPoints.Add([80, 50])

  DrawingArea1.Refresh

End

Public Sub DrawingArea1_Draw()

  Dim z As Integer

  If afPoints.Count > 0 Then
    Paint.Brush = Paint.Color(Color.Red)
    Paint.LineWidth = 3

    For z = 0 To afPoints.Max - 1
      Paint.MoveTo(afPoints[0], afPoints[1])
      Paint.LineTo(afPoints[z + 1][0], afPoints[z + 1][1])
      Paint.Stroke
    Next
  Endif

End

1 Saludo.
cogier   09-05-2022, 15:39
#2
Echa un vistazo aquí.
tincho   09-05-2022, 16:15
#3
Gracias, se acerca a la solución general.

1 Saludo.
tercoide   10-05-2022, 01:30
#4
(09-05-2022, 14:27)tincho escribió:  
  •  
  •     For z = 0 To afPoints.Max - 1

For z = 0 to afPoints.Max- Step 2

"Es mejor saber todo de muy poco que muy poco de todo" - anonimo
tincho   10-05-2022, 01:38
#5
(10-05-2022, 01:30)tercoide escribió: For z = 0 to afPoints.Max- Step 2

Perfecto es eso nomas. Gracias.

1 Saludo.
Shell   28-06-2022, 19:39
#6
Ya sé que el mensaje tiene un mes. Pero como me gusta el dibujo con Gambas y me atrae el tema.
Lo tengo un poco oxidado, no pude evitarlo. Rolleyes

Tincho:

Creo que la línea :

Código:
Debería ser.

[code]

Se podría hacer con un único array:

[code]
Private afPoints As New Integer[]

Public Sub DrawingArea1_Draw()
 
  Dim z As Integer
 
  If afPoints.Count > 0 Then
    Paint.Brush = Paint.Color(Color.Red)
    Paint.LineWidth = 3
       
    For z = 0 To afPoints.Max - 2 Step 4           
      Paint.MoveTo(afPoints[z], afPoints[z + 1])
      Paint.LineTo(afPoints[z + 2], afPoints[z + 3])
      Paint.Stroke
    Next
      
  Endif
 
End

Public Sub ToolButton1_Click()
 
  afPoints.Insert([10, 100])
  afPoints.Insert([60, 10])
 
  afPoints.Insert([60, 10])
  afPoints.Insert([110, 100])

  afPoints.Insert([40, 50])
  afPoints.Insert([80, 50])
 
  DrawingArea1.Refresh
 
End

Aunque puede que la manera más correcta es cerrar una ruta y crear otra. Como ha demostrado Cogier en su ejemplo.
Para que el punto sea desplazado a otra coordenada, la línea horizontal.

Dibujar las letras no es lo más recomendable, cuando podemos dibujar las letras con una fuente determinada. Wink
Como ejemplo no está mal ya que refuerza el uso de bucles. El número que resta al último elemento del array y el del salto en el step es clave.
 

Se puede usar una colección por cada letra. Pero desde luego puede parecer algo raro, tanto número. Smile

Código:
Private afPoints As New Integer[]

Private cletras As Collection = [
  "A": [10, 100, 60, 10, 60, 10, 110, 100, 40, 50, 80, 50],
  "E": [10, 100, 10, 10, 10, 10, 110, 10, 10, 50, 80, 50, 10, 100, 110, 100]]


Public Sub DrawingArea1_Draw()
 
  Dim z As Integer
 
  If afPoints.Count > 0 Then
    Paint.Brush = Paint.Color(Color.Red)
    Paint.LineWidth = 3
    
    For z = 0 To afPoints.Max - 2 Step 4           
      Paint.MoveTo(afPoints[z], afPoints[z + 1])
      Paint.LineTo(afPoints[z + 2], afPoints[z + 3])
      Paint.Stroke
    Next
    
  Endif
 
End

Public Sub ToolButton1_Click()
 
  'afPoints = cletras["A"]
  afPoints = cletras["E"]
 
  DrawingArea1.Refresh
 
End

Saludos
Última modificación: 28-06-2022, 19:59 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 5 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.