Kruhy a elipsy
No tak na začátek bych upozornil na to, že se budeme potýkat skoro s tím samým jako dříve, jen už se nás dotkne pár výpočtů. A to je zploštění či roztažení kružnice, které je nutné k vytvoření elipsy. Pro tvorbu kruhů budeme používat – jak jinak – klávesu Shift. Jak se s tím vypořádat se můžete podívat v následujícím ne příliš dlouhém kódu.
Dim xa1 As Single
Dim ya1 As Single
Public Sub elipse1(Img As PictureBox, Xa As Single, Ya As Single, Clr As Long)
xa1 = Xa
ya1 = Ya
End Sub
Public Sub elipse2(Img As PictureBox, Xa As Single, Ya As Single, Width As Long, Button As Integer, Clr As Long, Shift As Integer)
Img.DrawWidth = Width
Img.AutoRedraw = False
Img.Refresh
If Button = 1 Then
If Shift = 0 Then
r = xa1 - Xa
If r < 0 Then r = -r
r = r + 1
f = ya1 - Ya
If f < 0 Then f = -f
f = f + 1
If f < r Then
Img.Circle (xa1, ya1), r, Clr, , , f / r
Else
Img.Circle (xa1, ya1), f, Clr, , , f / r
End If
Else
r = xa1 - Xa
If r < 0 Then r = -r
Img.Circle (xa1, ya1), r, Clr
End If
End If
Img.AutoRedraw = True
End Sub
Public Sub elipse3(Img As PictureBox, Xa As Single, Ya As Single, Width As Long, Button As Integer, Clr As Long, Shift As Integer)
Img.DrawWidth = Width
Img.AutoRedraw = True
Img.Refresh
If Button = 1 Then
If Shift = 0 Then
r = xa1 - Xa
If r < 0 Then r = -r
r = r + 1
f = ya1 - Ya
If f < 0 Then f = -f
f = f + 1
If f < r Then
Img.Circle (xa1, ya1), r, Clr, , , f / r
Else
Img.Circle (xa1, ya1), f, Clr, , , f / r
End If
Else
r = xa1 - Xa
If r < 0 Then r = -r
Img.Circle (xa1, ya1), r, Clr
End If
End If
Img.AutoRedraw = True
End Sub
To bychom měli funkce, teď je třeba je nějakým způsobem zavolat a pokud čtete můj seriál a tohle není váš první díl, pochopíte, co co znamená. A když ne, tak se mrknete do deklarací procedur.
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
elipse1 Picture1, X, Y, &HCCDDAA
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
elipse2 Picture1, X, Y, 2, Button, &HCCDDAA, Shift
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
elipse3 Picture1, X, Y, 2, Button, &HCCDDAA, Shift
End Sub
Jak jednoduché, že? No a abychom nezůstali u jednoduchých obrazců, tak se na to podívame z trochu jiné strany. To jsou necelé kruhy. Ono pro někoho může být dost na bednu nad tím přemýšlet, tak Vám sem ten kód hodím. Jsou dvě možností, jak tohoto dosáhnout, ale musím Vás upozornit, že jedna je velmi nepohodlná, a tudíž ji používat nebudu. Spočívá v pouhém zadání úhlů do textboxů a podle ní se potom děje, ale to já nechci, chci si vše volit zakreslením myší. Slovem sem jsem myslel na tento server, ne do tohoto článku, takže zatím můžete přemýšlet a já o tom mezi tím napíši, je na Vás, zda zvítězí lenost, anebo touha zkoušet a přemýšlet.