### https://www.student.tugraz.at/kmatweber/dm2/ue_09/hue_09_emma.py
### grabbed:  2020-12-17 02:03:11
#################################


### https://iam.tugraz.at/dm2/w20/diag/dm2/ue_10/ue_10_emmaKretz.py
### grabbed:  2020-12-16 22:50:11
#################################


#### HUE10

################# _basic_setup

###___________________________
import rhinoscriptsyntax as rs
import random
import sys
sys.path.append( "P:/" )
import dm2_lib as dm2
###___________________________

rs.EnableRedraw(0)
pyramids = dm2.pyramids

for p in range(10):
    dm2.makePyramid(p, 0, 0)

#dm2.textDots(pyramids[0][4])
#dm2.textDots([ pyramids[0][3] ])

dm2.newEmptyLayer( "PROJECT::panel", [0,0,0] )

def panel_0 (pan,i) :
        
        fac_1 = random.uniform(-0.75,0.75)
        fac_2 = 0.003
        fac_3 = 0.8
        fac_4 = -0.2
        deg_1 = 1
        deg_2 = 1
        num = 130
    
        
        pnt_center = dm2.pntCentroid(pan)                           
        
        vec_a = rs.VectorSubtract(pan[1], pan[0])                   
        vec_b = rs.VectorSubtract(pan[1], pan[2])                   
        
        vec_a_scale = rs.VectorScale(vec_a, fac_1)                  
        vec_b_scale = rs.VectorScale(vec_b, fac_2)                  
        
        norm_vec = rs.VectorCrossProduct(vec_a_scale, vec_b_scale)  
        norm_vec_scale = rs.VectorScale(norm_vec, fac_4)            
        
        vec_0 = rs.VectorSubtract(pnt_center, pan[0])               
        vec_1 = rs.VectorSubtract(pnt_center, pan[1])
        vec_2 = rs.VectorSubtract(pnt_center, pan[2])
        vec_3 = rs.VectorSubtract(pnt_center, pan[3])
        
        vec_0_scale = rs.VectorScale(vec_0, fac_3)                  
        vec_1_scale = rs.VectorScale(vec_1, fac_3)
        vec_2_scale = rs.VectorScale(vec_2, fac_3)
        vec_3_scale = rs.VectorScale(vec_3, fac_3)
        
        pnt_0 = rs.VectorAdd(pan[0], norm_vec)                      
        pnt_1 = rs.VectorAdd(pan[1], norm_vec)
        pnt_2 = rs.VectorAdd(pan[2], norm_vec)
        pnt_3 = rs.VectorAdd(pan[3], norm_vec)
        
        if 1:
            pnt_0 = rs.VectorAdd(pnt_0, vec_0_scale)                
            pnt_1 = rs.VectorAdd(pnt_1, vec_1_scale)
            pnt_2 = rs.VectorAdd(pnt_2, vec_2_scale)
            pnt_3 = rs.VectorAdd(pnt_3, vec_3_scale)
            
            mov_u = rs.VectorScale( vec_0_scale, random.uniform(-0.3, 0.3) )
            mov_v = rs.VectorScale( vec_2_scale, random.uniform(-0.3, 0.3) )
            movVec = rs.VectorAdd(mov_u, mov_v) 
            pnt_0 = rs.VectorAdd(pnt_0, movVec)                     
            pnt_1 = rs.VectorAdd(pnt_1, movVec)
            pnt_2 = rs.VectorAdd(pnt_2, movVec)
            pnt_3 = rs.VectorAdd(pnt_3, movVec)
        
        
        
        crv0 = [pan[0], pan[1], pan[2], pan[3], pan[0]]     
        crv0 = rs.AddCurve(crv0, deg_1)                     
        crv1 = [pnt_0, pnt_1, pnt_2, pnt_3, pnt_0]          
        crv1 = rs.AddCurve(crv1, deg_2)                     
        
        
                            
        for n in range (num+1) :
            fac = n/num
            coord0 = dm2.pntCurvePerp(crv0, fac)     
            coord1 = dm2.pntCurvePerp(crv1, fac)
            rs.AddLine(coord0, coord1)
        rs.DeleteObjects( [crv0] )
            
            
def connect_pyras(p0=9, p1=2, divs2 = 10 ):
    
    coords_a = []
    coords_b = []
    coords_c = []

    #schlange von pyramide 0 bis 2
    for p in range(1):
        #dm2.textDots(pyramids[p][4])
    
        for s in range(divs2+1):
            fac = s/divs2
            
            cor = dm2.pntInbetween(pyramids[p0][4][1], pyramids[p1][4][1], fac)
            coords_a.append( cor )
            cor = dm2.pntInbetween(pyramids[p0][3], pyramids[p1][3], fac)
            coords_b.append( cor )
            cor = dm2.pntInbetween(pyramids[p0][4][3], pyramids[p1][4][3], fac)
            coords_c.append( cor ) 
    coords_a = rs.CullDuplicatePoints(coords_a)
    coords_b = rs.CullDuplicatePoints(coords_b)
    coords_c = rs.CullDuplicatePoints(coords_c)
    rs.AddCurve( coords_a, 1)    #linie rechts unten
    rs.AddCurve( coords_b, 1)    #linie oben spitzen
    rs.AddCurve( coords_c, 1)    #linie links unten
    panelCoords_rechts1 = []
    for i in range(divs2):
        p0 = coords_a[i]
        p1 = coords_a[i+1]
        p2 = coords_b[i+1]
        p3 = coords_b[i+0]
        panelCoords_rechts1.append([p0, p1, p2, p3, p0] )
    
    for pan in panelCoords_rechts1:
        rs.AddCurve( pan,1 )
    
    panelCoords_links1 = []
    for j in range(divs2):
        p0 = coords_c[j]
        p1 = coords_c[j+1]
        p2 = coords_b[j+1]
        p3 = coords_b[j+0]
        panelCoords_links1.append([p0, p1, p2, p3, p0] )
    
    for pan in panelCoords_links1:
        rs.AddCurve( pan,1 )
    
    for p,panel in enumerate(panelCoords_rechts1) :
            panel_0 (panel, -p)
    for p,panel in enumerate(panelCoords_links1) :
            panel_0 (panel, p)

p0=0
p1=1
divs2=10
connect_pyras(p0, p1, divs2)

p0=1
p1=2
divs2=10
connect_pyras(p0, p1, divs2)

p0=3
p1=4
divs2=1
connect_pyras(p0, p1, divs2)

p0=4
p1=5
divs2=1
connect_pyras(p0, p1, divs2)

p0=3
p1=6
divs2=13
connect_pyras(p0, p1, divs2)

p0=7
p1=6
divs2=13
connect_pyras(p0, p1, divs2)

p0=7
p1=8
divs2=2
connect_pyras(p0, p1, divs2)

p0=8
p1=9
divs2=1
connect_pyras(p0, p1, divs2)

#
#p0=2
#p1=9
#divs2=4
#connect_pyras(p0, p1, divs2)

dm2.zA()