Differenze tra le versioni di "Ruotare un arco in una DrawingArea"
Da Gambas-it.org - Wikipedia.
Riga 18: | Riga 18: | ||
End With | End With | ||
− | With da = New DrawingArea(Me) As " | + | With da = New DrawingArea(Me) As "DrawingArea1" |
− | |||
− | |||
.Background = Color.White | .Background = Color.White | ||
End With | End With | ||
Riga 26: | Riga 24: | ||
'''End''' | '''End''' | ||
− | '''Public''' Sub | + | '''Public''' Sub DrawingArea1_Draw() |
Dim c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red] | Dim c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red] |
Versione delle 21:40, 3 gen 2022
Mostriamo un possibile codice [Nota 1] per ottenere la rotazione intorno al proprio asse centrale di un arco, 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. 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() Dim c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red] Dim f As Float[] = [0, 0.34, 0.67, 1] 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. ' Siccome 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: