# Built form - four towers on a podium

970
2
10-09-2016 02:48 PM
New Contributor III

We're writing a write a built form rule that consists of a podium and four towers. Each tower is to have their own configurable setbacks.

We've tried placing a splitArea command with a splitArea command, but this simply creates

splitArea(z) { ~1 : splitArea(x) { '0.5: TowerLots}*
| ~1 : splitArea(x) {'1 : TowerLots}*
}

split.index 0 is tower 1

split.index 1 is tower 1

split.index 2 is tower 2

split.index 3 is tower 2

Wondering if anyone has any ideas on how best to split the podium into four so we can assign a tower to each of the split indexes?

i.e.

split.index 0 is tower 1

split.index 1 is tower 2

split.index 2 is tower 3

split.index 3 is tower 4

Thanks.

Tags (4)
1 Solution

Accepted Solutions
by
Regular Contributor

The split.index is overwritten on a new split. You're splitting once, creating two polygons (index 0 and 1), and then you're splitting those too, creating index 0 and 1 or each. AFAIK you'd have to store the index info somewhere, like this:

``````attr CumulativeSplitIndex = ""

@StartRule
Lot -->
splitArea(z){ '0.5: TowerLots1}*

TowerLots1 -->
set(CumulativeSplitIndex, "z"+split.index)
splitArea(x){ '0.5: TowerLots2}*

TowerLots2 -->
set(CumulativeSplitIndex, CumulativeSplitIndex+"x"+split.index)
print (CumulativeSplitIndex)‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍``````

This should give you addressable lots for a conditional rule. Alternatively, you could of course do it all manually, like this:

``````attr SetBack_1 = 0
attr SetBack_2 = 0
attr SetBack_3 = 0
attr SetBack_4 = 0

@StartRule
Lot -->
splitArea(z) {
'0.5: Split_Z_1 | '0.5: Split_Z_2
}

Split_Z_1 -->
splitArea(x) {
'0.5: Split_X_1_1 | '0.5: Split_X_1_2
}

Split_Z_2 -->
splitArea(x) {
'0.5: Split_X_2_1 | '0.5: Split_X_2_2
}

Split_X_1_1 -->
setback(SetBack_1){all: X | remainder: Tower}
# repeat for rest

Tower --> extrude (10)‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍``````
2 Replies
by
Regular Contributor

The split.index is overwritten on a new split. You're splitting once, creating two polygons (index 0 and 1), and then you're splitting those too, creating index 0 and 1 or each. AFAIK you'd have to store the index info somewhere, like this:

``````attr CumulativeSplitIndex = ""

@StartRule
Lot -->
splitArea(z){ '0.5: TowerLots1}*

TowerLots1 -->
set(CumulativeSplitIndex, "z"+split.index)
splitArea(x){ '0.5: TowerLots2}*

TowerLots2 -->
set(CumulativeSplitIndex, CumulativeSplitIndex+"x"+split.index)
print (CumulativeSplitIndex)‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍``````

This should give you addressable lots for a conditional rule. Alternatively, you could of course do it all manually, like this:

``````attr SetBack_1 = 0
attr SetBack_2 = 0
attr SetBack_3 = 0
attr SetBack_4 = 0

@StartRule
Lot -->
splitArea(z) {
'0.5: Split_Z_1 | '0.5: Split_Z_2
}

Split_Z_1 -->
splitArea(x) {
'0.5: Split_X_1_1 | '0.5: Split_X_1_2
}

Split_Z_2 -->
splitArea(x) {
'0.5: Split_X_2_1 | '0.5: Split_X_2_2
}

Split_X_1_1 -->
setback(SetBack_1){all: X | remainder: Tower}
# repeat for rest

Tower --> extrude (10)‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍``````
New Contributor III

Thanks very much LR that's done the trick!