attr steps = "#FFFFFF" //have shown this as colour but actually want to have steps as a //recursion extruding away from the BaseSide if possible. BaseVolume --> comp(f) {side : BaseSide(comp.index) | bottom : NIL | top : extrude(height - Roof_Height) Mass } BaseSide (myIndex) --> case myIndex == 3 && scope.sx >= 1.5: split(x) {~1: color(grey) | 1.5 : color(steps) | ~1 color(grey)} else : color(grey)
Solved! Go to Solution.
@Group ("Building Main") attr buildingHeight = 5 @Group ("Building Main") @Range(1, 20) attr wallID = 3 @Group ("Building Main") attr baseHeight = 0.8 Lot --> extrude(world.y, buildingHeight) comp(f) { side = Facades | top : Roof.} # note the # which puts all sides in 1 shape ! Facades --> comp(f) {wallID : DoorFacade | all : WallWithWindows} minWallWidth = 0.3 # don't make an attr to keep the variation ! @Group ("Doors") attr doorWidth = 1 @Group ("Doors") attr doorHeight = 2.0 DoorFacade --> case scope.sx < doorWidth + 2 * minWallWidth : Wall else : 33%: # door centered split(x) { ~1 : WallWithWindows | doorWidth : DoorPart | ~1 :WallWithWindows} 33%: # door left split(x) { minWallWidth : WallWithWindows | doorWidth : DoorPart | ~1 :WallWithWindows} else : # door right split(x) { ~1 : WallWithWindows | doorWidth : DoorPart | minWallWidth :WallWithWindows} @Group ("Windows") attr windowBaseHeight = 0.8 @Group ("Windows") attr windowHeight = 1.2 @Group ("Windows") attr windowWidth = 1.0 windowDist = rand(.5,2) # don't make an attr to keep the variation ! WallWithWindows --> case scope.sx <= minWallWidth : Wall else : split(y) {windowBaseHeight + baseHeight : Wall | windowHeight : WindowArea | ~1 : Wall} WindowArea --> split(x) {{~windowDist : Wall | windowWidth : Window}* | ~windowDist : Wall} Window --> color(.3,.3,.4) DoorPart --> split(y) {baseHeight : Base | doorHeight : Door | ~1 : Wall} Door --> color(.3,.2,.2) @Group ("Steps") attr stepHeight = 0.19 @Group ("Steps") attr stepDepth = 0.27 Base --> split(y) {~stepHeight : Step(split.total - split.index)}* Step(index) --> extrude(stepDepth * index) Wall --> color(.8,.7,.7)
Ultimately it'd be so nice to be able to select a wall manually and then say right I'd like to use this code on this wall but that code on the others but I don't believe this is possible...
@Group ("Building Main") attr buildingHeight = 5 @Group ("Building Main") @Range(1, 20) attr wallID = 3 @Group ("Building Main") attr baseHeight = 0.8 Lot --> extrude(world.y, buildingHeight) comp(f) { side = Facades | top : Roof.} # note the # which puts all sides in 1 shape ! Facades --> comp(f) {wallID : DoorFacade | all : WallWithWindows} minWallWidth = 0.3 # don't make an attr to keep the variation ! @Group ("Doors") attr doorWidth = 1 @Group ("Doors") attr doorHeight = 2.0 DoorFacade --> case scope.sx < doorWidth + 2 * minWallWidth : Wall else : 33%: # door centered split(x) { ~1 : WallWithWindows | doorWidth : DoorPart | ~1 :WallWithWindows} 33%: # door left split(x) { minWallWidth : WallWithWindows | doorWidth : DoorPart | ~1 :WallWithWindows} else : # door right split(x) { ~1 : WallWithWindows | doorWidth : DoorPart | minWallWidth :WallWithWindows} @Group ("Windows") attr windowBaseHeight = 0.8 @Group ("Windows") attr windowHeight = 1.2 @Group ("Windows") attr windowWidth = 1.0 windowDist = rand(.5,2) # don't make an attr to keep the variation ! WallWithWindows --> case scope.sx <= minWallWidth : Wall else : split(y) {windowBaseHeight + baseHeight : Wall | windowHeight : WindowArea | ~1 : Wall} WindowArea --> split(x) {{~windowDist : Wall | windowWidth : Window}* | ~windowDist : Wall} Window --> color(.3,.3,.4) DoorPart --> split(y) {baseHeight : Base | doorHeight : Door | ~1 : Wall} Door --> color(.3,.2,.2) @Group ("Steps") attr stepHeight = 0.19 @Group ("Steps") attr stepDepth = 0.27 Base --> split(y) {~stepHeight : Step(split.total - split.index)}* Step(index) --> extrude(stepDepth * index) Wall --> color(.8,.7,.7)
const doorSide = 33% : "left" 33%: "right" else : "center"
case doorSide == "left" : split() ..
33% : split() left ..