Solved! Go to Solution.
#####################################################################################
# ATTRS
#####################################################################################
@Group("BUILDING",0) @Order(0)
attr nFloors = 15
@Group("BUILDING") @Order(1)
attr groundFloorHeight = 5.5
@Group("BUILDING") @Order(2)
attr upperFloorHeight = 3.5
@Group("BUILDING") @Order(3)
attr volumeChange_1_floor = 2
@Group("BUILDING") @Order(4)
attr volumeChange_2_floor = 5
@Group("1",1) @Order(0) @Range(0,5)
attr frontSetback_1 = 0
@Group("1") @Order(1) @Range(0,5)
attr backSetback_1 = 5.9
@Group("1") @Order(2) @Range(0,5)
attr sideSetback_1 = 0
@Group("2",2) @Order(0) @Range(0,5)
attr frontSetback_2 = 0
@Group("2") @Order(1) @Range(0,5)
attr backSetback_2 = 0
@Group("2") @Order(2) @Range(0,5)
attr sideSetback_2 = 0
@Group("3",3) @Order(0) @Range(0,5)
attr frontSetback_3 = 5
@Group("3") @Order(1) @Range(0,5)
attr backSetback_3 = 0
@Group("3") @Order(2) @Range(0,5)
attr sideSetback_3 = 2
#####################################################################################
# FUNCTIONS
#####################################################################################
floorHeightFunction(floorID) =
case floorID == 1:
groundFloorHeight
else :
upperFloorHeight
setbackID (n) =
case n >= rint(volumeChange_2_floor) :
3
case n >= rint(volumeChange_1_floor) :
2
else :
1
setbackDimension (n, side) =
case setbackID(n) == 3:
case side == "front" : frontSetback_3
case side == "back" : backSetback_3
else : sideSetback_3
case setbackID(n) == 2:
case side == "front" : frontSetback_2
case side == "back" : backSetback_2
else : sideSetback_2
else :
case side == "front" : frontSetback_1
case side == "back" : backSetback_1
else : sideSetback_1
#####################################################################################
# START
#####################################################################################
@StartRule
Shape -->
BuildingRecursion(1) # start with floor '1' = ground floor
BuildingRecursion(n) -->
case n > rint(nFloors) :
NIL
else :
extrude(world.y, floorHeightFunction(n))
FloorVolume(n)
# back to recursion
comp(f) {top : BuildingRecursion(n + 1)}
FloorVolume(n) -->
comp(f) {bottom:
reverseNormals
alignScopeToAxes(y)
shapeO(setbackDimension (n, "front"),setbackDimension (n, "side"),setbackDimension (n, "back"),setbackDimension (n, "side")) { shape : NIL | remainder :
extrude(world.y, floorHeightFunction(n))
Floor.
}
}