###################################
### DM2_w24 # AGruber@tugraz.at ###
### hu_06 UN_headquaters  NYC   ### ######################################################
### paneling  / new dimensions  ### 87.5 x 22.0 meters (was lenY = 116.56 / lenX =  28.18)
################################### ######################################################


##############################
import rhinoscriptsyntax as rs
import random, time, sys   ###
sys.path.append("P:/")     ###
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(), "wireframe")
rs.Command("cplane w t enter", 0)						# cPlane World Top
dm.PointRadius(displayModeX=0, rad=3, styl=3)
dm.printDisplay(1)                                      # nomen est omen
rs.EnableRedraw(0)



###_________________________________________#
### basic settings for grid to fit UN_slab  #
###                                         # 
floors = H  = dm.H = 40                     # default=40 / incl roof
slabs  = L  = dm.L = 11                     # default=11
depth  = D  = dm.D =  4                     # default= 4 / division in building_depth
floorHeight = fH = dm.fH = 4.0              # default= 4.0 / 4.0*(H-1) = 156 meters
                                            #
################                            # get from DM_lib as dm:
UnoGridCoords  = dm.UnoGridCoords           # get gridCoords L*D*H = 1760
UnoPanelCoords = dm.UnoPanelCoords          # get panelCoords [frontPanels, backPanels, sidePanels, upSidePanels] / default arguments s.u.
################____________________________#
################
lengthVec = lVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) )) ## rs.AddPoint( dm.getUnoCoord(1, 0, 0) )
depthVec  = dVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 1, 0), dm.getUnoCoord(0, 0, 0) )) ## rs.AddPoint( dm.getUnoCoord(0, 1, 0) )
################
###########################################################################################
UnoPanelCoords = dm.getUNpanelCoords(anzL=10*7, anzH=39, anzD=3, stepL=1, stepH=1, stepD=1) ### = all ~windows_panels
BigPanelCoords = dm.getUNpanelCoords(anzL=10*1, anzH=39, anzD=3, stepL=2, stepH=6, stepD=2) ### = all ~windows_panels
UnoPanelCoords = dm.getUNpanelCoords(anzL=10*1, anzH=39, anzD=3, stepL=1, stepH=3, stepD=1) ### = standard for hu_06
###########################################################################################
##########################################################
frontPanels   = UnoPanelCoords[0] ### list of coordLists !
backPanels    = UnoPanelCoords[1]
sidePanels    = UnoPanelCoords[2]
upSidePanels  = UnoPanelCoords[3]
allPanels     = UnoPanelCoords[4]
#################################

dm.newEmptyLayer("UNO::setUp", [120,120,240])

if 1: ### SETUP >> dont' exec @ homework !
    rs.ObjectColor(rs.AddCurve( [dm.getUnoCoord(0,0,0), dm.getUnoCoord(0,0,39), dm.getUnoCoord(10,0,39), dm.getUnoCoord(10,0,0), dm.getUnoCoord(10,3,0), dm.getUnoCoord(0,3,0), dm.getUnoCoord(0,3,39), dm.getUnoCoord(10,3,39)], 1), [100,0,200])
    rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 1, 0) ), [222, 0, 0] )
    rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) ), [0, 222, 0] )
    rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 0, 2) ), [0, 0, 222] )
    rs.ObjectPrintWidth( rs.AllObjects()[0:4], 1.0 )
    #rs.ZoomExtents()
    #for coords in BigPanelCoords[4]: rs.AddCurve( coords, 1 )

if 0: ### DEMO  >> dont' exec @ homework !
    print len(frontPanels)
    dm.textDots( frontPanels[0] )
    
    for coords in frontPanels[0:10]+sidePanels:
        pass
        rs.AddPoints( coords )
        rs.AddCurve( coords, 1 )
        #rs.AddSrfPt( coords )
    #for coords in sidePanels[0:]:
    #    rs.AddPoints( coords )
    
    for coords in BigPanelCoords[4]:
        pass
        rs.AddCurve( coords, 1 )

if 0: ### DEMO  >> dont' exec @ homework !

#############:
### panel_DEF:
    def myPanel( panel, basement = 0 ):
        p0, p1, p2, p3 = panel ### get items (==coords) from list
        rs.AddLine( p0, p2 )
        if basement:
            crv = rs.AddCurve( [p0, p1, dm.pntInbetween(p1, p3), p2, p3], 1 )
            rs.ObjectPrintWidth( crv, 1 )
            rs.ObjectColor( crv, [200,0,0])
        else:
            coords = [p0, p1, p2, p3, p0]
            rs.AddCurve(  coords, 2 )

    for i,panel in enumerate(frontPanels[0:50] + sidePanels):
        pass
        basement = 0
        if i<20 or i>119:
            basement = 1
        myPanel( panel, basement = basement ) ### basement = (i<20 or i>109)
        #rs.Redraw()

#_____________________________here you go:
dm.newEmptyLayer("myPROJ", [200,100,200])

def myPanel( panel, dachl = 0 ):
    p0, p1, p2, p3 = panel
    nVec = dm.normVec3pnts( p0, p1, p2 )
    
    auskrag = 5.9
    zVal = p0[2]
    auskrag = dm.reMap(zVal, 0, 156, 20.0, 1.0)
    nVec = rs.VectorScale( nVec, auskrag)
    
    coords0 = [p0, p1, p2, p3, p0]
    rs.AddCurve( coords0, 1)
    
    p10 = dm.pntInbetween( p1, p0, 0.3 )
    p23 = dm.pntInbetween( p2, p3, 0.3 )
    p12 = dm.pntInbetween( p1, p2, 0.5 )
    
    p12 = rs.VectorAdd( p12, nVec )
    
    anz = 111
    coordsA = [p10, p1, p12, p2, p23]
    crvA = rs.AddCurve( coordsA, 2)
    crvI = rs.AddCurve( [p10, p1, p2, p23], 2)
    coordsDivA = rs.DivideCurve( crvA, anz, 0)
    coordsDivI = rs.DivideCurve( crvI, anz, 0)
    
    if dachl:
        for i in range(anz):
            rs.AddCurve( [coordsDivA[i], coordsDivI[i]] )
    
    p0X = coordsDivA[ int( anz*0.3 ) ] ### int == "type_casting"
    p3X = coordsDivA[ int( anz*0.7 ) ] ### int == "type_casting"
    
    rs.AddLine( p0, p0X )
    rs.AddLine( p3, p3X )
    
    #rs.AddCurve( [p0, p1, p2, p3, p0], 2)

def myPanel_2(panel, dachl = 0):
    p0, p1, p2, p3 = panel
    rs.AddCurve([p0,p1,p2,p3,p0])
    coords = rs.DivideCurve(rs.AllObjects[0], 1001, 0)
    zVal = p0[2]
    anz = int(dm.reMap(zVal, 0, 156, 204, 51))
    for i in range(1001):
        rs.AddCurve([random.choice(coords),random.choice(coords)])

for i,panel in enumerate(frontPanels[0:]):
     dm.esc()
     dachl = random.randint(0, 115)*(i > 20)
     if i < 20:
         pass
         #dachl = 0
     myPanel( panel, dachl=dachl )


#for i in range(10):
#    rs.AddCurve( frontPanels[i], 1 )
#    rs.AddCurve( frontPanels[i+20], 1 )
#
#dm.textDots( frontPanels[3] )
##rs.AddSrfPt( frontPanels[3] )

#____________________________:here you end

#################################
#rs.ZoomExtents()
rs.EnableRedraw(1) ### 4 the MACs
dm.printDisplay(1)
dm.newEmptyLayer("Default")