GraphicsWindow.Width = Desktop.Width - 10
GraphicsWindow.Height = Desktop.Height - 10
GraphicsWindow.Top = 0
GraphicsWindow.Left = 0
GraphicsWindow.Title = "Computer Rendition of Spirograph [By Amir CPS]"
minX = 20
maxX = 290
gww = GraphicsWindow.Width
gwh = GraphicsWindow.Height
GraphicsWindow.MouseDown = doWork
GraphicsWindow.MouseMove = onMove
clearandredraw()
Sub draw
If r2 = 0 Then
r2 = 10
EndIf
li = 4 * Math.Tan(1)
If (r1/r2) = r1/r2 Then
rot = 1
Else
rot = Math.Abs(r2/r1)
If (r2/10) <> r2 / 10 Then
rot = 10 * rot
EndIf
EndIf
For i = 0 To rot
For j = 0 To 2*li Step li/(4*360)
t = i * 2 * li + j
x = (r1+r2) * Math.Cos(t) - (r2+r)*Math.Cos(((r1+r2)/r2*t))
y = (r1+r2) * Math.sin(t) - (r2+r)*Math.Sin(((r1+r2)/r2*t))
GraphicsWindow.SetPixel(graphicswindow.Width/2+x,graphicswindow.Height/2+y,"Black")
EndFor
EndFor
EndSub
Sub clearandredraw
GraphicsWindow.Clear()
GraphicsWindow.BrushColor = "Black"
track1 = Shapes.AddLine(10,10,300,10)
track2 = Shapes.AddLine(10,40,300,40)
track3 = Shapes.AddLine(10,70,300,70)
GraphicsWindow.DrawText(310,2,"Inner Radius")
GraphicsWindow.DrawText(310,32,"Outer Radius")
GraphicsWindow.DrawText(310,62,"Inner Offset")
r1slider = Shapes.AddRectangle(20,15)
r2slider = Shapes.AddRectangle(20,15)
rslider = Shapes.AddRectangle(20,15)
Shapes.Move(r1slider,10,10-7.5)
Shapes.Move(r2slider,147,40-7.5)
Shapes.Move(rslider,10,70-7.5)
Shapes.SetOpacity(r1slider,70)
Shapes.SetOpacity(r2slider,70)
Shapes.SetOpacity(rslider,70)
Shapes.SetOpacity(track1,20)
Shapes.SetOpacity(track2,20)
Shapes.SetOpacity(track3,20)
r1pop = Shapes.AddText(0)
r2pop = Shapes.AddText(0)
rpop = Shapes.AddText(0)
GraphicsWindow.DrawRectangle(10,95,50,20)
GraphicsWindow.DrawText(18,97,"Draw")
GraphicsWindow.DrawRectangle(70,95,50,20)
GraphicsWindow.DrawText(80,97,"Clear")
EndSub
Sub onMove
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
If x < minX Then
x = minX
ElseIf x > maxX Then
x = maxX
EndIf
If Mouse.IsLeftButtonDown Then
If y > 2 And y < 17 Then
Shapes.ShowShape(r1pop)
Shapes.Move(r1pop,X+20,20)
r1val = Math.Round((Shapes.GetLeft(r1slider)-10)*0.833)
Shapes.SetText(r1pop,r1val)
Shapes.Move(r1slider,X-10,10-7.5)
EndIf
If y > 32 And y < 47 Then
Shapes.ShowShape(r2pop)
Shapes.Move(r2pop,X+20,50)
r2val = Math.Round((Shapes.GetLeft(r2slider)-10)*0.89)
If r2val < 120 Then
r2val = r2val - 120
ElseIf r2val > 120 Then
r2val = Math.Abs(120 - r2val)
ElseIf r2val = 120 Then
r2val = 0
EndIf
Shapes.SetText(r2pop,r2val)
Shapes.Move(r2slider,X-10,40-7.5)
EndIf
If y > 62 And y < 77 Then
Shapes.ShowShape(rpop)
Shapes.Move(rpop,X+20,80)
rval = Math.Round((Shapes.GetLeft(rslider)-10)*0.333)
Shapes.SetText(rpop,rval)
Shapes.Move(rslider,X-10,70-7.5)
EndIf
Else
Shapes.HideShape(r1pop)
Shapes.HideShape(r2pop)
Shapes.HideShape(rpop)
EndIf
r1 = r1val
r2 = r2val
r = rval
EndSub
Sub doWork
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
If x > 10 And x < 60 And y > 95 And y < 115 Then
draw()
onMove()
ElseIf x > 70 And x < 120 And y > 95 And y < 115 Then
clearandredraw()
EndIf
EndSub