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>[[[#Note|Nota 1]]]</sup> per ottenere la rotazione <SPAN Style="text-decoration:underline">intorno al proprio asse centrale</span> di un arco | + | 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 arco, disegnato in una ''DrawingArea''. <SUP>[[[#Note|<B>Nota 2</b>]]]</sup> |
− | <BR>La rotazione viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera. | + | <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. | |
− | <FONT Color=gray>' '''''Il fulcro | + | <FONT Color=gray>' '''''Il fulcro del Metodo ".Translate()" agisce da vortice, da centro di rotazione intorno a una ipotetica circonferenza'''''</font> |
− | Private | + | Private da As DrawingArea |
− | Private | + | 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 | ||
− | |||
− | |||
− | |||
− | |||
'''Public''' Sub Form_Open() | '''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''' | '''End''' | ||
− | + | ||
− | |||
'''Public''' Sub da_Draw() | '''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) | |
− | + | <FONT Color=gray>' ''Il fulcro (vortice) della rotazione è sempre il centro dell'area di disegno:''</font> | |
− | + | <FONT Color=#B22222>.Translate</font>(da.W / 2, da.H / 2) | |
− | <FONT Color=gray>' '' | + | .Rotate(Rad(fAngolo)) |
− | + | .LineWidth = 2.0 | |
− | + | <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:''</font> | |
− | + | .Ellipse(DIAMETRO / 2, DIAMETRO / 2, -DIAMETRO, -DIAMETRO, Rad(180), Rad(180), True) | |
− | + | .Stroke | |
− | + | .End | |
− | <FONT Color=gray>' '' | + | End With |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
'''End''' | '''End''' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
'''Public''' Sub Form_KeyPress() | '''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''' | '''End''' | ||
− | |||
'''Public''' Sub Form_Resize() <FONT Color=gray>' ''Con questo evento se cambia la dimensione del Form, il disegna non va perso.''</font> | '''Public''' Sub Form_Resize() <FONT Color=gray>' ''Con questo evento se cambia la dimensione del Form, il disegna non va perso.''</font> | ||
− | + | da.Refresh | |
'''End''' | '''End''' | ||
Riga 86: | Riga 71: | ||
---- | ---- | ||
=Note= | =Note= | ||
− | [1] Il codice, presente in questa pagina, è tratto - con modifiche ed integrazioni - da analogo codice suggerito dal membro ''Gianluigi'' del forum di '' | + | [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 | + | [2] Vedere anche queste pagine: |
+ | * [[Ruotare_un_cerchio_disegnato_in_una_DrawingArea|Ruotare un cerchio disegnato in una DrawingArea]] | ||
+ | * [[Ruotare_qualsiasi_elemento_da_disegnare_in_una_DrawingArea|Ruotare qualsiasi elemento da disegnare in una DrawingArea]] | ||
+ | * [[Ruotare_una_immagine_sul_proprio_asse_centrale|Ruotare una immagine sul proprio asse centrale]] |
Versione delle 20:24, 9 nov 2021
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.
' 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 "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 l'arco. ' Siccome l'angolo ruota su se stesso, si dà alle coordinate dell'arco la metà della dimensione del suo diametro: .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_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 queste pagine: