#########################
#-*- coding: utf-8 -*-
###################################
### DM2_w25 # AGruber@tugraz.at ###
### DEMO       SWAN      
###################################

##############################
import rhinoscriptsyntax as rs
import random, time, sys   ###
sys.path.append("P:/")     ###
sys.path.append("P:/WWW/XXX/dm2/")
import DM_lib as dm        ### 
dm.reload_lib(dm)
##############################      

rs.UnitSystem(4)                                            # meters = 4, cm = 3 etc
rs.ShowGrid(None, False)                                    # grid > False = off
rs.ShowGridAxes(None, True)                                 # y/y/z axen display > False/True = off/on
rs.Command("cplane w t enter", False)				        # cPlane World Top
#rs.ViewDisplayMode(rs.CurrentView(), "pen")

dm.PointRadius(displayModeX=1001, rad=3, styl=3)               # 0 => wireframe | info: (.., verbose=1)            # 2 => rendered  | info: (.., verbose=1)
dm.printDisplay(state=False, scale=1000)                       # nomen est omen
rs.EnableRedraw(False)

swan_coords = rs.CurvePoints( rs.ObjectsByName("swan_proto")[0] )[0:-2]
dem = rs.ObjectsByName("dem")[0]
#dem_coords = dm.getSurfacePoints(dem)

if 0:
    dem_coords = dm.getSurfacePoints(dem)
    dm.exportCoordLists([dem_coords], exportedListName='dem_coords', path='P:/', fileName='dem_coords')

dm.setTime()
import dem_coords as dc
dm.reload_lib(dc)
dem_coords = dc.dem_coords
dm.getTime(1)

dm.setSurfacePoints(dem, dc.dem_coords)

#swan_coords = swan_coords[0:-2]
dm.newEmptyLayer("XXX", [200,0,0])
#dm.textDots( swan_coords )
#rs.AddCurve( dem_coords )
#rs.AddCurve( swan_coords, 3 )
#rs.AddCurve( swan_coords, 2 )
#rs.AddCurve( swan_coords, 3 )

def makeSwanCrv( pos=[0,0,0], scal=1.0, rota=0.0, deg=3 ):
    coords = swan_coords[:]
    #rs.AddPoint( dm.pntCentroid( coords ) )
    coords = [ rs.VectorScale( cor, scal ) for cor in coords ]
    coords = [ rs.VectorRotate( cor, rota, [0,0,1] ) for cor in coords ]
    center = dm.pntCentroid( coords )
    coords = [ rs.VectorSubtract( cor, center ) for cor in coords ]
    coords = [ rs.VectorAdd( cor, dm.pnt2XY0(pos) ) for cor in coords ]
    #rs.AddCurve( coords, deg )
    return coords

#makeSwanCrv( pos=[0,0,0], scal=0.5, rota=30.0, deg=3 )

#pos = random.choice( dem_coords )
#rs.AddPoint( pos )

for i in range(0):
    pos = random.choice( dem_coords )
    scal=random.uniform(1,4)
    rota=random.uniform(0,360)
    coords = makeSwanCrv( pos=pos, scal=scal, rota=rota)
    swan = rs.AddCurve( coords )
    dem_tmp = dm.getSurfacePoints(dem) #dem_coords[:]
    for cor in dem_tmp:
        if rs.PointInPlanarClosedCurve(dm.pnt2XY0(cor), swan):
            #rs.AddPoint( dm.pnt2XY0(cor) )
            cor[2] = 0.0
    dm.setSurfacePoints(dem, dem_tmp)
    rs.Redraw()



############################
########## 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"