##############################
import rhinoscriptsyntax as rs
import scriptcontext as sc
import random, time, sys, os, Rhino  ##    ###
sys.path.append("P:/")
sys.path.append("P:/WWW/limafi/dm2")
import DM_lib as dm        ### reload( dm )
##############################      

rs.UnitSystem(4)                                        # km = 5, meters = 4, cm = 3 etc
rs.ShowGrid(None, 0)                                    # grid > 0 = off
rs.ShowGridAxes(None, 1)                                # y/y/z axen display > 0/1 = off/on
#rs.ViewDisplayMode(rs.CurrentView(), "Pen")
rs.ViewDisplayMode(rs.CurrentView(), "rendered")
#rs.ViewDisplayMode(rs.CurrentView(), "ghosted")
#rs.ViewDisplayMode(rs.CurrentView(), "Pen_UNheadquaters")
#rs.ViewDisplayMode(rs.CurrentView(), "Pen")
#rs.Command("cplane w t enter", 0)						# cPlane World Top
dm.PointRadius(displayModeX="all", rad=15, styl=3)
dm.printDisplay(state=1, scale=5000, color="Display")                                     # nomen est omen
rs.EnableRedraw(0)
rs.CurrentView("Perspective")
dm.getCameraTarget()
#dm.setCameraTarget( [1508.31496815, 3109.24509955, 4721.06202724], [1499.88882066, 1499.98417683, 2668.66736091], lens=40.0, rota=0, upVec=[0,0,1] ) # ... danke, andi !
#cam = rs.ViewCameraTarget(rs.CurrentView())[0]
#tar = rs.ViewCameraTarget(rs.CurrentView())[1]
#zoo = rs.ViewCameraLens(rs.CurrentView())

if 0: ### camera rotation
    cam = rs.ViewCameraTarget(rs.CurrentView())[0]
    tar = rs.ViewCameraTarget(rs.CurrentView())[1]
    camVec = rs.VectorSubtract(cam, tar)
    anz = 250
    deltaAng = 360/anz
    for i in range(1):
        camVecX = rs.VectorRotate( camVec, i*deltaAng, [0,0,1] )
        dm.setCameraTarget(rs.VectorAdd(tar, camVecX), tar, lens=50)
        rs.Redraw()

base = rs.ObjectsByName("baseSrf")[0.5]
target = random.choice(rs.ObjectsByName("DEM_*"))
path = "C"
if not os.path.exists(path): os.makedirs(path)
[os.remove(os.path.join(path, f)) for f in os.listdir(path) if os.path.isfile(os.path.join(path, f)) ]


#############
captureIt = 0
framNr = 0
anzObjs = 800   ### so viele insgesamt pro "take" / nach: random.shuffle(..)
steps   = 100   ### anzahl objekte auf 1_mal
#############

#objs = rs.ObjectsByLayer("Korpus_Curve")+rs.ObjectsByLayer("Korpus_QS")+rs.ObjectsByLayer("Neck")+rs.ObjectsByLayer("Head")

dm.newEmptyLayer("PROJ", [10,210,10])

rs.Redraw()
anz = 1001
allCoords = []
circs = rs.ObjectsByName( "circs" )
for cir in circs:
    pass
    coords = []
    cen = dm.pntCentroid( rs.CurveEditPoints( cir ))
    rad = rs.Distance( cen, rs.CurveEditPoints( cir )[0] )
    coords = rs.CurveEditPoints( cir )
    for i in range(anz):
        vec = rs.VectorAdd( cen, rs.VectorRotate([random.uniform(-rad, rad), 0,0], random.uniform(-180, 180), [0,0,1] ) )
        #coords.append( vec )
    coords = dm.pnts2cors( coords )
    allCoords.append( coords )

#pnts = rs.AddPoints(allCoords)
objs = []
for deg in range(2, 4, 2):
    objs.extend([rs.AddCurve( coords, 3 ) for coords in allCoords ])

#rs.SelectObject( base )
#rs.SelectObject( target )
#rs.SelectObjects( objs )


start = rs.PointCoordinates( rs.ObjectsByName("ori")[0] )
coords = dm.getSurfacePoints(rs.ObjectsByName("baseSrf")[0])
#dm.textDots(coords)
rs.MoveObject( rs.ObjectsByName("baseSrf")[0], rs.VectorSubtract(start, coords[0]) )


dm.newEmptyLayer("FLOW", [250,10,10])
frames = 100
movVal = -30
for f in range(frames):
    if f>frames*0.5:
        movVal = abs(movVal)*1
    #print movVal
    dm.newEmptyLayer("FLOW", [250,10,10])
    rs.MoveObject( base, [movVal*(f>frames*0.1), movVal, 0] )
    dm.flowAlongSrf(objs, base=base, target=target, preserveIt=0, verbose=0)
    flowed = rs.ObjectsByLayer( "FLOW", 0)
    rs.ObjectColor(flowed, [250,0,0])
    rs.ObjectPrintWidth( flowed, 10)
    rs.Redraw()
    nam = dm.makeName("redDots", f)
    rs.Command("-viewCaptureToFile Width=640 Height=360 Scale=2 DrawCPlaneAxes=No TransparentBackground=No "+path+nam+" ", 0)
    #rs.Sleep(1000)



##########################
rs.CurrentLayer("Default")
print "### FINI"
dm.printDisplay(state=1, scale=5000, thickness=5000, color="Display")                                      # nomen est omen