Since Rysith's code didn't seem to make very nice circles for me I decided to take a crack at an AHK script. I started with Rysith's code and then modified like crazy.
This is the first time I used the program and I'm not much of a coder so if somebody wants to streamline this that would be great.
The code produces clones of the chart most of the time... Some of the sizes are slightly different than the chart's circles though, but they are still pretty good.
Hit [Windows Key] + c to activate the macro
/edit
I guess I should mention that you can modify the outerrad and innerrad variables to change the circles. Changing the innerrad from 0 makes it so a circular column is left in the middle of the room with radius = innerrad.
/endedit
*EDIT AGAIN*
Made a small change and now all my circles turn out beautifully.
I also had part of the code missing previously from a botched copy/paste
;One full circle
#c::
;Radius is considered as the distance from the origin to circle edge
;with the center square being the origin and considered dimensionless
;From Circle Chart:
; Radius = (Chart#)/2 - 1
outerrad := 10
innerrad := 0
outerEighth("{NumPadDown}","{NumPadUp}","{NumPadRight}","{NumPadLeft}",outerrad)
outerEighth("{NumPadDown}","{NumPadUp}","{NumPadLeft}","{NumPadRight}",outerrad)
outerEighth("{NumPadLeft}","{NumPadRight}","{NumPadUp}","{NumPadDown}",outerrad)
outerEighth("{NumPadLeft}","{NumPadRight}","{NumPadDown}","{NumPadUp}",outerrad)
outerEighth("{NumPadRight}","{NumPadLeft}","{NumPadUp}","{NumPadDown}",outerrad)
outerEighth("{NumPadRight}","{NumPadLeft}","{NumPadDown}","{NumPadUp}",outerrad)
outerEighth("{NumPadUp}","{NumPadDown}","{NumPadLeft}","{NumPadRight}",outerrad)
outerEighth("{NumPadUp}","{NumPadDown}","{NumPadRight}","{NumPadLeft}",outerrad)
innerEighth("{NumPadDown}","{NumPadUp}","{NumPadRight}","{NumPadLeft}",innerrad)
innerEighth("{NumPadDown}","{NumPadUp}","{NumPadLeft}","{NumPadRight}",innerrad)
innerEighth("{NumPadLeft}","{NumPadRight}","{NumPadUp}","{NumPadDown}",innerrad)
innerEighth("{NumPadLeft}","{NumPadRight}","{NumPadDown}","{NumPadUp}",innerrad)
innerEighth("{NumPadRight}","{NumPadLeft}","{NumPadUp}","{NumPadDown}",innerrad)
innerEighth("{NumPadRight}","{NumPadLeft}","{NumPadDown}","{NumPadUp}",innerrad)
innerEighth("{NumPadUp}","{NumPadDown}","{NumPadLeft}","{NumPadRight}",innerrad)
innerEighth("{NumPadUp}","{NumPadDown}","{NumPadRight}","{NumPadLeft}",innerrad)
outerEighth(up,down,left,right,rad)
{
x := 0
y := rad
while y > rad/2
{
dig(up,y)
move(down,y)
dig(right,1)
x++
y := round((sqrt((rad*rad) - (x*x))))
}
move(left,x)
}
innerEighth(up,down,left,right,rad)
{
x := 0
y := rad
while y > rad/2
{
remove(up,y)
move(down,y)
remove(right,1)
x++
y := round((sqrt((rad*rad) - (x*x))))
}
move(left,x)
}
;Utility functions
remove(dir,number)
{
send x
send {Enter}
move(dir, number)
send {Enter}
}
dig(dir,number)
{
send d
send {Enter}
move(dir, number)
send {Enter}
}
move(dir,number)
{
loop {
if number <= 0
{
break
}
send %dir%
number--
}
}