Solved! Go to Solution.
Building --> extrude(world.y,height) color(LUColor) set(plotArea, geometry.area)
Volume(volumeType) -->
case volumeType == "GF" :
color ("#646464")
FloorCalc
else :
color (LUColor)
set(material.opacity,0.6)
FloorCalcattr 'parcelArea = 0'
Parcel --> set(parcelArea, geometry.area) # override the value with the actual geometry value
attr FSetback = 1.5
attr BSetback = 5
attr LSetback = 5
attr RSetback = 5
attr height = 46
attr LUColor = "#ff6464"
attr GroundFloorHeight = 5
attr UpperFloorHeight = 4
attr SHAPE_Area = 0 #parcel polygon area from GDB
#@Hidden
attr plotArea = 0 # used to calc FAR
@StartRule
Lot -->
setback(FSetback) { street.front : Concrete | remainder : Sub1 }
Concrete --> color("#CCCCCC") #Grey
Sub1 --> setback(BSetback) { street.back : Concrete1 | remainder : Sub2 }
Concrete1 --> color("#CCCCCC") #Grey
Sub2 --> setback(LSetback) { street.left : Concrete2 | remainder : Sub3 }
Concrete2 --> color("#CCCCCC") #Grey
Sub3 --> setback(RSetback) { street.right : Concrete3 | remainder : Building }
Concrete3 --> color("#CCCCCC") #Grey
Building -->
set(plotArea, geometry.area)
extrude(world.y,height)
color(LUColor)
BuildingVolume3D
BuildingVolume3D -->
# the 3d volume will not be split into smaller 3d volumes ! 1 ground floor volume will be created.
split(y) {GroundFloorHeight : Volume("GF") | ~1 : AllUpperFloors}
AllUpperFloors -->
# the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)
split(y) {~UpperFloorHeight : Volume("UF")}*
Volume(volumeType) -->
case volumeType == "GF" :
color ("#646464")
Floor
else :
color (LUColor)
Floor
Floor --> comp(f){ bottom: reverseNormals FloorBottom }
FloorBottom -->
report("GFA",geometry.area)
report("FAR",geometry.area/SHAPE_Area)
set(material.opacity,0.6)// land use types from the parcel object attribute. attr PROPERTY_USE = " " ## importing.cga import ruleC2: "Report_C-2.cga" import ruleC3: "Report_C-3.cga" import ruleC3_23: "Report_C-3_23.cga" import ruleCCCOR: "Report_CC-COR.cga" import ruleCCMH: "Report_CC-MH.cga" import ruleCCMHX: "Report_CC-MHX.cga" import ruleCCOR1: "Report_C-COR1.cga" import ruleCCX: "Report_CC-X.cga" import ruleCM1: "Report_CM-1.cga" import ruleCM2: "Report_CM-2.cga" import ruleI2: "Report_I-2.cga" import ruleRM7: "Report_RM-7.cga" import ruleSCS: "Report_S-CS.cga" import ruleOther: "Report_Other.cga" @StartRule Lot--> case geometry.area > 200: case PROPERTY_USE == "C-2" : ruleC2.Lot case PROPERTY_USE == "C-3" : ruleC3.Lot case PROPERTY_USE == "C-3(23)" : ruleC3_23.Lot case PROPERTY_USE == "CC-COR" : ruleCCCOR.Lot case PROPERTY_USE == "CC-MH" : ruleCCMH.Lot case PROPERTY_USE == "CC-MHX" : ruleCCMHX.Lot case PROPERTY_USE == "C-COR1" : ruleCCOR1.Lot case PROPERTY_USE == "CC-X" : ruleCCX.Lot case PROPERTY_USE == "CM-1" : ruleCM1.Lot case PROPERTY_USE == "CM-2" : ruleCM2.Lot case PROPERTY_USE == "I-2" : ruleI2.Lot case PROPERTY_USE == "RM-7" : ruleRM7.Lot case PROPERTY_USE == "S-CS" : ruleSCS.Lot case PROPERTY_USE == "Other" : ruleOther.Lot else: ruleOther.Lot else: NIL
attr FSetback = 1.5
attr BSetback = 5
attr LSetback = 5
attr RSetback = 5
attr height = 46
attr LUColor = "#ff6464"
attr GroundFloorHeight = 5
attr UpperFloorHeight = 4
attr SHAPE_Area = 0 #parcel polygon area from GDB
@Group("Viz",4)
@Range("massOnly", "floors", "massAndFloors")
attr vizMode = "massAndFloors"
attr plotArea = 0 # used to calc FAR
@StartRule
Lot -->
setback(FSetback) { street.front : Concrete | remainder : Sub1 }
Concrete --> color("#CCCCCC") #Grey
Sub1 --> setback(BSetback) { street.back : Concrete1 | remainder : Sub2 }
Concrete1 --> color("#CCCCCC") #Grey
Sub2 --> setback(LSetback) { street.left : Concrete2 | remainder : Sub3 }
Concrete2 --> color("#CCCCCC") #Grey
Sub3 --> setback(RSetback) { street.right : Concrete3 | remainder : Building }
Concrete3 --> color("#CCCCCC") #Grey
Building -->
set(plotArea, geometry.area)
extrude(world.y,height)
color(LUColor)
BuildingVolume3D
BuildingVolume3D -->
MassViz
# the 3d volume will not be split into smaller 3d volumes ! 1 ground floor volume will be created.
split(y) {GroundFloorHeight : Volume("GF") | ~1 : AllUpperFloors}
AllUpperFloors -->
# the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)
split(y) {~UpperFloorHeight : Volume("UF")}*
Volume(volumeType) -->
case volumeType == "GF" :
color ("#646464")
Floor
else :
color (LUColor)
Floor
Floor --> comp(f){ bottom: reverseNormals FloorBottom }
FloorBottom -->
report("GFA",geometry.area)
report("FAR",geometry.area/SHAPE_Area)
MassViz
MassViz -->
case vizMode == "massOnly" :
Mass.
case vizMode == "massAndFloors" :
set(material.opacity,0.8) BuildingVolume3D.
else:
NIL
###############################################################################################################
# attributes
###############################################################################################################
@Group("SETBACKS",0)
attr FSetback = 1.5
@Group("SETBACKS")
attr BSetback = 5
@Group("SETBACKS")
attr LSetback = 5
@Group("SETBACKS")
attr RSetback = 5
@Group("HEIGHTS",1)
attr height = 46
@Group("HEIGHTS")
attr GroundFloorHeight = 5
@Group("HEIGHTS")
attr UpperFloorHeight = 4
@Group("COLORS",2)
attr LUColor = "#ff6464"
@Group("VIZ",3) @Range("massOnly", "floors", "massAndFloors")
attr vizMode = "massAndFloors"
###############################################################################################################
# generic, hidden attributes
###############################################################################################################
@Hidden
attr plotArea = 0
###############################################################################################################
# functions
###############################################################################################################
colorFunction ( volumeType ) =
case volumeType == "GF" :
"#646464"
else :
LUColor
###############################################################################################################
# parcelling
###############################################################################################################
@StartRule
Lot -->
set (plotArea, geometry.area)
setback(FSetback) { street.front : Concrete | remainder : Sub1 }
Concrete --> color("#CCCCCC") #Grey
Sub1 --> setback(BSetback) { street.back : Concrete1 | remainder : Sub2 }
Concrete1 --> color("#CCCCCC") #Grey
Sub2 --> setback(LSetback) { street.left : Concrete2 | remainder : Sub3 }
Concrete2 --> color("#CCCCCC") #Grey
Sub3 --> setback(RSetback) { street.right : Concrete3 | remainder : Building }
Concrete3 --> color("#CCCCCC") #Grey
###############################################################################################################
# building
###############################################################################################################
Building -->
extrude(world.y,height)
color(LUColor)
BuildingVolume3D
BuildingVolume3D -->
# the 3d volume will not be split into smaller 3d volumes ! 1 ground floor volume will be created.
split(y) {GroundFloorHeight : Volume("GF") | ~1 : AllUpperFloors}
AllUpperFloors -->
# the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)
split(y) {~UpperFloorHeight : Volume("UF")}*
###############################################################################################################
# volume
###############################################################################################################
Volume(volumeType) -->
color (colorFunction ( volumeType ))
MassReporting # shape for reporting, will be deleted
MassViz # shape duplicate for visualization
###############################################################################################################
# viz
###############################################################################################################
MassViz -->
case vizMode == "massOnly" :
Viz.
case vizMode == "massAndFloors" :
set(material.opacity,0.8)
Viz.
case vizMode == "floors" :
comp(f){ bottom: reverseNormals Viz. }
else:
NIL
###############################################################################################################
# reporting
###############################################################################################################
MassReporting -->
comp(f){ bottom:
report("GFA",geometry.area)
report("FAR",geometry.area/plotArea)
NIL
}