Differenze tra le versioni di "Ruotare un cerchio disegnato in una DrawingArea"
Da Gambas-it.org - Wikipedia.
(16 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Mostriamo un possibile codice [[# | + | Mostriamo un possibile codice <SUP>[[[#Note|nota 1]]]</sup> per ottenere la rotazione <SPAN Style="text-decoration:underline">intorno al proprio asse centrale</span> di un cerchio, disegnato in una ''DrawingArea''. <SUP>[[[#Note|<B>nota 2</b>]]]</sup> |
<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 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 | ||
− | Private | + | 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 c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red] | |
− | Private fAngolo As Float | + | Private f As Float[] = [0, 0.34, 0.67, 1] |
− | Private | ||
− | |||
− | |||
− | Private | ||
− | + | Public Sub Form_Open() | |
− | Me. | + | 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 With | ||
− | + | End | |
− | + | ||
− | + | Public Sub DrawingArea1_Draw() | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
With Paint | With Paint | ||
+ | .Arc(da.W / 2, da.H / 2, 2, Rad(0), Rad(360), False) | ||
+ | .Fill | ||
.Brush = .LinearGradient(0, 20, 15, 0, c, f) | .Brush = .LinearGradient(0, 20, 15, 0, c, f) | ||
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Imposta il fulcro/centro della rotazione - ad esempio -al centro dell'area di disegno:''</font> |
− | .Translate( | + | <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à alle coordinate del cerchio la metà della dimensione del suo diametro.'' | ||
+ | ' ''Non si devono modificare i valori né i segni dei primi quattro argomenti qui riportati.''</font> | ||
+ | .Ellipse(DIAMETRO / 2, DIAMETRO / 2, -DIAMETRO, -DIAMETRO, Rad(0), Rad(360), False) | ||
.Stroke | .Stroke | ||
.End | .End | ||
End With | End With | ||
− | + | End | |
+ | |||
− | + | Public Sub Form_KeyPress() | |
− | |||
Select Case Key.Code | Select Case Key.Code | ||
Riga 68: | Riga 54: | ||
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 | |
+ | |||
+ | |||
+ | 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() <FONT Color=gray>' ''Con questo evento se cambia la dimensione del Form, il disegno non va perso.''</font> | ||
da.Refresh | 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'' . | [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: | ||
+ | * [[Ruotare qualsiasi elemento da disegnare in una DrawingArea]] | ||
+ | * [[Ruotare una immagine sul proprio asse centrale]] |
Versione attuale delle 04:55, 27 giu 2024
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 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 del cerchio. 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 .Arc(da.W / 2, da.H / 2, 2, Rad(0), Rad(360), False) .Fill .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 il cerchio. ' Siccome l'angolo ruota su se stesso, si dà alle coordinate del cerchio 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(0), Rad(360), False) .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: