Differenze tra le versioni di "Ruotare un rombo in una DrawingArea"
Da Gambas-it.org - Wikipedia.
(Creata pagina con "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 cir...") |
|||
Riga 1: | Riga 1: | ||
Di seguito mostreremo un possibile codice per ruotare un Rombo disegnato in una ''DrawingArea''. | 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 vertici insistono. | + | E' possibile variare la dimensione del Rombo, modificando il raggio della circonferenza, sulla quale i suoi 4 vertici insistono. |
− | La rotazione del | + | La rotazione del Rombo si avvia semplicemente cliccando con il tasto sinistro del mouse sulla superficie della ''DrawingArea''. |
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. | ||
Private DrawingArea1 As DrawingArea | Private DrawingArea1 As DrawingArea | ||
Riga 60: | Riga 60: | ||
.Translate(coord[0], coord[1]) | .Translate(coord[0], coord[1]) | ||
.Rotate(Rad(-an)) | .Rotate(Rad(-an)) | ||
− | .Polygon([((coord[0] + pol[0]) - xs) - 40, (coord[1] + pol[1]) - ys | + | .Polygon([((coord[0] + pol[0]) - xs) - 40, (coord[1] + pol[1]) - ys, (coord[0] + pol[2]) - xs, (coord[1] + pol[3]) - ys, ((coord[0] + pol[4]) - xs) + 40, (coord[1] + pol[5]) - ys, (coord[0] + pol[6]) - xs, (coord[1] + pol[7]) - ys]) |
.Stroke | .Stroke | ||
.End | .End |
Versione delle 15:59, 31 mag 2023
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. La rotazione del Rombo si avvia semplicemente cliccando con il tasto sinistro del mouse sulla superficie della DrawingArea. Il fulcro del Metodo ".Translate()" agisce da vortice, ossia da centro di rotazione intorno a una ipotetica circonferenza.
Private DrawingArea1 As DrawingArea Private Const RAGGIO As Single = 40.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[] 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 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 - ((50 * RAGGIO) / 100) 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 .Translate(coord[0], coord[1]) .Rotate(Rad(-an)) .Polygon([((coord[0] + pol[0]) - xs) - 40, (coord[1] + pol[1]) - ys, (coord[0] + pol[2]) - xs, (coord[1] + pol[3]) - ys, ((coord[0] + pol[4]) - xs) + 40, (coord[1] + pol[5]) - ys, (coord[0] + pol[6]) - xs, (coord[1] + pol[7]) - ys]) .Stroke .End End With End