Ruotare un arco in una DrawingArea
Da Gambas-it.org - Wikipedia.
Versione del 3 ott 2015 alle 18:15 di Vuott (Discussione | contributi)
Per ottenere la rotazione intorno al proprio asse centrale di un arco di cerchio (il centro di rotazione è posto sulla corda dell'arco), potremo utilizzare il seguente codice: Nota1
' Il fulcro di Translate agisce da vortice. l'arco ruoterà a seconda di dove esso si pone nel vortice.' Private x As Float ' Memorizza l'inizio dell'arco. Private y As Float ' Idem Private iAlt As Integer ' Memorizza l'altezza dell'arco. Private iLarg As Integer ' Memorizza la larghezza dell'arco. Private fAngolo As Float ' Memorizza i gradi dell'angolo. Private fSopra1 As Float ' Memorizza la posizione di partenza orizzontale della rotazione. Private fSopra2 As Float ' Memorizza la posizione di partenza verticale della rotazione. Private fSotto1 As Float ' Memorizza la posizione di arrivo orizzontale della rotazione. Private fSotto2 As Float ' Memorizza la posizione di arrivo verticale della rotazione. Public Sub Form_Open() Me.Center attivaDisegno() End Public Sub da_Draw() iLarg = 200 iAlt = 200 ' Se la rotazione è centrale, posiziona l'angolo al centro dell'area di disegno ' così come le misure di partenza e di arrivo; e siccome l'angolo ruota su se stesso, si dà al raggio del cerchio mezza lunghezza dell'angolo: x = CFloat((da.W / 2) - (iLarg / 2)) y = CFloat((da.H / 2) - (iAlt / 2)) ' In questa dimostrazione il fulcro (vortice) è sempre il centro dell'area di disegno: fSopra1 = CFloat((da.W / 2)) fSopra2 = CFloat(da.H / 2) fSotto1 = CFloat(- (da.W / 2)) fSotto2 = CFloat(- (da.H / 2)) With Paint .Begin(da) ' Vortice: .Translate(fSopra1, fSopra2) .Rotate(Rad(fAngolo)) .Translate(fSotto1, fSotto2) .Ellipse(x, y, iLarg, iAlt, Rad(180), Rad(180), True) .Stroke .End End With End Public Sub attivaDisegno() da.Clear da.Refresh End Public Sub btSinistra_Click() ' Ogni volta che si agisce sul tasto incrementa il valore di un grado: ' (positivo = senso antiorario) fAngolo += 1 If fAngolo = 405 Then fAngolo = 1 attivaDisegno() End Public Sub btDestra_Click() ' Ogni volta che si agisce sul tasto decrementa il valore di un grado: ' (negativo = senso orario) fAngolo -= 1 If fAngolo = -405 Then fAngolo = -1 attivaDisegno() End Public Sub Form_Resize() ' Con questo evento se cambia la dimensione del Form, il disegna non va perso. attivaDisegno() End
Nota
[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 gambas-es.org .