Ruotare un cerchio disegnato in una DrawingArea: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 5: | Riga 5: | ||
Private da As DrawingArea | Private da As DrawingArea | ||
Private | Private Const DIAMETRO As Short = 200 <FONT Color=gray>' ''Memorizza il diametro del cerchio.''</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> | ||
| Riga 19: | Riga 12: | ||
With Me | With Me | ||
.W = DIAMETRO * 2 | |||
.H = .W | |||
.Center | .Center | ||
.Arrangement = Arrange.Fill | .Arrangement = Arrange.Fill | ||
| Riga 26: | Riga 21: | ||
.x = 0 | .x = 0 | ||
.Y = 0 | .Y = 0 | ||
.Background = Color.White | |||
End With | End With | ||
| Riga 35: | Riga 31: | ||
Dim f As Float[] = [0, 0.34, 0.67, 1] | 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) | ||
<FONT Color=gray>' '' | <FONT Color=gray>' ''Il fulcro (vortice) della rotazione è sempre il centro dell'area di disegno:''</font> | ||
<FONT Color=#B22222>.Translate</font>( | <FONT Color=#B22222>.Translate</font>(da.W / 2, da.H / 2) | ||
.Rotate(Rad(fAngolo)) | .Rotate(Rad(fAngolo)) | ||
.LineWidth = 2.0 | .LineWidth = 2.0 | ||
.Ellipse( | <FONT Color=gray>' ''Disegna il cerchio.'' | ||
' ''Siccome l'angolo ruota su se stesso, si dà al raggio del cerchio mezza lunghezza dell'angolo.''</font> | |||
.Ellipse(DIAMETRO / 2, DIAMETRO / 2, -DIAMETRO, -DIAMETRO, Rad(0), Rad(360), True) | |||
.Stroke | .Stroke | ||
.End | .End | ||
| Riga 67: | Riga 52: | ||
fAngolo += 1 | fAngolo += 1 | ||
If fAngolo = 361 Then fAngolo = 1 | If fAngolo = 361 Then fAngolo = 1 | ||
Case Key.Down | Case Key.Down | ||
fAngolo -= 1 | fAngolo -= 1 | ||
If fAngolo = -361 Then fAngolo = -1 | If fAngolo = -361 Then fAngolo = -1 | ||
End Select | End Select | ||
da.Refresh | |||
'''End''' | '''End''' | ||
Versione delle 20:23, 9 nov 2021
Mostriamo un possibile codice [Nota 1] per ottenere la rotazione intorno al proprio asse centrale di un cerchio, disegnato in una DrawingArea. [Nota 2]
Nell'esempio la rotazione del cerchio 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.
' 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 del cerchio.
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 "da"
.x = 0
.Y = 0
.Background = Color.White
End With
End
Public Sub da_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)
' Il fulcro (vortice) della rotazione è sempre il centro dell'area di disegno:
.Translate(da.W / 2, da.H / 2)
.Rotate(Rad(fAngolo))
.LineWidth = 2.0
' Disegna il cerchio.
' Siccome l'angolo ruota su se stesso, si dà al raggio del cerchio mezza lunghezza dell'angolo.
.Ellipse(DIAMETRO / 2, DIAMETRO / 2, -DIAMETRO, -DIAMETRO, Rad(0), Rad(360), 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_Resize() ' Con questo evento se cambia la dimensione del Form, il disegna 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 questa pagina: Ruotare qualsiasi elemento da disegnare in una DrawingArea