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) FloorCalc
attr '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 }