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. } }