###################################
### DM2_w25 # AGruber@tugraz.at ###
### DEMO flowAlongSrf           ###  need dachstein_flow_demo.3dm !
###################################

##############################
import rhinoscriptsyntax as rs
import random, time, sys   ###
sys.path.append("P:/")     ###
sys.path.append("P:/WWW/limafi/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=0, rad=3, styl=3)               # 0 => wireframe | info: (.., verbose=1)
dm.PointRadius(displayModeX=1, rad=4, styl=1)               # 1 => shaded    | info: (.., verbose=1)
dm.PointRadius(displayModeX=2, rad=2, styl=0)               # 2 => rendered  | info: (.., verbose=1)
dm.printDisplay(state=True, scale=1000)                              # nomen est omen
rs.EnableRedraw(False)


target = rs.ObjectsByName("GIS")[0]
base   = rs.ObjectsByName("base")[0]

#objs = rs.ObjectsByName("kreuz_sm") ### rug/teppich
#rug = rs.ObjectsByName("tst_crv")[0]
#objs = rs.ObjectsByLayer("pattern::crv")[0:]
objs = rs.ObjectsByLayer("Punkte")[0:]
#objs = rs.ObjectsByLayer("Elfi::txt")[0:]
#objs = rs.ObjectsByLayer("Elfi::txt_simple")[-5:]
#objs = rs.ObjectsByLayer("Elfi::srf")[0:8]


#################
### goto startPos == move base_srf
basCoords = dm.getSurfacePoints(base)
tarCoords = dm.getSurfacePoints(target)
#dm.textDots(basCoords)
#dm.textDots(tarCoords[-1:])

### base return to startPos
rs.MoveObject( base, rs.VectorSubtract(tarCoords[-1], basCoords[1]))
rs.Redraw()
dm.setTime()
for i in range(2):
    dm.esc()
    dm.newEmptyLayer("FLOW::srf", [11,111,111])
    rs.MoveObject( base, [500, random.uniform(-200,200), 0] )
    #dm.flowAlongSrf(objs, base=base, target=target, preserveIt=True, verbose=2)
    dm.flowAlongSrf(objs, base, target, preserveIt=True, verbose=1)
    rs.ZoomBoundingBox( rs.BoundingBox( rs.ObjectsByLayer("FLOW::srf" )))
    rs.Command("-zoom Factor 0.30 enter", False) # change zoom for better framing

    #dm.getTime(1)


########## 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")
dm.getTime(1)