autodefine "off"

declare rect3D(wind:window, bl:int, bt:int, bw:int, bh:int, b:int)

DEF win:WINDOW
def aa,tim,xp,yp,scalex,scaley,offsetx,offsety:int
int slowdown,red,blue,density,slower,black,white,bface,bdark,blight
int b2,b3,b4
'  def deltax,deltay,ln:float
FLOAT ln
declare G0(x:int, y:int)
declare G1(x:int, y:int)
slowdown=2
red=rgb(255,150,150)
blue=rgb(130,130,140)
scalex=13 : scaley=13 :density=4

openWINDOW win, 10, 10, 620, 400, @caption, 0, "Pyxia CNC",&main
setwindowcolor win, rgb(0,0,90)
xp=0: yp=0
move win, 0, 0: offsetx=55: offsety=18

rect3d(win,10,10,590,300,2)
rect3d(win,15,15,580,290,2)
Gcode()

WAITUNTIL win.hWnd=0
	CLOSEWINDOW win
END

sub Gcode
G0 (0, 0)
G0 (0, 0)
G0 (2, -14)
G1 (2, -4 )
G1 (7, -4 )
G1 (8, -6 )
G1 (7, -8 )
G1 (3, -8 )
G0 (9, -18 )
G1 (11, -18 )
G1 (16, -8 )
G0 (19, -8 )
G1 ( 25, -14 )
G0 (28, -14 )
G1 ( 28, -8 )
G0 (28, -5)
G1 ( 27, -5)
G1 ( 29, -5)
G1 ( 28, -5)
G1 ( 28, -4 )
G1 ( 28, -6 )
G1 ( 28, -5)
G0 (31, -9 )
G1 ( 32, -8 )
G1 ( 36, -8 )
G1 ( 37, -10 )
G1 ( 37, -14)
G0 (39, -14)
G0 (37, -10 )
G1 ( 32, -11 )
G1 ( 31, -12 )
G1 ( 31, -13 )
G1 ( 32, -14)
G1 ( 35, -14)
G1 ( 37, -13 )
G0 (39, -16)
G0 (20, -16)
G0 (19, -14)
G1 ( 25, -8 )
G0 (21, 0 )
G0 (10, -8 )
G1 ( 13, -14)
G0 (13, -1 )
G0 (0, 0 )
return
endsub

SUB G0(x:int, y:int)
  y=-y
  circle win,offsetx+xp,offsety+yp,1,red
  ln=sqrt(  (x*scalex-xp)^2  + (y*scaley-yp)^2  )
  tim=(ln/scalex)*density*2
  if tim=0 then tim=1
  for aa=1 to tim
      circle win, offsetx+xp+aa*((x*scalex-xp)/tim), offsety+yp+aa*((y*scaley-yp)/tim),1,red
  next aa
  xp=x*scalex: yp=y*scaley
  circle win,offsetx+xp,offsety+yp,1,red
  wait 1
RETURN
endsub

SUB G1(x:int, y:int)
  y=-y
  circle win,offsetx+xp,offsety+yp,scalex,blue
  ln=sqrt(  (x*scalex-xp)^2  + (y*scaley-yp)^2  )
  tim=(ln/scalex)*density
  if tim=0 then tim=1
  for aa=1 to tim
    for slower=1 to slowdown
      circle win, offsetx+xp+aa*((x*scalex-xp)/tim), offsety+yp+aa*((y*scaley-yp)/tim),scalex,blue
    next slower
  next aa
  xp=x*scalex: yp=y*scaley
  circle win,offsetx+xp,offsety+yp,scalex,blue
  wait 1
RETURn
endsub

SUB main(),INT
SELECT @CLASS
CASE @IDCREATE
	CENTERWINDOW win
CASE @IDCLOSEWINDOW
	CLOSEWINDOW win
ENDSELECT
RETURN 0
endsub

SUB rect3D(wind:window, bl:int, bt:int, bw:int, bh:int, b:int)
   def foc, rev:int
   foc=0: rev=0 : if b<0 then rev=1 : b=abs(b)
   black=rgb(0,0,0): white=rgb(255,255,255)
   bface=rgb(190,190,190)
   bdark=rgb(125,125,125)
   blight=rgb(225,225,225)
   'comment out previous 3 lines if GetSysColor IS declared
   'comment out next 3 lines if GetSysColor is NOT declared
	'bface = GetSysColor(15)
   'bdark = GetSysColor(16)
   'blight = GetSysColor(22)
   ' NOTE... COLOR_BTNFACE = 15 COLOR_BTNSHADOW = 16   COLOR_3DLIGHT = 22
   if rev=0
      if b>10
         foc=1 : b=b-10 : bl=bl+1 : bt=bt+1 : bw=bw-2 : bh=bh-2
      endif
      b2=2*b: b3=3*b: b4=4*b
      RECT win, bl-foc*b, bt-foc*b, bw+2*foc*b, bh+2*foc*b, black, black
      RECT win, bl, bt, bw-b, bh-b, white, white
      RECT win, bl+b, bt+b, bw-b2, bh-b2, bdark, bdark
      RECT win, bl+b, bt+b, bw-b3, bh-b3, blight, blight
      RECT win, bl+b2, bt+b2, bw-b4, bh-b4, bface,bface
   else
      if b>10
         b=b-10 : bl=bl+1 : bt=bt+1 : bw=bw-2 : bh=bh-2
      endif
      b2=2*b: b3=3*b: b4=4*b
      RECT win, bl, bt, bw, bh, blight, blight
      RECT win, bl, bt, bw-b, bh-b, bdark, bdark
      RECT win, bl+b, bt+b, bw-b2, bh-b2, white, white
      RECT win, bl+b, bt+b, bw-b3, bh-b3, black, black
      RECT win, bl+b2, bt+b2, bw-b4, bh-b4, bface,bface
   endif
RETURN
endsub
