### https://iam.tugraz.at/diag/dm2/ue_05/_ue_05_snake_tst_01.py
### grabbed:  2021-11-05 10:42:25
#################################


#######################################
### DM2_w21 # AGruber@tugraz.at     ###
### dm2_lib # SNAKE                 ###
#######################################

##############################
import rhinoscriptsyntax as rs
import random, time, itertools
import sys
sys.path.append("P:/WWW\lorax234\dm2\import")          ### add (your !) path to rhino's default/search path
import dm2_lib as dm2
##############################


rs.UnitSystem(4)                                        # km = 5, meters = 4, cm = 3 etc
rs.Command("-groundplane Options On=No enter enter", 0) # groundplane > off
rs.ShowGrid(None, 0)
rs.ShowGridAxes(None, 0)
rs.EnableRedraw(0)
rs.ViewDisplayMode(view=None, mode="Wireframe")
dm2.eA()
rs.Redraw()


if 1:               ### SNAKE
    allCenters = []
    tetraCoords = dm2.getTetraCoords( points=dm2.pointsX, flipH=0, flipAB=0, drawTetra=0, drawAll=0 )
    coords = rs.CullDuplicatePoints( [cor for list in tetraCoords for cor in list ] )
    center = dm2.pntCentroid( rs.CullDuplicatePoints( [cor for list in tetraCoords for cor in list ] ) )
    allCenters.append( dm2.pntCentroid( rs.CullDuplicatePoints( [cor for list in tetraCoords for cor in list ] ) ) )
    a = rs.Distance(tetraCoords[0][0], tetraCoords[0][1])
    h = a/3.0*(6.0**0.5)
    print "\n *** a =", a, "h =", h
    
    for fac in tetraCoords:
        rs.AddSrfPt( fac )
    rs.ObjectColor( rs.JoinSurfaces( rs.AllObjects()[0:4], delete_input=1) , [200,0,0] )
    
    allTetraCoords = [tetraCoords]
    for i in range(301):
        dm2.esc()
        next = random.randint(1,3)
        tetraCoords = dm2.getTetraCoords( points=allTetraCoords[-1][next], flipH=0, flipAB=0, drawTetra=0, drawAll=0 )
        center = dm2.pntCentroid( rs.CullDuplicatePoints( [cor for list in tetraCoords for cor in list ] ) )
        nextOk = 1
        if len(allCenters) > 1:
            for cenX in allCenters[0:-2]:
                if rs.Distance(center, cenX) < h*1.7:
                    nextOk *= 0
                    rs.AddLine( center, cenX )
                    break
        if nextOk:
            allCenters.append( center )
            coords = tetraCoords
            for fac in tetraCoords:
                rs.AddSrfPt( fac )
            col = len(rs.ObjectsByType(16))*2
            if col>255: col=255
            rs.ObjectColor( rs.JoinSurfaces( rs.AllObjects()[0:4], delete_input=1) , [col,col,0] )
            rs.ObjectName( rs.AllObjects()[0], "tetra_"+str(i) )
            allTetraCoords.append(tetraCoords)
            #print len(allTetraCoords)
            rs.ZoomExtents()
            rs.Redraw()
rs.ViewDisplayMode(view=None, mode="Shaded")

######################
#______4_lazy_experts:
if 1:
    rs.ZoomExtents()
    rs.Command("-zoom Factor 0.95 enter", 0)
    rs.Redraw()
if 0:
    rs.ViewDisplayMode(view=None, mode="Wireframe")
    rs.Redraw()
    path = "P:/ue_05/images/"
    name = "tst.png"
    rs.Command("-viewCaptureToFile Width=480  Height=360  Scale=1.5 TransparentBackground=Yes "+path+name, 0)
    name = "tst_"+str(int(time.time()))+".png"
    rs.Command("-viewCaptureToFile Width=480  Height=360  Scale=2 TransparentBackground=No  "+path+name, 0)
