Ruotare un arco in una DrawingArea: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| (12 versioni intermedie di uno stesso utente non sono mostrate) | |||
| 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 di circonferenza, disegnato in una ''DrawingArea''. <SUP>[[[#Note|<B>nota 2</b>]]]</sup> | |||
<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. | |||
<FONT Color=gray>' '''''Il fulcro | <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> | |||
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 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() | |||
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 | |||
.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> | ||
<FONT Color=red>.Translate</font>(da.W / 2, da.H / 2) | |||
.Rotate(Rad(fAngolo)) | |||
.LineWidth = 2.0 | |||
<FONT Color=gray>' ''Disegna l'arco.'' | |||
' ''Poiché 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.''</font> | |||
.Ellipse(DIAMETRO / 2, DIAMETRO / 2, -DIAMETRO, -DIAMETRO, Rad(180), Rad(180), True) | |||
.Stroke | |||
End With | |||
<FONT Color=gray>' '' | |||
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() <FONT Color=gray>' ''Con questo evento se cambia la dimensione del Form, il disegno non va perso.''</font> | |||
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: | |||
* [[Ruotare un cerchio disegnato in una DrawingArea]] | |||
[ | * [[Ruotare qualsiasi elemento da disegnare in una DrawingArea]] | ||
* [[Ruotare una immagine sul proprio asse centrale]] | |||
Versione attuale delle 18:35, 10 ago 2025
Mostriamo un possibile codice [nota 1] per ottenere la rotazione intorno al proprio asse centrale di un Arco di circonferenza, 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.
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
.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.
' Poiché 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 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: