######################################
###  DM2_w25 # AGruber@tugraz.at   ###
### hu_08 Mary Poppins Regenschirm ### 
######################################


##############################
import rhinoscriptsyntax as rs
import random, time, sys, math   ###
sys.path.append("P:/")     ###
sys.path.append("P:/WWW/dx6419/dm2/") ###                                            
import DM_lib as dm        ### 
############################## dm.reload_lib(dm)

rs.UnitSystem(4)  # Meter
rs.ShowGrid(None, False)
rs.ShowGridAxes(None, False)
rs.ViewDisplayMode(rs.CurrentView(), "wireframe")
rs.Command("cplane w t enter", False)  # World Top
dm.PointRadius(displayModeX=0, rad=3, styl=3)
dm.PointRadius(displayModeX=1, rad=4, styl=1)
dm.PointRadius(displayModeX=2, rad=2, styl=0)
dm.printDisplay(state=False)

rs.EnableRedraw(False)



####import rhinoscriptsyntax as rs
####import math

def create_umbrella_safe( position=[0,0,0], radius=0.5, pole_height = 20, num_ribs = 8, circle_drop = 0.8, rib_drop=0.1 ):
    ###radius = 0.5
    pole_height = 20
    ### = radius
    ###circle_drop = 0.1
    ###num_ribs = 8
    ###rib_drop = 0.12

    #Stab
    ###rs.AddLine((0, 0, 0), (0, 0, pole_height))
    position[2] -= pole_height
    top = rs.VectorAdd(position, [0,0,pole_height])
    rs.AddLine( position, top )

    #Schirmkreis Punkte
    circle_z = pole_height*circle_drop# - circle_drop
    circle_points = []
    for i in range(num_ribs):
        angle = 2*math.pi*i/num_ribs
        x = radius * math.cos(angle)
        y = radius * math.sin(angle)
        z = circle_z
        ### pt_id = rs.AddPoint(x, y, z)
        cor = [x,y,z]
        cor = rs.VectorAdd(cor, position) 
        ### circle_points.append( pt_id )
        circle_points.append( cor )
    #rs.AddPoints( circle_points )
    #Streben (gebogen)
    
    coords = []
    for pt_coords in circle_points:
        ###pt_coords = rs.PointCoordinates(pt_id)
        ###mid = ((0 + pt_coords[0])/2, (0 + pt_coords[1])/2, (pole_height + pt_coords[2])/2 + rib_drop)
        mid = dm.pntInbetween( top, pt_coords )
        mid[2] += pole_height*rib_drop
        rs.AddCurve([top, mid, pt_coords], degree=2)

    #Schirmkante verbinden
    ###edge_points = [rs.PointCoordinates(pid) for pid in circle_points]
    ###edge_coords = [(pt.X, pt.Y, pt.Z) for pt in circle_points]
    ###edge_coords.append(edge_coords[0]) 
    circle_points.append(circle_points[0])
    rs.AddCurve(circle_points, 1)

    #rs.Command("_Zoom _Extents", False)
    #print("Regenschirm", pos)


flugbahn = rs.ObjectsByName( "flugbahn" )[0]
anzahl = 16
positions = rs.DivideCurve( flugbahn, anzahl, 1 )

dm.newEmptyLayer("PROJECT::umbrellas", [0,100,200])
rs.Redraw()

'''
    circle_drop von 0.9 nach 0.1
    rib_drop von 0.2 nach 0.6
    radius von 0.1 nach 20.0
'''
delta_circle_drop = dC = (0.9 - 0.1)/anzahl
delta_rib_drop    = dR = (0.6 - 0.2)/anzahl
delta_radius      = dRad = (20.0 - 0.1)/anzahl


for i,pos in enumerate(positions[0:]):
    #dm.newEmptyLayer("PROJECT::umbrellas", [0,100,200])
    #create_umbrella_safe( position=pos, radius=10.5+i, circle_drop = 0.8, rib_drop=0.2 )
    create_umbrella_safe( position=pos, radius=0.1+dRad*i, pole_height = 20, num_ribs=8+i,  circle_drop = 0.9-dC*i, rib_drop=0.2+dR*i )
    rs.Redraw()
    rs.Sleep(100)





############################
########## EOS / EndOfScript
rs.EnableRedraw(True)     ### 4_the_MACs
#dm.eDup()                 ### delete duplicate objects 
dm.printDisplay(state=True, scale=1000)
#dm.zA( 0.9 )
dm.newEmptyLayer("Default")
print "done"

