Disegnare in una DrawingArea un goniometro: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 37: | Riga 37: | ||
End With | End With | ||
End | |||
Un altro codice possibile: | |||
Public Sub Form_Open() | |||
Me.Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight) | |||
Me.Arrangement = Arrange.Fill | |||
DrawingArea1.Refresh | |||
End | |||
Public Sub DrawingArea1_Draw() | |||
<FONT Color=gray>' ''Centro orizzontale e verticale della DrawingArea:''</font> | |||
Dim cx, cy As Integer | |||
<FONT Color=gray>' ''Raggio del goniometro con margine per non uscire dai bordi:''</font> | |||
Dim r As Integer | |||
<FONT Color=gray>' ''Variabile per angolo in gradi:''</font> | |||
Dim a As Integer | |||
<FONT Color=gray>' ''Coordinate per le tacche:''</font> | |||
Dim x1, y1, x2, y2 As Float | |||
<FONT Color=gray>' ''Angolo in radianti, calcolato da gradi:''</font> | |||
Dim angleRad As Float | |||
cx = DrawingArea1.Width / 2 <FONT Color=gray>' ''Centro X''</font> | |||
cy = DrawingArea1.Height / 2 <FONT Color=gray>' ''Centro Y''</font> | |||
r = Min(cx, cy) - 40 <FONT Color=gray>' ''Raggio con margine''</font> | |||
Paint.Arc(cx - r, cy - r, r * 2, r * 2, 0, 360) <FONT Color=gray>' ''Disegna cerchio completo''</font> | |||
For a = 0 To 360 Step 10 <FONT Color=gray>' ''Ciclo da 0 a 360 gradi, step 10°''</font> | |||
angleRad = Rad(a) <FONT Color=gray>' ''Conversione gradi -> radianti''</font> | |||
<FONT Color=gray>' ''Coordinate esterne della tacca (sulla circonferenza):''</font> | |||
x1 = cx + Cos(angleRad) * r | |||
y1 = cy + Sin(angleRad) * r | |||
<FONT Color=gray>' ''Coordinate interne della tacca (più corta o più lunga):''</font> | |||
If a Mod 30 = 0 Then | |||
x2 = cx + Cos(angleRad) * (r - 20) ' Tacca lunga ogni 30°''</font> | |||
y2 = cy + Sin(angleRad) * (r - 20) | |||
Else | |||
x2 = cx + Cos(angleRad) * (r - 10) ' Tacca corta ogni 10°''</font> | |||
y2 = cy + Sin(angleRad) * (r - 10) | |||
EndIf | |||
Paint.MoveTo(x1, y1) ' Inizio linea tacca''</font> | |||
Paint.LineTo(x2, y2) ' Fine linea tacca''</font> | |||
<FONT Color=gray>' ''Disegna numeri ogni 30°, escluso il 360 per non sovrapporre lo 0:''</font> | |||
If a Mod 30 = 0 And a <> 360 Then | |||
Dim tx, ty As Float | |||
<FONT Color=gray>' ''Posizione testo leggermente più interno rispetto alla tacca lunga:''</font> | |||
tx = cx + Cos(angleRad) * (r - 35) | |||
ty = cy + Sin(angleRad) * (r - 35) | |||
Paint.Font.Size = 10 ' Dimensione font''</font> | |||
Paint.Text(Str(a), tx - 10, ty - 6, 20, 12, Align.Center) <FONT Color=gray>' ''Disegna numero angolo''</font> | |||
End If | |||
Next | |||
<FONT Color=gray>' ''Linea orizzontale centrale (diametro):''</font> | |||
Paint.MoveTo(cx - r, cy) | |||
Paint.LineTo(cx + r, cy) | |||
<FONT Color=gray>' ''Linea verticale centrale (diametro):''</font> | |||
Paint.MoveTo(cx, cy - r) | |||
Paint.LineTo(cx, cy + r) | |||
Paint.Stroke() <FONT Color=gray>' ''Applica il disegno''</font> | |||
End | End | ||
Versione delle 02:26, 22 lug 2025
Per disegnare su una DrawingArea un semplice quadrante del goniometro, si potrà adottare il seguente codice: [nota 1]
Private DrawingArea1 As DrawingArea
Private FINEANGOLO As Short = 360
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 DrawingArea1_Draw()
Dim rag, an As Short
rag = DrawingArea1.H * 0.4
With Paint
.Brush = Paint.Color(Color.Blue)
For an = 0 To FINEANGOLO - 10 Step 10
.Text(CStr(an), (DrawingArea1.W / 2) + (rag + 20) * -Sin(Rad(-an)), (DrawingArea1.H / 2) - (rag + 20) * Cos(Rad(-an)))
Next
.Stroke
.Brush = Paint.Color(Color.Red)
.LineWidth = 3.0
.Arc(DrawingArea1.W / 2 + 10, DrawingArea1.H / 2 - 6, rag, Rad(0), Rad(360), False)
.Stroke
.End
End With
End
Un altro codice possibile:
Public Sub Form_Open()
Me.Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
Me.Arrangement = Arrange.Fill
DrawingArea1.Refresh
End
Public Sub DrawingArea1_Draw()
' Centro orizzontale e verticale della DrawingArea:
Dim cx, cy As Integer
' Raggio del goniometro con margine per non uscire dai bordi:
Dim r As Integer
' Variabile per angolo in gradi:
Dim a As Integer
' Coordinate per le tacche:
Dim x1, y1, x2, y2 As Float
' Angolo in radianti, calcolato da gradi:
Dim angleRad As Float
cx = DrawingArea1.Width / 2 ' Centro X
cy = DrawingArea1.Height / 2 ' Centro Y
r = Min(cx, cy) - 40 ' Raggio con margine
Paint.Arc(cx - r, cy - r, r * 2, r * 2, 0, 360) ' Disegna cerchio completo
For a = 0 To 360 Step 10 ' Ciclo da 0 a 360 gradi, step 10°
angleRad = Rad(a) ' Conversione gradi -> radianti
' Coordinate esterne della tacca (sulla circonferenza):
x1 = cx + Cos(angleRad) * r
y1 = cy + Sin(angleRad) * r
' Coordinate interne della tacca (più corta o più lunga):
If a Mod 30 = 0 Then
x2 = cx + Cos(angleRad) * (r - 20) ' Tacca lunga ogni 30°
y2 = cy + Sin(angleRad) * (r - 20)
Else
x2 = cx + Cos(angleRad) * (r - 10) ' Tacca corta ogni 10°
y2 = cy + Sin(angleRad) * (r - 10)
EndIf
Paint.MoveTo(x1, y1) ' Inizio linea tacca
Paint.LineTo(x2, y2) ' Fine linea tacca
' Disegna numeri ogni 30°, escluso il 360 per non sovrapporre lo 0:
If a Mod 30 = 0 And a <> 360 Then
Dim tx, ty As Float
' Posizione testo leggermente più interno rispetto alla tacca lunga:
tx = cx + Cos(angleRad) * (r - 35)
ty = cy + Sin(angleRad) * (r - 35)
Paint.Font.Size = 10 ' Dimensione font
Paint.Text(Str(a), tx - 10, ty - 6, 20, 12, Align.Center) ' Disegna numero angolo
End If
Next
' Linea orizzontale centrale (diametro):
Paint.MoveTo(cx - r, cy)
Paint.LineTo(cx + r, cy)
' Linea verticale centrale (diametro):
Paint.MoveTo(cx, cy - r)
Paint.LineTo(cx, cy + r)
Paint.Stroke() ' Applica il disegno
End
Note
[1] Vedere anche: Disegnare in una DrawingArea un cerchio