import rhinoscriptsyntax as rs
import random as ran




if rs.IsLayer("Default"):
    rs.CurrentLayer("Default")
else:
    rs.AddLayer("Default")
    rs.CurrentLayer("Default")

delobjs = rs.ObjectsByLayer("Default")
rs.DeleteObjects(delobjs)

delobjs = rs.ObjectsByType(1)  
rs.DeleteObjects(delobjs)
rs

Fen = rs.ObjectsByLayer("Fenster")
#plane = rs.CurvePlane(Fen[-1])
pts = []
for i in range(8000):
    x= ran.randint(0,215)
    y= 0
    z= ran.randint(0,118)
pts.append([x,y,z])
#for F in Fen:
#    if rs.PointInPlanarClosedCurve(pts[-1], F, plane):
pts.pop(-1)

for p in pts:
    rs.AddPoint(p)

for p in pts:
    rs.AddPoint(p)
#_____________________________________________

def meander():
    meander_pt = [(0,0,0), (0,0,10), (10,0,10), (10,0,4), (6,0,4), (6,0,6), (8,0,6), (8,0,8), (4,0,8), (4,0,0), (12,0,0), (12,0,12), (-4,0,12), (-4,0,0), (0,0,0)]

    meander = rs.AddPolyline(meander_pt)
    path = rs.AddLine([0,-2,0], [0,1,0])
    meander_obj = rs.ExtrudeCurve( meander, path)

    rs.CapPlanarHoles(meander_obj)
    # print(meander_obj)
    # rs.MoveObject(meander_obj, (0,0,1))
    return meander_obj


for x in range(1,7):
    rs.MoveObject(meander(), ((x*140),0, 420))

def ornament():
    meander_pt = [(0,0,0), (20,0,20),(0,0,20)]

    ornament = rs.AddPolyline(meander_pt)
    path = rs.AddLine([0,0,0], [0,2,0])
    ornament_obj = rs.ExtrudeCurve( ornament, path)
    rs.CapPlanarHoles(ornament_obj)
    print(ornament_obj)
    rs.MoveObject(ornament_obj, (0,0,1))
    return ornament

for x in range(0,48):
    for z in range(1,24):
        rs.MoveObject(ornament(),((x*20),0,(z*10)+200))
#____________________________


def make_box(insertion, xsize,ysize,zsize):
    corners = [(0,0,0), (xsize,0,0), (xsize,ysize,0), (0,ysize,0),
           (0,0,zsize),(xsize,0,zsize),(xsize,ysize,zsize),(0,ysize,zsize)]
    box=rs.AddBox(corners)
    rs.MoveObject(box,insertion)
#make_box((0,0,0),2.17,94.74,15)
#make_box(insertion=(5,0,0), xsize=1)
baseline= rs.ObjectsByLayer("baseline")[0]
line2= rs.ObjectsByLayer("line2")[0]
line6=rs.ObjectsByLayer("line6") [0]

pts = rs.DivideCurve(baseline,50)
for p in pts:
    make_box(p,5,5,95)

pts = rs.DivideCurve(line2,16)
for p in pts:
    make_box(p,5,5,105.4)

pts = rs.DivideCurve(line6,50)
for p in pts:
    make_box(p,5,5,107)

make_box((80,80,0),830,320,95)
make_box((0,0,95),965,480,5)
make_box((80,80,100),830,320,105.82)
make_box((0,0,205.86),965,480,248.80)


#___________
#WAND#
def make_wand(width, depth, height, translation=(0,0,100)):
    
    point_list = ((0,0,0),(width,0,0),(width,0,height),(0,0,height),(0,0,0))
    wand_obj = rs.AddPolyline(point_list)
    rs.MoveObject(wand_obj, translation)
    plane = rs.WorldXYPlane()

make_wand(965,20,1200) 
corners = [(0,0,0), (965,0,0), (965,0,99.8), (0,0,99.8),(0,5,0), (20,5,0), (20,5,99.8), (0,5,99.8)]
wand = rs.AddBox (corners) 

def make_fenster(width, height, level, spalte, y, bogen):
    global wand  
    print("fenster:"+str(bogen))
  #  points = [(0,0,0), (width,0,0), (width,0,height), (0,0,height), (0,0,0)]
    points = [(0,0,height), (0,0,0), (width,0,0), (width,0,height) ]
    polyline = rs.AddPolyline(points)
    rs.MoveObject(polyline, (spalte,y,level))
    # an dieser Stelle brauche ich noch einen Bogen
    plane = rs.WorldXYPlane()
    plane = rs.RotatePlane(plane,  90, [5,0,0])
    kreisbogen = rs.AddArc( plane, width/2, 180.0  )
    rs.MoveObject(kreisbogen, (width/2, y, height))
    rs.MoveObject(kreisbogen, (spalte,y,level))
    
    polyline1 = rs.JoinCurves((polyline,kreisbogen))
    
    point = rs.AddPoint((0,0,0))
    rs.MoveObject(point, (spalte,y,level))
    
    path = rs.AddLine ([0,0,0],[0,5,0])
    f1 = rs.ExtrudeCurve (polyline1, path)
    
    rs.DeleteObject (polyline)
    rs.DeleteObject (polyline1)
    rs.DeleteObject (kreisbogen)
    rs.DeleteObject (point)
    rs.DeleteObject (path)
    
    rs.CapPlanarHoles (f1)

    wand = rs.BooleanDifference (wand, f1)


make_fenster (55,50,0,5,0,0)
make_fenster (55,50,0,65,0,0)
make_fenster (55,50,0,125,0,0)
make_fenster (55,50,0,185,0,0)
make_fenster (55,50,0,245,0,0)
make_fenster (55,50,0,305,0,0)
make_fenster (55,50,0,365,0,0)
make_fenster (55,50,0,425,0,0)
make_fenster (55,50,0,485,0,0)
make_fenster (55,50,0,545,0,0)
make_fenster (55,50,0,605,0,0)
make_fenster (55,50,0,665,0,0)
make_fenster (55,50,0,725,0,0)
make_fenster (55,50,0,785,0,0)
make_fenster (55,50,0,845,0,0)
make_fenster (55,50,0,905,0,0)




#________________________________________
#block/Auskragung

def make_box(insertion, xsize,ysize,zsize):
    corners = [(0,0,0), (xsize,0,0), (xsize,ysize,0), (0,ysize,0),
           (0,0,zsize),(xsize,0,zsize),(xsize,ysize,zsize),(0,ysize,zsize)]
    box=rs.AddBox(corners)
    rs.MoveObject(box,insertion)
#make_box((0,0,0),2.17,94.74,15)
#make_box(insertion=(5,0,0), line3")[0]
line3= rs.ObjectsByLayer("line3")[0]

pts = rs.DivideCurve(line3,1)
for p in pts:
    make_box(p,5,-25,200)



#Verzierung Block

make_box((427.5,-15,220.4),115,400,185)
make_box((427.5,-25,205.4),115,400,15)

def make_box(insertion, xsize,ysize,zsize):
    corners = [(0,0,0), (xsize,0,0), (xsize,ysize,0), (0,ysize,0),
           (0,0,zsize),(xsize,0,zsize),(xsize,ysize,zsize),(0,ysize,zsize)]
    box=rs.AddBox(corners)
    rs.MoveObject(box,insertion)
#make_box((0,0,0),2.17,94.74,15)
#make_box(insertion=(5,0,0), line3")[0]
line4= rs.ObjectsByLayer("line4")[0]

pts = rs.DivideCurve(line4,10)
for p in pts:
    make_box(p,5,-5,60)

make_box((427.5,-20,280.44),115,5,5)
make_box((427.5,-20,400.64),115,5,5)

#2.Ebene 

def make_box(insertion, xsize,ysize,zsize):
    corners = [(0,0,0), (xsize,0,0), (xsize,ysize,0), (0,ysize,0),
           (0,0,zsize),(xsize,0,zsize),(xsize,ysize,zsize),(0,ysize,zsize)]
    box=rs.AddBox(corners)
    rs.MoveObject(box,insertion)
#make_box((0,0,0),2.17,94.74,15)
#make_box(insertion=(5,0,0), xsize=1)
baseline= rs.ObjectsByLayer("baseline")[0]
line5= rs.ObjectsByLayer("line5")[0]

pts = rs.DivideCurve(line5,200)
for p in pts:
    make_box(p,2,2,40)

make_box((0,0,139.83),965,2,2)
make_box((0,478,139.83),965,2,2)
make_box((0,0,139.83),2,480,2)
make_box((962,0,139.83),2,480,2)


#Dach

def make_box(insertion, xsize,ysize,zsize):
    corners = [(0,0,0), (xsize,0,0), (xsize,ysize,0), (0,ysize,0),
           (0,0,zsize),(xsize,0,zsize),(xsize,ysize,zsize),(0,ysize,zsize)]
    box=rs.AddBox(corners)
    rs.MoveObject(box,insertion)
#make_box((0,0,0),2.17,94.74,15)
#make_box(insertion=(5,0,0), xsize=1)
baseline= rs.ObjectsByLayer("baseline")[0]
line2= rs.ObjectsByLayer("line2")[0]



make_box((-10,-10,454.66),985,500,10)
make_box((-20,-12,464.66),1005,510,10)
make_box((-30,-14,474.66),1025,520,10)



#Fenster

def make_box(insertion, xsize,ysize,zsize):
    corners = [(0,0,0), (xsize,0,0), (xsize,ysize,0), (0,ysize,0),
           (0,0,zsize),(xsize,0,zsize),(xsize,ysize,zsize),(0,ysize,zsize)]
    box=rs.AddBox(corners)
    rs.MoveObject(box,insertion)
#make_box((0,0,0),2.17,94.74,15)
#make_box(insertion=(5,0,0), xsize=1)
baseline= rs.ObjectsByLayer("baseline")[0]
line5= rs.ObjectsByLayer("line5")[0]

make_box((50.69,-5,303.04),57.56,5,5)
make_box((50.69,-5,303.04),5,5,76.76)
make_box((50.69,-5,379.75),57.56,5,5)
make_box((103.25,-5,303.04),5,5,76.76)

make_box((184.35,-5,303.04),57.56,5,5)
make_box((184.35,-5,303.04),5,5,76.76)
make_box((184.35,-5,379.75),57.56,5,5)
make_box((236.91,-5,303.04),5,5,76.76)

make_box((318,-5,303.04),57.56,5,5)
make_box((318,-5,303.04),5,5,76.76)
make_box((318,-5,379.75),57.56,5,5)
make_box((370.56,-5,303.04),5,5,76.76)

make_box((455,-20,303.04),57.56,5,5)
make_box((455.94,-20,303.04),5,5,76.76)
make_box((455.94,-20,379.75),57.56,5,5)
make_box((508.5,-20,303.04),5,5,76.76)

make_box((608.27,-5,303.04),57.56,5,5)
make_box((608.27,-5,303.04),5,5,76.76)
make_box((608.27,-5,379.75),57.56,5,5)
make_box((660.83,-5,303.04),5,5,76.76)

make_box((741.44,-5,303.04),57.56,5,5)
make_box((741.44,-5,303.04),5,5,76.76)
make_box((741.44,-5,379.75),57.56,5,5)
make_box((794,-5,303.04),5,5,76.76)

make_box((863.16,-5,303.04),57.56,5,5)
make_box((863.16,-5,303.04),5,5,76.76)
make_box((863.16,-5,379.75),57.56,5,5)
make_box((915.72,-5,303.04),5,5,76.76)

#Fenster Hinterseite

make_box((50.69,485,303.04),57.56,5,5)
make_box((50.69,485,303.04),5,5,76.76)
make_box((50.69,485,379.75),57.56,5,5)
make_box((103.25,485,303.04),5,5,76.76)

make_box((184.35,485,303.04),57.56,5,5)
make_box((184.35,485,303.04),5,5,76.76)
make_box((184.35,485,379.75),57.56,5,5)
make_box((236.91,485,303.04),5,5,76.76)

make_box((318,485,303.04),57.56,5,5)
make_box((318,485,303.04),5,5,76.76)
make_box((318,485,379.75),57.56,5,5)
make_box((370.56,485,303.04),5,5,76.76)

make_box((455,485,303.04),57.56,5,5)
make_box((455.94,485,303.04),5,5,76.76)
make_box((455.94,485,379.75),57.56,5,5)
make_box((508.5,485,303.04),5,5,76.76)

make_box((608.27,485,303.04),57.56,5,5)
make_box((608.27,485,303.04),5,5,76.76)
make_box((608.27,485,379.75),57.56,5,5)
make_box((660.83,485,303.04),5,5,76.76)

make_box((741.44,485,303.04),57.56,5,5)
make_box((741.44,485,303.04),5,5,76.76)
make_box((741.44,485,379.75),57.56,5,5)
make_box((794,485,303.04),5,5,76.76)

make_box((863.16,485,303.04),57.56,5,5)
make_box((863.16,485,303.04),5,5,76.76)
make_box((863.16,485,379.75),57.56,5,5)
make_box((915.72,485,303.04),5,5,76.76)

#Fassadenmuster Hinterseite

def ornament():
    meander_pt = [(0,0,0), (20,0,20),(0,0,20)]

    ornament = rs.AddPolyline(meander_pt)
    path = rs.AddLine([0,0,0], [0,2,0])
    ornament_obj = rs.ExtrudeCurve( ornament, path)
    rs.CapPlanarHoles(ornament_obj)
    print(ornament_obj)
    rs.MoveObject(ornament_obj, (0,0,1))
    return ornament

for x in range(0,48):
    for z in range(1,24):
        rs.MoveObject(ornament(),((x*20),485,(z*10)+200))