Differenze tra le versioni di "Ruotare un quadrato ed un rettangolo in una DrawingArea"
(11 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Mostriamo due analoghi possibili codici <SUP>[[[#Note| | + | Mostriamo due analoghi possibili codici <SUP>[[[#Note|nota 1]]]</sup> per far ruotare su se stessi, ossia <SPAN Style="text-decoration:underline">intorno al proprio asse centrale</span>, un Quadrato ed un Rettangolo disegnati su una ''DrawingArea''. <SUP>[[[#Note|nota 2]]]</sup> |
− | <BR>In entrambi gli esempi la rotazione del | + | <BR>In entrambi gli esempi la rotazione del Quadrato e del Rettangolo viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera oppure ruotando la rotellina del mouse. |
− | ==Ruotare un | + | ==Ruotare un Quadrato sul proprio asse centrale== |
Per ottenere la rotazione sul proprio asse centrale di un quadrato disegnato in una ''DrawingArea'' è possibile adottare il seguente codice: | Per ottenere la rotazione sul proprio asse centrale di un quadrato disegnato in una ''DrawingArea'' è possibile adottare il seguente codice: | ||
<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> | ||
Private da As DrawingArea | Private da As DrawingArea | ||
− | Private Const LATO As Short = 200 <FONT Color=gray>' ''Memorizza il | + | Private Const LATO As Short = 200 <FONT Color=gray>' ''Memorizza il lato del quadrato.''</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> | ||
+ | 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 | With Me | ||
− | .W = LATO * | + | .W = LATO * 3 |
− | .H = .W | + | .H = .W * 0.6 |
.Center | .Center | ||
.Arrangement = Arrange.Fill | .Arrangement = Arrange.Fill | ||
End With | End With | ||
− | With da = New DrawingArea(Me) As " | + | With da = New DrawingArea(Me) As "DrawingArea1" |
− | |||
− | |||
.Background = Color.White | .Background = Color.White | ||
End With | End With | ||
− | + | End | |
− | |||
− | + | Public Sub DrawingArea1_Draw() | |
− | |||
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>' ''Imposta il fulcro/punto della rotazione - ad esempio - al centro dell'area di disegno:''</font> |
<FONT Color=#B22222>.Translate</font>(da.W / 2, da.H / 2) | <FONT Color=#B22222>.Translate</font>(da.W / 2, da.H / 2) | ||
.Rotate(Rad(fAngolo)) | .Rotate(Rad(fAngolo)) | ||
.LineWidth = 2.0 | .LineWidth = 2.0 | ||
<FONT Color=gray>' ''Disegna il quadrato.'' | <FONT Color=gray>' ''Disegna il quadrato.'' | ||
− | ' ''Siccome l'angolo ruota su se stesso, si dà alle coordinate del quadrato la metà della dimensione del suo lato | + | ' ''Siccome l'angolo ruota su se stesso, si dà alle coordinate del quadrato la metà della dimensione del suo lato.'' |
+ | ' ''Non si devono modificare i valori né i segni dei quattro argomenti qui riportati.''</font> | ||
.Rectangle(LATO / 2, LATO / 2, -LATO, -LATO) | .Rectangle(LATO / 2, LATO / 2, -LATO, -LATO) | ||
+ | <FONT Color=gray>' ''oppure così:'' | ||
+ | ' '''.Rectangle(-LATO / 2, -LATO / 2, LATO, LATO)'''</font> | ||
.Stroke | .Stroke | ||
.End | .End | ||
End With | End With | ||
− | + | End | |
− | + | ||
+ | Public Sub Form_KeyPress() | ||
Select Case Key.Code | Select Case Key.Code | ||
Riga 61: | Riga 63: | ||
da.Refresh | 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 | |
− | ==Ruotare un | + | ==Ruotare un Rettangolo sul proprio asse centrale== |
− | Per ottenere la rotazione sul proprio asse centrale di un | + | Per ottenere la rotazione sul proprio asse centrale di un Rettangolo disegnato in una ''DrawingArea'' è possibile adottare il seguente codice identico al precedente: |
<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 79: | Riga 97: | ||
Private Const VERTICALE As Short = 100 <FONT Color=gray>' ''Memorizza la dimensione di ciascun lato verticale.''</font> | Private Const VERTICALE As Short = 100 <FONT Color=gray>' ''Memorizza la dimensione di ciascun lato verticale.''</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> | ||
+ | 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 | With Me | ||
Riga 90: | Riga 110: | ||
End With | End With | ||
− | With da = New DrawingArea(Me) As " | + | With da = New DrawingArea(Me) As "DrawingArea1" |
− | |||
− | |||
.Background = Color.White | .Background = Color.White | ||
End With | End With | ||
− | + | End | |
− | |||
− | + | Public Sub DrawingArea1_Draw() | |
− | + | ||
− | |||
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>' ''Imposta il fulcro/punto della rotazione - ad esempio -al centro dell'area di disegno:''</font> |
<FONT Color=#B22222>.Translate</font>(da.W / 2, da.H / 2) | <FONT Color=#B22222>.Translate</font>(da.W / 2, da.H / 2) | ||
.Rotate(Rad(fAngolo)) | .Rotate(Rad(fAngolo)) | ||
.LineWidth = 2.0 | .LineWidth = 2.0 | ||
− | <FONT Color=gray>' ''Disegna il | + | <FONT Color=gray>' ''Disegna il rettangolo.'' |
− | ' ''Siccome l'angolo ruota su se stesso, si dà alle coordinate del rettangolo la metà della dimensione di ciascun suo lato:''</font> | + | ' ''Siccome l'angolo ruota su se stesso, si dà alle coordinate del rettangolo la metà della dimensione di ciascun suo lato:'' |
+ | ' ''Non si devono modificare i valori né i segni dei quattro argomenti qui riportati.''</font> | ||
.Rectangle(ORIZZONTALE / 2, VERTICALE / 2, -ORIZZONTALE, -VERTICALE) | .Rectangle(ORIZZONTALE / 2, VERTICALE / 2, -ORIZZONTALE, -VERTICALE) | ||
+ | <FONT Color=gray>' ''oppure così:'' | ||
+ | ' '''.Rectangle(-ORIZZONTALE / 2, -VERTICALE / 2, ORIZZONTALE, VERTICALE)'''</font> | ||
.Stroke | .Stroke | ||
.End | .End | ||
End With | End With | ||
− | + | End | |
− | + | ||
+ | Public Sub Form_KeyPress() | ||
Select Case Key.Code | Select Case Key.Code | ||
Riga 131: | Riga 151: | ||
da.Refresh | 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= | =Note= | ||
[1] I codici, presenti in questa pagina, sono tratti - con modifiche ed integrazioni - da suggerimenti del membro ''Gianluigi'' del forum di ''gambas-it.org'' e del membro ''Shell'' del forum ''www.gambas-es.org'' . | [1] I codici, presenti in questa pagina, sono tratti - con modifiche ed integrazioni - da suggerimenti del membro ''Gianluigi'' del forum di ''gambas-it.org'' e del membro ''Shell'' del forum ''www.gambas-es.org'' . | ||
[2] Vedere anche queste pagine: | [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 05:51, 27 giu 2024
Mostriamo due analoghi possibili codici [nota 1] per far ruotare su se stessi, ossia intorno al proprio asse centrale, un Quadrato ed un Rettangolo disegnati su una DrawingArea. [nota 2]
In entrambi gli esempi la rotazione del Quadrato e del Rettangolo viene effettuata premendo i tasti freccia in su e freccia in giù della tastiera oppure ruotando la rotellina del mouse.
Ruotare un Quadrato sul proprio asse centrale
Per ottenere la rotazione sul proprio asse centrale di un quadrato disegnato in una DrawingArea è possibile adottare il seguente codice:
' Il fulcro del Metodo ".Translate()" agisce da vortice, da centro di rotazione intorno a una ipotetica circonferenza Private da As DrawingArea Private Const LATO As Short = 200 ' Memorizza il lato del quadrato. 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 = LATO * 3 .H = .W * 0.6 .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/punto 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 quadrato. ' Siccome l'angolo ruota su se stesso, si dà alle coordinate del quadrato la metà della dimensione del suo lato. ' Non si devono modificare i valori né i segni dei quattro argomenti qui riportati. .Rectangle(LATO / 2, LATO / 2, -LATO, -LATO) ' oppure così: ' .Rectangle(-LATO / 2, -LATO / 2, LATO, LATO) .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
Ruotare un Rettangolo sul proprio asse centrale
Per ottenere la rotazione sul proprio asse centrale di un Rettangolo disegnato in una DrawingArea è possibile adottare il seguente codice identico al precedente:
' Il fulcro del Metodo ".Translate()" agisce da vortice, da centro di rotazione intorno a una ipotetica circonferenza Private da As DrawingArea Private Const ORIZZONTALE As Short = 200 ' Memorizza la dimensione di ciascun lato orizzontale. Private Const VERTICALE As Short = 100 ' Memorizza la dimensione di ciascun lato verticale. 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 = Max(ORIZZONTALE, VERTICALE) * 4 .H = .W / 2 .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/punto 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 rettangolo. ' Siccome l'angolo ruota su se stesso, si dà alle coordinate del rettangolo la metà della dimensione di ciascun suo lato: ' Non si devono modificare i valori né i segni dei quattro argomenti qui riportati. .Rectangle(ORIZZONTALE / 2, VERTICALE / 2, -ORIZZONTALE, -VERTICALE) ' oppure così: ' .Rectangle(-ORIZZONTALE / 2, -VERTICALE / 2, ORIZZONTALE, VERTICALE) .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] I codici, presenti in questa pagina, sono tratti - con modifiche ed integrazioni - da suggerimenti del membro Gianluigi del forum di gambas-it.org e del membro Shell del forum www.gambas-es.org .
[2] Vedere anche queste pagine: