Differenze tra le versioni di "Ruotare un arco in una DrawingArea"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
Mostriamo un possibile codice <SUP>&#091;[[#Note|Nota 1]]&#093;</sup> per ottenere la rotazione <SPAN Style="text-decoration:underline">intorno al proprio asse centrale</span> di un arco, disegnato in una ''DrawingArea''. <SUP>&#091;[[#Note|<B>Nota 2</b>]]&#093;</sup>
+
Mostriamo un possibile codice <SUP>&#091;[[#Note|nota 1]]&#093;</sup> per ottenere la rotazione <SPAN Style="text-decoration:underline">intorno al proprio asse centrale</span> di un Arco di circonferenza, disegnato in una ''DrawingArea''. <SUP>&#091;[[#Note|<B>Nota 2</b>]]&#093;</sup>
<BR>Nell'esempio la rotazione dell'arco potrà essere notata attraverso visualizzazione della rotazione del suo raggio e soprattutto mediante la visualizzazione della colorazione della sua circonferenza.
+
<BR>Nell'esempio la rotazione dell'Arco potrà essere notata attraverso visualizzazione della rotazione del suo raggio e soprattutto mediante la visualizzazione della colorazione della sua circonferenza.
 
<BR>La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera oppure ruotando la rotellina del mouse.
 
<BR>La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera oppure ruotando la rotellina del mouse.
 
  <FONT Color=gray>' '''''Il fulcro del Metodo ".Translate()" agisce da vortice, da centro di rotazione intorno a una ipotetica circonferenza'''''</font>
 
  <FONT Color=gray>' '''''Il fulcro del Metodo ".Translate()" agisce da vortice, da centro di rotazione intorno a una ipotetica circonferenza'''''</font>
Riga 7: Riga 7:
 
  Private Const DIAMETRO As Short = 200  <FONT Color=gray>' ''Memorizza il diametro dell'arco.''</font>
 
  Private Const DIAMETRO As Short = 200  <FONT Color=gray>' ''Memorizza il diametro dell'arco.''</font>
 
  Private fAngolo As Float                <FONT Color=gray>' ''Memorizza i gradi dell'angolo.''</font>
 
  Private fAngolo As Float                <FONT Color=gray>' ''Memorizza i gradi dell'angolo.''</font>
 +
Private c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red]
 +
Private f As Float[] = [0, 0.34, 0.67, 1]
 
   
 
   
 
   
 
   
Riga 26: Riga 28:
 
  '''Public''' Sub DrawingArea1_Draw()
 
  '''Public''' Sub DrawingArea1_Draw()
 
   
 
   
  Dim c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red]
 
  Dim f As Float[] = [0, 0.34, 0.67, 1]
 
 
 
 
   With Paint
 
   With Paint
 
     .Brush = .LinearGradient(0, 20, 15, 0, c, f)
 
     .Brush = .LinearGradient(0, 20, 15, 0, c, f)
Riga 36: Riga 35:
 
     .LineWidth = 2.0
 
     .LineWidth = 2.0
 
  <FONT Color=gray>' ''Disegna l'arco.''
 
  <FONT Color=gray>' ''Disegna l'arco.''
  ' ''Siccome l'angolo ruota su se stesso, si dà alle coordinate dell'arco la metà della dimensione del suo diametro.''
+
  ' ''Poiché l'angolo ruota su se stesso, si dà alle coordinate dell'arco la metà della dimensione del suo diametro.''
 
  ' ''Non si devono modificare i valori né i segni dei primi quattro argomenti qui riportati.''</font>
 
  ' ''Non si devono modificare i valori né i segni dei primi quattro argomenti qui riportati.''</font>
 
     .Ellipse(DIAMETRO / 2, DIAMETRO / 2, -DIAMETRO, -DIAMETRO, Rad(180), Rad(180), True)
 
     .Ellipse(DIAMETRO / 2, DIAMETRO / 2, -DIAMETRO, -DIAMETRO, Rad(180), Rad(180), True)

Versione delle 08:24, 15 giu 2023

Mostriamo un possibile codice [nota 1] per ottenere la rotazione intorno al proprio asse centrale di un Arco di circonferenza, disegnato in una DrawingArea. [Nota 2]
Nell'esempio la rotazione dell'Arco potrà essere notata attraverso visualizzazione della rotazione del suo raggio e soprattutto mediante la visualizzazione della colorazione della sua circonferenza.
La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera oppure ruotando la rotellina del mouse.

' Il fulcro del Metodo ".Translate()" agisce da vortice, da centro di rotazione intorno a una ipotetica circonferenza

Private da As DrawingArea
Private Const DIAMETRO As Short = 200   ' Memorizza il diametro dell'arco.
Private fAngolo As Float                ' Memorizza i gradi dell'angolo.
Private c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red]
Private f As Float[] = [0, 0.34, 0.67, 1]


Public Sub Form_Open()  
 
 With Me
   .W = DIAMETRO * 2
   .H = .W
   .Center
   .Arrangement = Arrange.Fill
 End With  

 With da  = New DrawingArea(Me) As "DrawingArea1"
   .Background = Color.White
 End With
 
End
 
Public Sub DrawingArea1_Draw()

 With Paint
   .Brush = .LinearGradient(0, 20, 15, 0, c, f)
' Imposta il fulcro/centro della rotazione - ad esempio -al centro dell'area di disegno:
   .Translate(da.W / 2, da.H / 2)
   .Rotate(Rad(fAngolo))   
   .LineWidth = 2.0
' Disegna l'arco.
' Poiché l'angolo ruota su se stesso, si dà alle coordinate dell'arco la metà della dimensione del suo diametro.
' Non si devono modificare i valori né i segni dei primi quattro argomenti qui riportati.
   .Ellipse(DIAMETRO / 2, DIAMETRO / 2, -DIAMETRO, -DIAMETRO, Rad(180), Rad(180), True)
   .Stroke 
   .End
 End With     
    
End
 
Public Sub Form_KeyPress()
  
 Select Case Key.Code
   Case Key.Up
     fAngolo += 1
     If fAngolo = 361 Then fAngolo = 1
   Case Key.Down
     fAngolo -= 1
     If fAngolo = -361 Then fAngolo = -1
 End Select
 
 da.Refresh
  
End

Public Sub Form_MouseWheel()

 fAngolo += Mouse.Delta
 Select Case fAngolo
   Case 361
     fAngolo = 1
   Case -361
     fAngolo = -1
 End Select

 da.Refresh

End

Public Sub Form_Resize()   ' Con questo evento se cambia la dimensione del Form, il disegno non va perso.
  
 da.Refresh
  
End



Note

[1] Il codice, presente in questa pagina, è tratto - con modifiche ed integrazioni - da un analogo codice suggerito dal membro Gianluigi del forum di gambas-it.org .

[2] Vedere anche queste pagine: