Using FAR/GFR and Ground Coverage

07-19-2017 08:55 PM
New Contributor II

Hi All,

I have recently watched a video which is very impressive, which is very important for urban design.

Designing Our Future – Urban Redevelopment Authority

I have been trying to build similar rule file and functions, but I am not able to get that functions.

@6:00 in the video, there is a function using the GFR and coverage. I am looking to build similar function for FAR/GFR, Ground Coverage and Floor variation that has been shown. Can anyone help me out with this. I am using Advanced 2015.2 version of CityEngine. 



Tags (2)
6 Replies
New Contributor II

The closest thing I've found for FAR as a generator of form is this tutorial here by Matt Buehler: GFA & FAR Calculations with CityEngine - YouTube 

0 Kudos
New Contributor II

Hi Brendan,

Thanks for the video it was very helpful, I am actually looking at bigger plot level generation of building based on FAR and ground coverage. With the help of this video I tried to make a rule where I have split the plot into parts based on there input dimension, but I am unable to achieve the FAR value and Ground coverage. Basically I am splitting a bigger parcel by the following code

Lot -->
split(x) {{~Length : SPLITZ | ~Length : SPLITZ | Road_Width : Road_Color}* | ~Length : SPLITZ }

split(z) {{~Width : DevelopLot | ~Width : DevelopLot | Road_Width : Road_Color}* | ~Width : DevelopLot }

DevelopLot -->
offset(-((sqrt(geometry.area)-sqrt(Gcover*(geometry.area)))/2)) Test_2

Test_2 --> comp(f){inside: FootprintReach | border: Lawn_Color}    //////

FootprintReach -->
ReachRecursion(MaxFAR * geometry.area)

ReachRecursion(restArea) -->
case restArea < geometry.area(bottom) :
else :
extrude(world.y, FloorHeightFunction)
set (CurrentFloorIndex, CurrentFloorIndex +1)
comp(f) { top : ReachRecursion(restArea - geometry.area) | all : NIL}

VisualizationReach (VolumeType) -->
case VolumeType == 1 :
else :

I guess the issue is in my code that I am duplicating my ground area in each plot because of which the building is having same height regardless of FAR and Ground coverage.


The intention is to make a rule file like I have seen in the video where you can change your dimension of the plot and also change FAR w.r.t ground coverage and also having a floor variation parameter.

0 Kudos
Esri Regular Contributor

Yes, you are correct.  The reason why all 9 buildings are the same height is because they all have the same MaxFAR value and the same geometry.area value, and these are the two values that are used to calculate the reachable GFA value that is passed into the first call of ReachRecursion().  They all have the same geometry.area value because they were created using the splits in x and z which created plots of the same size.  If you want different size buildings, you'll have to create building footprints of different sizes, or you'll have to change the MaxFAR value for each of the buildings.

To create building footprints, these operations might be helpful:  innerRectangle, split, splitArea, offset, setback, shapeL, shapeU, shapeO, convexify.

To add variation, you can use case statements, stochastic rules, the p() function which calculates probability, and the rand() function.

Conditional Rule 

Stochastic Rule 

p Function 

rand Function 

New Contributor II

Its been quite some time for this post.

Thanks Cherly, I have used most of the expression suggested by you. 

I have some query regarding this, Since we can achieve total number of floors from ((FAR*SiteArea)/SiteArea). Can this be applied with a given Minimum and Maximum floors per lot. So that all the buildings in the plot will not cross total number of floors given and can be randomize the heights between maximum floors and minimum floors.

I hope this make sense, I able to find the logic but its difficult to put in CGA Script.



0 Kudos
Esri Regular Contributor

Yes, you can put another check in your recursion to check if the number of floors reached is above the minimum and below the maximum.  But, then if the minimum is set to something impossible for the max FAR, then you'll have to choose which criteria is more important to obey.

0 Kudos
New Contributor II


I have tried using recursion to check the floors generated, but somehow its not generating exactly the total number of floors. I have attached the cga script bellow , can you help me where I am going wrong.

Thanks in advance

0 Kudos