##################################
### DM2_w23 # AGruber@tugraz.at ###
### hu_06 UN_headquaters  NYC   ###
### paneling                    ###
###################################


##############################
import rhinoscriptsyntax as rs
import random, time, sys   ###
sys.path.append("P:\WWW\daveh2\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(), "wireframe")
rs.Command("cplane w t enter", 0)						# cPlane World Top
dm.PointRadius(displayModeX=0, rad=3, styl=3)
dm.printDisplay(0)                                      # 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.
################____________________________#

dm.newEmptyLayer("UNO::setUp", [120,120,140])


##################
depthVec  = dVec = dm.dVec
lengthVec = lVec = dm.lVec
##################

if 1: ### SETUP >> dont' exec @ homework !
    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)
    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:3], 1.0 )
    #rs.AddPoints( UnoGridCoords )
    rs.ZoomExtents()

#UnoPanelCoords = dm.getUNpanelCoords(anzL=10, anzH=39, anzD=3, stepL=1, stepH=1, stepD=1)
frontPanels   = UnoPanelCoords[0]
backPanels    = UnoPanelCoords[1]
sidePanels    = UnoPanelCoords[2]
upSidePanels  = UnoPanelCoords[3]
allPanels     = UnoPanelCoords[4]



### DEMO panel
def myPanel_0( panelCoords, tDots=0 ):
    p0,p1,p2,p3 = panelCoords
    if tDots:
        dm.textDots(panelCoords)
    rs.AddCurve( [p0,p1,p2], 2)
    nVec = dm.normVec3pnts( p0,p1,p2 )
    nVec = rs.VectorScale(nVec, rs.Distance(p0, p1)*0.3)
    cenPt = dm.pntCentroid([p0,p1,p2])
    rs.AddCurve( [cenPt, rs.VectorAdd(cenPt, nVec), p3], 1 )


for  i, panelCoords in enumerate(frontPanels[0:]):
    pass
    #rs.AddCurve( panelCoords, 1)
    #myPanel_0( panelCoords, 0 )

for  i, panelCoords in enumerate(backPanels[0:]):
    pass
    #rs.AddCurve( panelCoords, 1)
    #myPanel_0( panelCoords )

for  i, panelCoords in enumerate(sidePanels[0:]):
    pass
    #myPanel_0( panelCoords)

for  i, panelCoords in enumerate(upSidePanels[0:]):
    pass
    #myPanel_0( panelCoords, 0)

for  i, panelCoords in enumerate(allPanels[0:]):
    pass
    #myPanel_0( panelCoords,  tDots=0)



#_____________________________here you go:

dm.newEmptyLayer("myPROJ", [100,100,100])

#Front
if 1:
 def myPanel(panel, normLen=1.5):
    p0, p1, p2, p3 = panel
    crv = rs.AddCurve(panel)
    lin = rs.AddLine(p0, p2)
    zVal = p0[2]
    nVec1 = dm.normVec3pnts(p0, p1, p2)
    Balkon=rs.AddArcPtTanPt(p3,nVec1,p0)
    nVec = rs.VectorScale(nVec1, normLen * zVal * 0.008)
    cenPt = dm.pntCentroid(panel)
    rs.AddPoint(cenPt)
    rs.AddCurve([p0, rs.VectorAdd(cenPt, nVec), cenPt], 1)
    rs.AddCircle(cenPt, 2)
    rdPt = dm.pntInbetween(p3, p2, 0.3)
    rs.AddLine(rdPt, p3)
    rs.AddCurve([p3, rs.VectorAdd(cenPt, nVec), cenPt], 1)
    rdPt1 = dm.pntInbetween(p3, p0, 1)
    rs.AddLine(rdPt1, p3)
    rs.AddCurve([rdPt1, rs.VectorAdd(cenPt, nVec), cenPt], 1)
    rs.ObjectColor(Balkon,[0,0,0])
#BackPanels

 def myPanelb(panel, normLen=1.5):
    p0, p1, p2, p3 = panel
    nVec = dm.normVec3pnts(p0, p1, p2)
    centerPt = cP = dm.pntCentroid(panel)
    zVal = cP[1] 
    pointVorne = pV = rs.VectorAdd(cP, rs.VectorScale(nVec, zVal*0.005))
    rs.AddLine(p0, pV)
    rs.AddLine(p1, pV)
    rs.AddLine(p2, pV)
    rs.AddLine(p3, pV)
    Balkon=rs.AddArcPtTanPt(p3,nVec,p0)
    rs.ObjectColor(Balkon,[0,0,0])
    
#SidePanel
 def myPanelc(panel, normLen=1.5):
    p0, p1, p2, p3 = panel
    zVal = p0[2]
    rs.AddCurve(panel)
    rs.AddLine(p0, p2)
    nVec = dm.normVec3pnts(p0, p1, p2)
    centerPt = cP = dm.pntCentroid(panel)
    zVal = cP[2]
    pointv = pV = rs.VectorAdd(cP, rs.VectorScale(nVec,zVal*0.02))
    rs.AddLine(cP, pV)
    rs.AddCurve([p0, pV, p3], 1)




 for panel in backPanels:
    myPanelb(panel, normLen=11)

 for panel in frontPanels:
    myPanel(panel, normLen=10)
    
 for panel in sidePanels:
    myPanelc(panel, normLen=10)
 for panel in upSidePanels:
    myPanelc(panel, normLen=10)
####



#____________________________:here you end


rs.ZoomExtents()
rs.EnableRedraw(1) ### 4 the MACs
dm.printDisplay(1)
dm.newEmptyLayer("Default")