################################### ### 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("C:/Users/frede/Desktop/dm2/lib") ### 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.ViewDisplayMode(rs.CurrentView(), "rendered") 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=5, stepD=1) ### = standard for hu_06 #printPanels(UnoPanelCoords, "Uno1") #printPanels(UnoPanelCoords, "Big") #printPanels(UnoPanelCoords, "Uno2") ########################################################################################### ########################################################## frontPanels = UnoPanelCoords[0] ### list of coordLists ! backPanels = UnoPanelCoords[1] sidePanels = UnoPanelCoords[2] upSidePanels = UnoPanelCoords[3] allPanels = UnoPanelCoords[4] ################################# #############: #_____________________________here you go: dm.newEmptyLayer("myPROJ", [00,10,200]) def panelType1and2(panel, divisionPointsQuantity = 32, panelType = 0): p0,p1,p2,p3 = panel panelBaseCoordinates = panel panelBaseCoordinates.append(panelBaseCoordinates[0]) baseCurve = rs.AddCurve(panelBaseCoordinates, 1) normalVector = dm.normVec3pnts(p0, p1, p2) panelCenterBase = dm.pntInbetween(p0, p2, 0.5) zValue = p0[2] unHeight = 156 panelFaceDistance = 15 scaleFactor = dm.reMap (i=zValue, iMin=0, iMax=unHeight, oMin=panelFaceDistance, oMax=1) maxColorValue = 255 minColorValue = 0 colorValue = int( dm.reMap( i=zValue, iMin=0, iMax=unHeight, oMin=minColorValue, oMax=maxColorValue, limit=True) ) # Creating a protruding face panelFaceVector = rs.VectorScale(normalVector, scaleFactor) panelCenterFace = rs.VectorAdd(panelCenterBase, panelFaceVector) if divisionPointsQuantity%2 != 0: divisionPointsQuantity = divisionPointsQuantity + 1 baseCurvePoints = rs.DivideCurve(baseCurve, divisionPointsQuantity) halfLengthBaseCurve = int(len(baseCurvePoints) / 2) for i in range(halfLengthBaseCurve): if panelType == 0: baseCurvePoint1 = baseCurvePoints[i] baseCurvePoint2 = baseCurvePoints[-i] else: baseCurvePoint1 = baseCurvePoints[i] baseCurvePoint2 = baseCurvePoints[i+halfLengthBaseCurve] curveFace = rs.AddCurve([baseCurvePoint1, panelCenterFace, baseCurvePoint2], 2) rs.ObjectColor(curveFace, [colorValue, 50, 255-colorValue]) def panelType3(panel, divisionPointsQuantity = 32): # Setup base curve p0Base,p1Base,p2Base,p3Base = panel panelBaseCoordinates = panel panelBaseCoordinates.append(panelBaseCoordinates[0]) panelFaceCoordinates = [] baseCurve = rs.AddCurve(panelBaseCoordinates, 1) rs.ObjectColor(baseCurve, [150, 0, 0]) # Setup other points panelCenterBase = dm.pntInbetween(p0Base, p2Base, 0.5) normalVector = dm.normVec3pnts(p0Base, p1Base, p2Base) panelFaceDistance = 2 # Creating a protruding face panelFaceVector = rs.VectorScale(normalVector, panelFaceDistance/10) panelCenterFace = rs.VectorAdd(panelCenterBase, panelFaceVector) # Center of the face, that is in panelFaceVector = rs.VectorScale(normalVector, panelFaceDistance) faceCurve = rs.CopyObject(baseCurve, panelFaceVector) baseCurvePoints = rs.DivideCurve(baseCurve, divisionPointsQuantity) faceCurvePoints = rs.DivideCurve(faceCurve, divisionPointsQuantity) for i in range(divisionPointsQuantity): lineFaceToBase = rs.AddLine(baseCurvePoints[i], faceCurvePoints[i]) curveFaceToCenter = rs.AddCurve([faceCurvePoints[i], panelCenterFace], 10) rs.ObjectColor(lineFaceToBase, [230, 100, 100]) rs.ObjectColor(curveFaceToCenter, [75, 50, 175]) from math import ceil def panelType4(panel, divisionPointsQuantity = 32, panelFaceDistance=2, numberOfMainPoints=10, stepForFillingMoreCurves = 1): # Setup base curve p0Base,p1Base,p2Base,p3Base = panel panelBaseCoordinates = panel panelBaseCoordinates.append(panelBaseCoordinates[0]) panelFaceCoordinates = [] baseCurve = rs.AddCurve(panelBaseCoordinates, 1) rs.ObjectColor(baseCurve, [150, 0, 0]) # Setup other points panelCenterBase = dm.pntInbetween(p0Base, p2Base, 0.5) normalVector = dm.normVec3pnts(p0Base, p1Base, p2Base) # Creating a protruding face panelFaceVector = rs.VectorScale(normalVector, panelFaceDistance) faceCurve = rs.CopyObject(baseCurve, panelFaceVector) panelFaceVector = rs.VectorScale(normalVector, panelFaceDistance) panelCenterFace = rs.VectorAdd(panelCenterBase, panelFaceVector) # Center of the face, that is in baseCurvePoints = rs.DivideCurve(baseCurve, divisionPointsQuantity) faceCurvePoints = rs.DivideCurve(faceCurve, divisionPointsQuantity) # Connect Face to Base for i in range(divisionPointsQuantity): lineFaceToBase = rs.AddLine(baseCurvePoints[i], faceCurvePoints[i]) rs.ObjectColor(lineFaceToBase, [155, 111, 111]) # Filling the Face # numberOfMainPoints = 20 # ADD PARAM start = random.randint(0, divisionPointsQuantity-numberOfMainPoints) end = start+numberOfMainPoints mainPoints = faceCurvePoints[start:end] pointsToConnectTo = faceCurvePoints[0:start] + faceCurvePoints[end:divisionPointsQuantity] pointsToConnectToQuantity = len(pointsToConnectTo) pointsConnectedTo = 0 curves = [] curveColor = [100, 100, 100] while pointsConnectedTo= pointsToConnectToQuantity: break # Adding more curves curvesQuantity = len(curves) for i, curve in enumerate(curves): curvesBetween = rs.AddTweenCurves(curve, curves[(i+stepForFillingMoreCurves)%curvesQuantity], 3) rs.ObjectColor(curvesBetween, curveColor) rs.ObjectPrintWidth(curvesBetween, 0.2) def dividePanel( panel=allPanels[0], maxPanels=25, minHig=4.0): dm.esc() if maxPanels>500: maxPanels=500 if rs.Distance( panel[0], panel[1] ) > minHig*2: allPanels.remove( panel ) pMid = dm.pntInbetween(panel[0],panel[2]) allPanels.append([panel[0], dm.pntInbetween(panel[0],panel[1]), pMid, dm.pntInbetween(panel[3],panel[0])]) allPanels.append([dm.pntInbetween(panel[0],panel[1]), panel[1],dm.pntInbetween(panel[1],panel[2]), pMid]) allPanels.append([pMid, dm.pntInbetween(panel[1],panel[2]), panel[2], dm.pntInbetween(panel[2],panel[3])]) allPanels.append([dm.pntInbetween(panel[0],panel[3]), pMid, dm.pntInbetween(panel[2],panel[3]), panel[3]]) if len(allPanels) <= maxPanels : return dividePanel( panel=random.choice( allPanels[0: int(len(allPanels)*0.666)]), maxPanels=maxPanels ) def drawPanels(panels, divisionPointsQuantity=32, type='1', base=True): for f, panel in enumerate(panels): dm.esc() if base == True or (base and f > 19): if type == '1': panelType1and2(panel, divisionPointsQuantity=divisionPointsQuantity, panelType=0) elif type == '2': panelType1and2(panel, divisionPointsQuantity=divisionPointsQuantity, panelType=1) elif type == '3': panelType3(panel, divisionPointsQuantity=divisionPointsQuantity) elif type == '4': panelType4(panel, divisionPointsQuantity = divisionPointsQuantity, panelFaceDistance=3, numberOfMainPoints = random.randint(1, int(divisionPointsQuantity/2)), stepForFillingMoreCurves=1) if f%10==0: pass rs.Redraw() # Redraws all views frontPanelsVertices = [ dm.getUnoCoord(0,0,0), dm.getUnoCoord(0,0,39), dm.getUnoCoord(10,0,39), dm.getUnoCoord(10,0,0), ] sidePanelsVertices = [ dm.getUnoCoord(0,3,0), dm.getUnoCoord(0,3,39), dm.getUnoCoord(0,0,39), dm.getUnoCoord(0,0,0), ] allPanels = [sidePanelsVertices[0:]] dividePanel(sidePanelsVertices, 25) sidePanels = allPanels[0:] allPanels = [frontPanelsVertices[0:]] dividePanel(frontPanelsVertices, 50) frontPanels = allPanels[0:] drawPanels(sidePanels[0:], base=True, type='1') drawPanels(frontPanels[0:], base=True, type='4') # x.Add params to type 4 # x.Rewrite divide Panels # x.Make it easier to alter between type of panels #____________________________:here you end ################################# #rs.ZoomExtents() rs.EnableRedraw(1) ### 4 the MACs dm.printDisplay(1) dm.newEmptyLayer("Default")