Differenze tra le versioni di "Disegnare in una DrawingArea un poligono"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
Per disegnare in una ''DrawingArea'' un qualunque poligono <B><SUP>&#091;[[#Note|Nota 1]]&#093;</sup></b>, è necessario utilizzare il Metodo ".Polygon()" della Classe "Paint".
+
Per disegnare in una ''DrawingArea'' un qualunque poligono <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>, è necessario utilizzare il Metodo ".Polygon()" della Classe "Paint".
  
 
Questo Metodo richiede che siano individuati nel suo unico parametro di tipo vettoriale tutti i punti (x,y rispetto all'angolo in alto a sinistra del Contenitore ''Drawingrea'') relativi ai vertici del poligono da disegnare.
 
Questo Metodo richiede che siano individuati nel suo unico parametro di tipo vettoriale tutti i punti (x,y rispetto all'angolo in alto a sinistra del Contenitore ''Drawingrea'') relativi ai vertici del poligono da disegnare.
  
 
Mostriamo un esempio, nel quale sarà disegnato un "Trapezio scaleno".
 
Mostriamo un esempio, nel quale sarà disegnato un "Trapezio scaleno".
  Private drawingarea1 As DrawingArea
+
  Private DrawingArea1 As DrawingArea
 
   
 
   
 
   
 
   
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
+
 
   With Me
 
   With Me
     .Center
+
     .W = Screen.AvailableWidth
     .W = 400
+
     .H = Screen.AvailableHeight
     .H = 400
+
     .Arrangement = Arrange.Fill
 
   End With
 
   End With
 
+
   With drawingarea1 = New DrawingArea(Me) As "DrArea"
+
   With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
 
     .X = 0
 
     .X = 0
 
     .Y = 0
 
     .Y = 0
    .W = 300
 
    .H = 300
 
 
     .Background = Color.Lighter(Color.Yellow)
 
     .Background = Color.Lighter(Color.Yellow)
 
   End With
 
   End With
 
+
 
  '''End'''
 
  '''End'''
 
   
 
   
  '''Public''' Sub DrArea_Draw()
+
  '''Public''' Sub DrawingArea1_Draw()
 
+
 
   With Paint
 
   With Paint
 
     .Brush = .Color(Color.Red)
 
     .Brush = .Color(Color.Red)
 +
    .LineWidth = 2.0
 
     .Polygon([80.0, 50.0, 200.0, 50.0, 250.0, 100.0, 50.0, 100.0])
 
     .Polygon([80.0, 50.0, 200.0, 50.0, 250.0, 100.0, 50.0, 100.0])
  <FONT Color=gray>' ''Se si vuole soltanto visualizzare la traccia del perimetro del poligono:''</font>  
+
  <FONT Color=gray>' ''Se si vuole soltanto visualizzare la traccia del perimetro del poligono:''</font>
 
     .Stroke
 
     .Stroke
 
  <FONT Color=gray>' ''Se, invece, si intende ottenere un poligono internamente colorato:''
 
  <FONT Color=gray>' ''Se, invece, si intende ottenere un poligono internamente colorato:''
Riga 36: Riga 35:
 
     .End
 
     .End
 
   End With
 
   End With
    
+
 +
'''End'''
 +
 
 +
===Disegnare un qualunque poligono con il mouse===
 +
In quest'altro caso si costruirà un qualunque poligono, impostando innanzitutto nella Costante "LATI" il numero di lati che lo costituiscono.
 +
<BR>I vertici dei lati saranno impostati cliccando con il puntatore del mouse sulla superficie della "DrawingArea".
 +
Private DrawingArea1 As DrawingArea
 +
Private LATI As Byte = <FONT Color=#B22222><B>5</b></font>   <FONT Color=gray>' ''In questo caso si disegnerà un poligono con 5 lati''</font>
 +
Private vertici As New Short[]
 +
 +
 +
'''Public''' Sub Form_Open()
 +
 +
  With Me
 +
    .W = Screen.AvailableWidth
 +
    .H = Screen.AvailableHeight
 +
    .Arrangement = Arrange.Fill
 +
  End With
 +
 +
  With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
 +
    .X = 0
 +
    .Y = 0
 +
    .Background = Color.Lighter(Color.Yellow)
 +
  End With
 +
 +
'''End'''
 +
 +
'''Public''' Sub DrawingArea1_MouseUp()
 +
 +
<FONT Color=gray>' ''Consente di disegnare un nuovo poligono:''</font>
 +
  If vertix.Count == LATI * 2 Then vertix = New Short[]
 +
 +
  vertici.Push(Mouse.X)
 +
  vertici.Push(Mouse.Y)
 +
 +
  DrawingArea1.Refresh
 +
 +
'''End'''
 +
 +
'''Public''' Sub DrawingArea1_Draw()
 +
 +
  If vertici.Count == 0 Then Return
 +
 +
  Dim b As Byte
 +
 +
  With Paint
 +
<FONT Color=gray>' ''Disegna un punto per ciascun clic con il puntatore del mouse:''</font>
 +
    For b = 0 To vertix.Max Step 2
 +
    .Arc(vertix[b], vertix[b + 1], 1, Rad(0), Rad(360))
 +
    .Fill
 +
    Next
 +
    If vertix.Count == LATI * 2 Then
 +
      .Polygon(vertix)
 +
      .Stroke          <FONT Color=gray>' ''Se si preferisce un poligono "pieno", usare il Metodo ".Fill"''</font>
 +
    Endif
 +
  .End
 +
  End With
 +
 
  '''End'''
 
  '''End'''
  
Riga 42: Riga 98:
  
 
=Note=
 
=Note=
[1] Ovviamente, per ottenere il disegno di un Quadrato o di un Rettangolo, si userà il Metodo "Paint.DrawRect()" oppure "Paint.Rectangle()".
+
[1] Ovviamente, per ottenere il disegno di un Quadrato o di un Rettangolo, si potrà usare il Metodo "Paint.DrawRect()" oppure "Paint.Rectangle()".

Versione delle 20:37, 15 dic 2021

Per disegnare in una DrawingArea un qualunque poligono [Nota 1], è necessario utilizzare il Metodo ".Polygon()" della Classe "Paint".

Questo Metodo richiede che siano individuati nel suo unico parametro di tipo vettoriale tutti i punti (x,y rispetto all'angolo in alto a sinistra del Contenitore Drawingrea) relativi ai vertici del poligono da disegnare.

Mostriamo un esempio, nel quale sarà disegnato un "Trapezio scaleno".

Private DrawingArea1 As DrawingArea


Public Sub Form_Open()

 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With

 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
   .X = 0
   .Y = 0
   .Background = Color.Lighter(Color.Yellow)
 End With

End

Public Sub DrawingArea1_Draw()

 With Paint
   .Brush = .Color(Color.Red)
   .LineWidth = 2.0
   .Polygon([80.0, 50.0, 200.0, 50.0, 250.0, 100.0, 50.0, 100.0])
' Se si vuole soltanto visualizzare la traccia del perimetro del poligono:
   .Stroke
' Se, invece, si intende ottenere un poligono internamente colorato:
'  .Fill 
   .End
 End With

End

Disegnare un qualunque poligono con il mouse

In quest'altro caso si costruirà un qualunque poligono, impostando innanzitutto nella Costante "LATI" il numero di lati che lo costituiscono.
I vertici dei lati saranno impostati cliccando con il puntatore del mouse sulla superficie della "DrawingArea".

Private DrawingArea1 As DrawingArea
Private LATI As Byte = 5   ' In questo caso si disegnerà un poligono con 5 lati
Private vertici As New Short[]


Public Sub Form_Open()

 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With

 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
   .X = 0
   .Y = 0
   .Background = Color.Lighter(Color.Yellow)
 End With

End

Public Sub DrawingArea1_MouseUp()

' Consente di disegnare un nuovo poligono:
 If vertix.Count == LATI * 2 Then vertix = New Short[]

 vertici.Push(Mouse.X)
 vertici.Push(Mouse.Y)

 DrawingArea1.Refresh

End

Public Sub DrawingArea1_Draw()

 If vertici.Count == 0 Then Return

 Dim b As Byte

 With Paint
' Disegna un punto per ciascun clic con il puntatore del mouse:
   For b = 0 To vertix.Max Step 2
    .Arc(vertix[b], vertix[b + 1], 1, Rad(0), Rad(360))
    .Fill
   Next 
   If vertix.Count == LATI * 2 Then 
     .Polygon(vertix)
     .Stroke           ' Se si preferisce un poligono "pieno", usare il Metodo ".Fill"
   Endif
  .End
 End With

End


Note

[1] Ovviamente, per ottenere il disegno di un Quadrato o di un Rettangolo, si potrà usare il Metodo "Paint.DrawRect()" oppure "Paint.Rectangle()".