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 2: | Riga 2: | ||
<BR>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. | <BR>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. | ||
<BR>La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera. | <BR>La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera. | ||
<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 53: | Riga 52: | ||
.Translate(fSopra1, fSopra2) | .Translate(fSopra1, fSopra2) | ||
.Rotate(Rad(fAngolo)) | .Rotate(Rad(fAngolo)) | ||
.Translate(fSotto1, fSotto2) | <FONT Color=#B22222>.Translate</font>(fSotto1, fSotto2) | ||
.LineWidth = 2.0 | .LineWidth = 2.0 | ||
.Ellipse(x, y, iLarg, iAlt, Rad(360), Rad(360), True) | .Ellipse(x, y, iLarg, iAlt, Rad(360), Rad(360), True) | ||
Versione delle 19:06, 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 x As Float ' Memorizza l'inizio del cerchio.
Private y As Float ' Idem
Private iAlt As Integer ' Memorizza l'altezza del cerchio.
Private iLarg As Integer ' Memorizza la larghezza del cerchio.
Private fAngolo As Float ' Memorizza i gradi dell'angolo.
Private fSopra1 As Float ' Memorizza la posizione di partenza orizzontale della rotazione.
Private fSopra2 As Float ' Memorizza la posizione di partenza verticale della rotazione.
Private fSotto1 As Float ' Memorizza la posizione di arrivo orizzontale della rotazione.
Private fSotto2 As Float ' Memorizza la posizione di arrivo verticale della rotazione.
Public Sub Form_Open()
With Me
.Center
.Arrangement = Arrange.Fill
End With
With da = New DrawingArea(Me) As "da"
.x = 0
.Y = 0
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]
iLarg = 200
iAlt = 200
' L'angolo di rotazione è posto al centro dell'area di disegno, così come le misure di partenza e di arrivo. Siccome l'angolo ruota su se stesso, si dà al raggio del cerchio mezza lunghezza dell'angolo.
x = CFloat((da.W / 2) - (iLarg / 2))
y = CFloat((da.H / 2) - (iAlt / 2))
' In questa dimostrazione il fulcro (vortice) è sempre il centro dell'area di disegno:
fSopra1 = CFloat((da.W / 2))
fSopra2 = CFloat(da.H / 2)
fSotto1 = CFloat(- (da.W / 2))
fSotto2 = CFloat(- (da.H / 2))
With Paint
.Brush = .LinearGradient(0, 20, 15, 0, c, f)
' Vortice:
.Translate(fSopra1, fSopra2)
.Rotate(Rad(fAngolo))
.Translate(fSotto1, fSotto2)
.LineWidth = 2.0
.Ellipse(x, y, iLarg, iAlt, Rad(360), 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
da.Refresh
Case Key.Down
fAngolo -= 1
If fAngolo = -361 Then fAngolo = -1
da.Refresh
End Select
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