Differenze tra le versioni di "Ruotare un rombo in una DrawingArea"
Da Gambas-it.org - Wikipedia.
(3 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 2: | Riga 2: | ||
E' possibile variare la dimensione del Rombo, modificando il raggio della circonferenza, sulla quale i suoi 4 vertici insistono. | E' possibile variare la dimensione del Rombo, modificando il raggio della circonferenza, sulla quale i suoi 4 vertici insistono. | ||
− | + | <BR>Il fulcro del Metodo ".Translate()" agisce da vortice, ossia da centro di rotazione intorno a una ipotetica circonferenza. | |
− | Il fulcro del Metodo ".Translate()" agisce da vortice, ossia da centro di rotazione intorno a una ipotetica circonferenza. | + | <BR>La rotazione del Rombo si avvia semplicemente cliccando con il tasto sinistro del mouse sulla superficie della ''DrawingArea''. |
Private DrawingArea1 As DrawingArea | Private DrawingArea1 As DrawingArea | ||
Private Const <FONT Color=#B22222>RAGGIO</font> As Single = 100.0 | Private Const <FONT Color=#B22222>RAGGIO</font> As Single = 100.0 | ||
Riga 13: | Riga 13: | ||
Private coord As Single[] | Private coord As Single[] | ||
Private pol As New Single[] | Private pol As New Single[] | ||
+ | Private c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red] | ||
+ | Private f As Float[] = [0, 0.34, 0.67, 1] | ||
Riga 27: | Riga 29: | ||
End | End | ||
+ | |||
Public Sub Form_Arrange() | Public Sub Form_Arrange() | ||
Riga 38: | Riga 41: | ||
Next | Next | ||
− | xs = (coord[0] + coord[0] + pol[2] + coord[0] + Abs(pol[4]) + coord[0] - Abs(pol[6])) / ROMBO - ((25 * RAGGIO) / 100) | + | <FONT Color=gray>' ''Il risultato di ((25 * RAGGIO) / 100) aggiusta in orizzontale il punto di rotazione del Rombo:''</font> |
+ | xs = (coord[0] + coord[0] + pol[2] + coord[0] + Abs(pol[4]) + coord[0] - Abs(pol[6])) / ROMBO - <FONT Color=darkorange>((25 * RAGGIO) / 100)</font> | ||
ys = (coord[1] + coord[1] + pol[3] + coord[1] + pol[5] + coord[1] + pol[7]) / ROMBO | ys = (coord[1] + coord[1] + pol[3] + coord[1] + pol[5] + coord[1] + pol[7]) / ROMBO | ||
End | End | ||
+ | |||
Public Sub DrawingArea1_MouseUp() | Public Sub DrawingArea1_MouseUp() | ||
Riga 52: | Riga 57: | ||
End | End | ||
+ | |||
Public Sub DrawingArea1_Draw() | Public Sub DrawingArea1_Draw() | ||
Riga 58: | Riga 64: | ||
.Arc(coord[0], coord[1], 2, Rad(0), Rad(360), False) | .Arc(coord[0], coord[1], 2, Rad(0), Rad(360), False) | ||
.Fill | .Fill | ||
+ | .Brush = .LinearGradient(0, 20, 15, 0, c, f) | ||
.Translate(coord[0], coord[1]) | .Translate(coord[0], coord[1]) | ||
.Rotate(Rad(-an)) | .Rotate(Rad(-an)) |
Versione attuale delle 16:36, 5 apr 2025
Di seguito mostreremo un possibile codice per ruotare un Rombo disegnato in una DrawingArea.
E' possibile variare la dimensione del Rombo, modificando il raggio della circonferenza, sulla quale i suoi 4 vertici insistono.
Il fulcro del Metodo ".Translate()" agisce da vortice, ossia da centro di rotazione intorno a una ipotetica circonferenza.
La rotazione del Rombo si avvia semplicemente cliccando con il tasto sinistro del mouse sulla superficie della DrawingArea.
Private DrawingArea1 As DrawingArea Private Const RAGGIO As Single = 100.0 Private Const ROMBO As Byte = 4 Private ANGOLO As Single = 0.8 Private an As Single Private xs As Single Private ys As Single Private coord As Single[] Private pol As New Single[] 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 = Screen.AvailableWidth .H = Screen.AvailableHeight .Arrangement = Arrange.Fill End With With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1" .Background = Color.Lighter(Color.Yellow) End With End Public Sub Form_Arrange() coord = [DrawingArea1.W / 2, DrawingArea1.H / 2] Dim gradi As Single[] = [0.0, 90.0, 180.0, 270.0] For t As Byte = 0 To ROMBO - 1 pol.Push(RAGGIO * Cos(Rad(gradi[t]))) pol.Push(RAGGIO * Sin(Rad(gradi[t]))) Next ' Il risultato di ((25 * RAGGIO) / 100) aggiusta in orizzontale il punto di rotazione del Rombo: xs = (coord[0] + coord[0] + pol[2] + coord[0] + Abs(pol[4]) + coord[0] - Abs(pol[6])) / ROMBO - ((25 * RAGGIO) / 100) ys = (coord[1] + coord[1] + pol[3] + coord[1] + pol[5] + coord[1] + pol[7]) / ROMBO End Public Sub DrawingArea1_MouseUp() While Object.IsValid(DrawingArea1) an += ANGOLO DrawingArea1.Refresh Wait 0.01 Wend End Public Sub DrawingArea1_Draw() With Paint .Arc(coord[0], coord[1], 2, Rad(0), Rad(360), False) .Fill .Brush = .LinearGradient(0, 20, 15, 0, c, f) .Translate(coord[0], coord[1]) .Rotate(Rad(-an)) .Polygon([((coord[0] + pol[0]) - xs) - 50, (coord[1] + pol[1]) - ys, (coord[0] + pol[2]) - xs, (coord[1] + pol[3]) - ys, ((coord[0] + pol[4]) - xs) + 50, (coord[1] + pol[5]) - ys, (coord[0] + pol[6]) - xs, (coord[1] + pol[7]) - ys]) .Stroke .End End With End