import rhinoscriptsyntax as rs
import random as rand
import sys                                  # load System Library
import math

# Get all the system paths
print(sys.path)

# sys.path.append( "lib/" )                ## set relative path,
sys.path.append( "P:/dm2/lib/")            ## set absolute path to our P:// Drive

# Import our own library file (uncomment to use it)
# import my_dm2_lib as dm2lib

# reload the library in case wie change something in the meantime (uncomment to use it only while changing code)
# reload(dm2lib)

#delet everything and start from scratch
allobjs = rs.AllObjects()
rs.DeleteObjects (allobjs)

# some static variables
bsize = 1
ysize = 1
xsize= 1                   # side length of box
dist = 5                    # distance between boxes
offs = bsize + dist         # offset of boxes

corners = [(0,0,0), (bsize,0,0), (bsize,ysize,0), (0,ysize,0),
           (0,0,xsize),(bsize,0,xsize),(bsize,ysize,xsize),(0,ysize,xsize)]

rs.EnableRedraw(False)

point_list=[]
#for x in range(20):
#    for y in range (11):
#        if not (3< x < 6 and 4 < y < 8):
#            point= (x,y,0)
#            point_list.append(point)
#
#for i in point_list:
#    rs.AddPoint(i)
#    box= rs.AddBox(corners)
#    rs.MoveObject(box,i)
radius=20
for x in range(radius*-1, radius+1):
#    d=4
#    dx=1
#    dy=2
#    
#    k=dy/dx
#    y= k*x+d

    r = radius
    z=0
    y= (r**2 - x**2)**(1/2)
    point= (x,y,0)
    rs.AddPoint(point)
    box= rs.AddBox(corners)
    rs.MoveObject(box,point)
    point= (x,y*-1,z)
    rs.AddPoint(point)
    box= rs.AddBox(corners)
    rs.MoveObject(box,point)
#    box= rs.AddBox(corners)
#    rs.MoveObject(box,point)

x= []
y= x
y=5

print(x)
print(y)


def circle(radius):
    # Bresenham circle algorithm
    # init vars
    switch = 3 - (2 * radius)
    points = set()
    x = 0
    y = radius
    # first quarter/octant starts clockwise at 12 o'clock
    while x <= y:
        # first quarter first octant
        points.add((x,-y))
        # first quarter 2nd octant
        points.add((y,-x))
        # second quarter 3rd octant
        points.add((y,x))
        # second quarter 4.octant
        points.add((x,y))
        # third quarter 5.octant
        points.add((-x,y))
        # third quarter 6.octant
        points.add((-y,x))
        # fourth quarter 7.octant
        points.add((-y,-x))
        # fourth quarter 8.octant
        points.add((-x,-y))
        if switch < 0:
            switch = switch + (4 * x) + 6
        else:
            switch = switch + (4 * (x - y)) + 10
            y = y - 1
        x = x + 1
    return points


radius = 8
p_list = circle(radius)
# print the point coords
#print(p)

for point in p_list:
    rs.AddPoint(point)
    box = rs.AddBox(corners)
    rs.MoveObject(box,point)

point_list = []

def drawCircle(centerX, centerY, x, y):
    # Fill the circle
    for xx in range(centerX - x, centerX + x + 1):

        box = rs.AddBox(corners)
        rs.MoveObject(box,((centerX + x)*offs, (centerY + y)*offs, 50.0))
        box = rs.AddBox(corners)
        rs.MoveObject(box,((centerX - x)*offs, (centerY + y)*offs, 50.0))
        box = rs.AddBox(corners)
        rs.MoveObject(box,((centerX + x)*offs, (centerY - y)*offs, 50.0))
        box = rs.AddBox(corners)
        rs.MoveObject(box,((centerX - x)*offs, (centerY - y)*offs, 50.0))
        box = rs.AddBox(corners)
        rs.MoveObject(box,((centerX + y)*offs, (centerY + x)*offs, 50.0))
        box = rs.AddBox(corners)
        rs.MoveObject(box,((centerX - y)*offs, (centerY + x)*offs, 50.0))
        box = rs.AddBox(corners)
        rs.MoveObject(box,((centerX + y)*offs, (centerY - x)*offs, 50.0))
        box = rs.AddBox(corners)
        rs.MoveObject(box,((centerX - y)*offs, (centerY - x)*offs, 50.0))


def circleBres(xc, yc, r):
    x = 0
    y = r
    d = 3 - (2*r)
    drawCircle(xc, yc, x, y)
    while(y>=x):
        x+=1
        if(d>0):
            y-=1
            d = d+4*(x-y)+10
        else:
            d = d + 4 * x + 6
        drawCircle(xc, yc, x, y)
        #rs.Redraw()




circleBres(0, 0, 10)

for point in point_list:
    rs.AddPoint(point)

print(point_list)
point_list_start = point_list