<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Recursive tower has extra walls in ArcGIS CityEngine Questions</title>
    <link>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438985#M5993</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I've got a CGA rule that creates a building that has a pedestal and 2 towers on top of the pedestal. The towers are set back from the edge of the pedestal and then extruded, they look okay as well except that duplicate walls are created that extend from the edge of the pedestal, as in the image below:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[ATTACH=CONFIG]30640[/ATTACH]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;the code I used is below, can anyone tell me what I did to cause this phenomenon?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;Pedestal --&amp;gt;&amp;nbsp; extrude(world.y, ((Num_Pedestal_Floors * Upperfloor_Height) + (Groundfloor_Height - Upperfloor_Height)))&amp;nbsp; PedBuildingVolume3D&amp;nbsp; PedBuildingVolume3D --&amp;gt;&amp;nbsp; case (Groundfloor_Height != (Num_Pedestal_Floors * Upperfloor_Height) + (Groundfloor_Height - Upperfloor_Height)) : #pedestal height is NOT equal to height of just the ground floor &amp;nbsp; # the 3d volume will be split into smaller 3d volumes ! 1 ground floor volume will be created. &amp;nbsp; split(y) {Groundfloor_Height : Volume("GF") | ~1 : PedAllUpperFloors}&amp;nbsp; else: &amp;nbsp; Volume("GF1") &amp;nbsp; Towers&amp;nbsp;&amp;nbsp; PedAllUpperFloors --&amp;gt;&amp;nbsp; # the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)&amp;nbsp; split(y) {~Upperfloor_Height : Volume("UF")}*&amp;nbsp; Towers&amp;nbsp;&amp;nbsp; Volume(volumeType) --&amp;gt;&amp;nbsp; case volumeType == "GF1" : &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff == 0)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; else: &amp;nbsp;&amp;nbsp; NIL&amp;nbsp; case volumeType == "GF" : &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff == 0)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; else: &amp;nbsp;&amp;nbsp; NIL&amp;nbsp; case volumeType == "UF" : &amp;nbsp; case (((split.index + 1) &amp;lt;= (NumFlrsComm - 1)) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt; 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case (((split.index + 1) &amp;gt; (NumFlrsComm - 1)) &amp;amp;&amp;amp; (NumFlrMix &amp;gt; 0) &amp;amp;&amp;amp; ((split.index + 1) &amp;lt;= ((NumFlrsComm + NumFlrMix) - 1))): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case (((split.index + 1) &amp;gt; ((NumFlrsComm - 1) + (NumFlrMix - 1))) &amp;amp;&amp;amp; (NumFlrOff &amp;gt; 0) &amp;amp;&amp;amp; ((split.index + 1) &amp;lt;= ((NumFlrsComm + NumFlrMix + NumFlrOff) - 1))): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index + 1) &amp;gt; (NumFlrsComm + NumFlrMix + NumFlrOff) - 1): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; else: &amp;nbsp;&amp;nbsp; NIL&amp;nbsp; else: &amp;nbsp; NIL&amp;nbsp; Towers --&amp;gt;&amp;nbsp; case xLength &amp;gt; zLength :&amp;nbsp; &amp;nbsp; split(x) {theLength/2 : Tower1 | ~1 : Tower2 }&amp;nbsp; else : &amp;nbsp; split(z) {(theLength/2) : Tower1 | ~1 : Tower2 }&amp;nbsp;&amp;nbsp;&amp;nbsp; Tower1 --&amp;gt;&amp;nbsp;&amp;nbsp; setback(FSetbackT1) { street.front : Concrete | remainder : T1Sub1 }&amp;nbsp; T1Sub1 --&amp;gt; setback(BSetbackT1) { street.back : Concrete | remainder : T1Sub2 }&amp;nbsp; T1Sub2 --&amp;gt; setback(LSetbackT1) { street.left : Concrete | remainder : T1Sub3 }&amp;nbsp; T1Sub3 --&amp;gt; setback(RSetbackT1) { street.right : Concrete | remainder : Tower1Extrude }&amp;nbsp; Tower1Extrude --&amp;gt;&amp;nbsp; extrude(world.y, (Tower1_Floors * Upperfloor_Height))&amp;nbsp; T1BuildingVolume3D&amp;nbsp; T1BuildingVolume3D --&amp;gt;&amp;nbsp; # the volume is split into upper floor volumes, as many times as possible ('*' sign)&amp;nbsp; split(y) {~Upperfloor_Height : T1Volume}*&amp;nbsp; T1Volume --&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case (split.index &amp;lt;= (NumFlrComm1 - 1)): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case ((split.index &amp;gt; (NumFlrComm1 - 1)) &amp;amp;&amp;amp; (NumFlrMix1 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm1 + NumFlrMix1) - 1))): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case (((split.index) &amp;gt; ((NumFlrComm1 + NumFlrMix1) - 1)) &amp;amp;&amp;amp; (NumFlrOff1 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm1 + NumFlrMix1 + NumFlrOff1) - 1))): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case ((split.index) &amp;gt; (NumFlrComm1 + NumFlrMix1 + NumFlrOff1) - 1): &amp;nbsp; else: &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; else: &amp;nbsp; NIL&amp;nbsp; Tower2 --&amp;gt;&amp;nbsp; setback(FSetbackT2) { street.front : Concrete | remainder : T2Sub1 }&amp;nbsp; T2Sub1 --&amp;gt; setback(BSetbackT2) { street.back : Concrete | remainder : T2Sub2 }&amp;nbsp; T2Sub2 --&amp;gt; setback(LSetbackT2) { street.left : Concrete | remainder : T2Sub3 }&amp;nbsp; T2Sub3 --&amp;gt; setback(RSetbackT2) { street.right : Concrete | remainder : Tower2Extrude }&amp;nbsp; Tower2Extrude --&amp;gt;&amp;nbsp; extrude(world.y, (Tower2_Floors * Upperfloor_Height))&amp;nbsp; T2BuildingVolume3D&amp;nbsp; T2BuildingVolume3D --&amp;gt;&amp;nbsp; # the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)&amp;nbsp; split(y) {~Upperfloor_Height : T2Volume}*&amp;nbsp; T2Volume --&amp;gt;&amp;nbsp;&amp;nbsp; case (split.index &amp;lt;= (NumFlrComm2 - 1)): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case ((split.index &amp;gt; (NumFlrComm2 - 1)) &amp;amp;&amp;amp; (NumFlrMix2 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm2 + NumFlrMix2) - 1))): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case (((split.index) &amp;gt; ((NumFlrComm2 + NumFlrMix2) - 1)) &amp;amp;&amp;amp; (NumFlrOff2 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm2 + NumFlrMix2 + NumFlrOff2) - 1))): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case ((split.index) &amp;gt; (NumFlrComm2 + NumFlrMix2 + NumFlrOff2) - 1): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; else: &amp;nbsp; NIL&amp;nbsp;&amp;nbsp; Simple_Com --&amp;gt; color(ComColor)&amp;nbsp; set(material.opacity,OpacityVal)&amp;nbsp; Simple_Mix --&amp;gt; color(MixColor)&amp;nbsp; set(material.opacity,OpacityVal)&amp;nbsp; Simple_Off --&amp;gt; color(OffColor)&amp;nbsp; set(material.opacity,OpacityVal)&amp;nbsp; Simple_Res --&amp;gt; color(ResColor)&amp;nbsp; set(material.opacity,OpacityVal)&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 20 Jan 2014 19:26:45 GMT</pubDate>
    <dc:creator>LoringTupper</dc:creator>
    <dc:date>2014-01-20T19:26:45Z</dc:date>
    <item>
      <title>Recursive tower has extra walls</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438985#M5993</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I've got a CGA rule that creates a building that has a pedestal and 2 towers on top of the pedestal. The towers are set back from the edge of the pedestal and then extruded, they look okay as well except that duplicate walls are created that extend from the edge of the pedestal, as in the image below:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[ATTACH=CONFIG]30640[/ATTACH]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;the code I used is below, can anyone tell me what I did to cause this phenomenon?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;Pedestal --&amp;gt;&amp;nbsp; extrude(world.y, ((Num_Pedestal_Floors * Upperfloor_Height) + (Groundfloor_Height - Upperfloor_Height)))&amp;nbsp; PedBuildingVolume3D&amp;nbsp; PedBuildingVolume3D --&amp;gt;&amp;nbsp; case (Groundfloor_Height != (Num_Pedestal_Floors * Upperfloor_Height) + (Groundfloor_Height - Upperfloor_Height)) : #pedestal height is NOT equal to height of just the ground floor &amp;nbsp; # the 3d volume will be split into smaller 3d volumes ! 1 ground floor volume will be created. &amp;nbsp; split(y) {Groundfloor_Height : Volume("GF") | ~1 : PedAllUpperFloors}&amp;nbsp; else: &amp;nbsp; Volume("GF1") &amp;nbsp; Towers&amp;nbsp;&amp;nbsp; PedAllUpperFloors --&amp;gt;&amp;nbsp; # the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)&amp;nbsp; split(y) {~Upperfloor_Height : Volume("UF")}*&amp;nbsp; Towers&amp;nbsp;&amp;nbsp; Volume(volumeType) --&amp;gt;&amp;nbsp; case volumeType == "GF1" : &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff == 0)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; else: &amp;nbsp;&amp;nbsp; NIL&amp;nbsp; case volumeType == "GF" : &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff &amp;gt;= 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff == 0)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top | all: NIL } &amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal) &amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; else: &amp;nbsp;&amp;nbsp; NIL&amp;nbsp; case volumeType == "UF" : &amp;nbsp; case (((split.index + 1) &amp;lt;= (NumFlrsComm - 1)) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt; 1)): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case (((split.index + 1) &amp;gt; (NumFlrsComm - 1)) &amp;amp;&amp;amp; (NumFlrMix &amp;gt; 0) &amp;amp;&amp;amp; ((split.index + 1) &amp;lt;= ((NumFlrsComm + NumFlrMix) - 1))): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case (((split.index + 1) &amp;gt; ((NumFlrsComm - 1) + (NumFlrMix - 1))) &amp;amp;&amp;amp; (NumFlrOff &amp;gt; 0) &amp;amp;&amp;amp; ((split.index + 1) &amp;lt;= ((NumFlrsComm + NumFlrMix + NumFlrOff) - 1))): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; case ((split.index + 1) &amp;gt; (NumFlrsComm + NumFlrMix + NumFlrOff) - 1): &amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting &amp;nbsp; else: &amp;nbsp;&amp;nbsp; NIL&amp;nbsp; else: &amp;nbsp; NIL&amp;nbsp; Towers --&amp;gt;&amp;nbsp; case xLength &amp;gt; zLength :&amp;nbsp; &amp;nbsp; split(x) {theLength/2 : Tower1 | ~1 : Tower2 }&amp;nbsp; else : &amp;nbsp; split(z) {(theLength/2) : Tower1 | ~1 : Tower2 }&amp;nbsp;&amp;nbsp;&amp;nbsp; Tower1 --&amp;gt;&amp;nbsp;&amp;nbsp; setback(FSetbackT1) { street.front : Concrete | remainder : T1Sub1 }&amp;nbsp; T1Sub1 --&amp;gt; setback(BSetbackT1) { street.back : Concrete | remainder : T1Sub2 }&amp;nbsp; T1Sub2 --&amp;gt; setback(LSetbackT1) { street.left : Concrete | remainder : T1Sub3 }&amp;nbsp; T1Sub3 --&amp;gt; setback(RSetbackT1) { street.right : Concrete | remainder : Tower1Extrude }&amp;nbsp; Tower1Extrude --&amp;gt;&amp;nbsp; extrude(world.y, (Tower1_Floors * Upperfloor_Height))&amp;nbsp; T1BuildingVolume3D&amp;nbsp; T1BuildingVolume3D --&amp;gt;&amp;nbsp; # the volume is split into upper floor volumes, as many times as possible ('*' sign)&amp;nbsp; split(y) {~Upperfloor_Height : T1Volume}*&amp;nbsp; T1Volume --&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case (split.index &amp;lt;= (NumFlrComm1 - 1)): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case ((split.index &amp;gt; (NumFlrComm1 - 1)) &amp;amp;&amp;amp; (NumFlrMix1 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm1 + NumFlrMix1) - 1))): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case (((split.index) &amp;gt; ((NumFlrComm1 + NumFlrMix1) - 1)) &amp;amp;&amp;amp; (NumFlrOff1 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm1 + NumFlrMix1 + NumFlrOff1) - 1))): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case ((split.index) &amp;gt; (NumFlrComm1 + NumFlrMix1 + NumFlrOff1) - 1): &amp;nbsp; else: &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; else: &amp;nbsp; NIL&amp;nbsp; Tower2 --&amp;gt;&amp;nbsp; setback(FSetbackT2) { street.front : Concrete | remainder : T2Sub1 }&amp;nbsp; T2Sub1 --&amp;gt; setback(BSetbackT2) { street.back : Concrete | remainder : T2Sub2 }&amp;nbsp; T2Sub2 --&amp;gt; setback(LSetbackT2) { street.left : Concrete | remainder : T2Sub3 }&amp;nbsp; T2Sub3 --&amp;gt; setback(RSetbackT2) { street.right : Concrete | remainder : Tower2Extrude }&amp;nbsp; Tower2Extrude --&amp;gt;&amp;nbsp; extrude(world.y, (Tower2_Floors * Upperfloor_Height))&amp;nbsp; T2BuildingVolume3D&amp;nbsp; T2BuildingVolume3D --&amp;gt;&amp;nbsp; # the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)&amp;nbsp; split(y) {~Upperfloor_Height : T2Volume}*&amp;nbsp; T2Volume --&amp;gt;&amp;nbsp;&amp;nbsp; case (split.index &amp;lt;= (NumFlrComm2 - 1)): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; CommReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case ((split.index &amp;gt; (NumFlrComm2 - 1)) &amp;amp;&amp;amp; (NumFlrMix2 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm2 + NumFlrMix2) - 1))): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; MixReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case (((split.index) &amp;gt; ((NumFlrComm2 + NumFlrMix2) - 1)) &amp;amp;&amp;amp; (NumFlrOff2 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm2 + NumFlrMix2 + NumFlrOff2) - 1))): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; OffReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; case ((split.index) &amp;gt; (NumFlrComm2 + NumFlrMix2 + NumFlrOff2) - 1): &amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top } &amp;nbsp;&amp;nbsp; ResReporting &amp;nbsp;&amp;nbsp; MassReporting&amp;nbsp; else: &amp;nbsp; NIL&amp;nbsp;&amp;nbsp; Simple_Com --&amp;gt; color(ComColor)&amp;nbsp; set(material.opacity,OpacityVal)&amp;nbsp; Simple_Mix --&amp;gt; color(MixColor)&amp;nbsp; set(material.opacity,OpacityVal)&amp;nbsp; Simple_Off --&amp;gt; color(OffColor)&amp;nbsp; set(material.opacity,OpacityVal)&amp;nbsp; Simple_Res --&amp;gt; color(ResColor)&amp;nbsp; set(material.opacity,OpacityVal)&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 20 Jan 2014 19:26:45 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438985#M5993</guid>
      <dc:creator>LoringTupper</dc:creator>
      <dc:date>2014-01-20T19:26:45Z</dc:date>
    </item>
    <item>
      <title>Re: Recursive tower has extra walls</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438986#M5994</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I had to simplify the code to make it fit and I missed an else statement that should have been deleted. The new code is below:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Pedestal --&amp;gt;
 extrude(world.y, ((Num_Pedestal_Floors * Upperfloor_Height) + (Groundfloor_Height - Upperfloor_Height)))
 PedBuildingVolume3D

PedBuildingVolume3D --&amp;gt;
 case (Groundfloor_Height != (Num_Pedestal_Floors * Upperfloor_Height) + (Groundfloor_Height - Upperfloor_Height)) : #pedestal height is NOT equal to height of just the ground floor
&amp;nbsp; # the 3d volume will be split into smaller 3d volumes ! 1 ground floor volume will be created.
&amp;nbsp; split(y) {Groundfloor_Height : Volume("GF") | ~1 : PedAllUpperFloors}
 else:
&amp;nbsp; Volume("GF1")
&amp;nbsp; Towers
 
PedAllUpperFloors --&amp;gt;
 # the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)
 split(y) {~Upperfloor_Height : Volume("UF")}*
 Towers


Volume(volumeType) --&amp;gt;
 case volumeType == "GF1" :
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt;= 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix &amp;gt;= 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff &amp;gt;= 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff == 0)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp;&amp;nbsp; 
&amp;nbsp; else:
&amp;nbsp;&amp;nbsp; NIL
 case volumeType == "GF" :
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt;= 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix &amp;gt;= 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff &amp;gt;= 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff == 0)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; else:
&amp;nbsp;&amp;nbsp; NIL
 case volumeType == "UF" :
&amp;nbsp; case (((split.index + 1) &amp;lt;= (NumFlrsComm - 1)) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt; 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case (((split.index + 1) &amp;gt; (NumFlrsComm - 1)) &amp;amp;&amp;amp; (NumFlrMix &amp;gt; 0) &amp;amp;&amp;amp; ((split.index + 1) &amp;lt;= ((NumFlrsComm + NumFlrMix) - 1))):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case (((split.index + 1) &amp;gt; ((NumFlrsComm - 1) + (NumFlrMix - 1))) &amp;amp;&amp;amp; (NumFlrOff &amp;gt; 0) &amp;amp;&amp;amp; ((split.index + 1) &amp;lt;= ((NumFlrsComm + NumFlrMix + NumFlrOff) - 1))):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index + 1) &amp;gt; (NumFlrsComm + NumFlrMix + NumFlrOff) - 1):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; else:
&amp;nbsp;&amp;nbsp; NIL
 else:
&amp;nbsp; NIL

Towers --&amp;gt;
 case xLength &amp;gt; zLength : 
&amp;nbsp; split(x) {theLength/2 : Tower1 | ~1 : Tower2 }
 else :
&amp;nbsp; split(z) {(theLength/2) : Tower1 | ~1 : Tower2 }
 

Tower1 --&amp;gt;

 setback(FSetbackT1) { street.front : Concrete | remainder : T1Sub1 }

T1Sub1 --&amp;gt; setback(BSetbackT1) { street.back : Concrete | remainder : T1Sub2 }

T1Sub2 --&amp;gt; setback(LSetbackT1) { street.left : Concrete | remainder : T1Sub3 }

T1Sub3 --&amp;gt; setback(RSetbackT1) { street.right : Concrete | remainder : Tower1Extrude }

Tower1Extrude --&amp;gt;
 extrude(world.y, (Tower1_Floors * Upperfloor_Height))
 T1BuildingVolume3D

T1BuildingVolume3D --&amp;gt;
 # the volume is split into upper floor volumes, as many times as possible ('*' sign)
 split(y) {~Upperfloor_Height : T1Volume}*

T1Volume --&amp;gt;
 
 case (split.index &amp;lt;= (NumFlrComm1 - 1)):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; CommReporting
&amp;nbsp;&amp;nbsp; MassReporting
 case ((split.index &amp;gt; (NumFlrComm1 - 1)) &amp;amp;&amp;amp; (NumFlrMix1 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm1 + NumFlrMix1) - 1))):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; MixReporting
&amp;nbsp;&amp;nbsp; MassReporting
 case (((split.index) &amp;gt; ((NumFlrComm1 + NumFlrMix1) - 1)) &amp;amp;&amp;amp; (NumFlrOff1 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm1 + NumFlrMix1 + NumFlrOff1) - 1))):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; OffReporting
&amp;nbsp;&amp;nbsp; MassReporting
 case ((split.index) &amp;gt; (NumFlrComm1 + NumFlrMix1 + NumFlrOff1) - 1):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; ResReporting
&amp;nbsp;&amp;nbsp; MassReporting
 else:
&amp;nbsp; NIL

Tower2 --&amp;gt;
 setback(FSetbackT2) { street.front : Concrete | remainder : T2Sub1 }

T2Sub1 --&amp;gt; setback(BSetbackT2) { street.back : Concrete | remainder : T2Sub2 }

T2Sub2 --&amp;gt; setback(LSetbackT2) { street.left : Concrete | remainder : T2Sub3 }

T2Sub3 --&amp;gt; setback(RSetbackT2) { street.right : Concrete | remainder : Tower2Extrude }

Tower2Extrude --&amp;gt;
 extrude(world.y, (Tower2_Floors * Upperfloor_Height))
 T2BuildingVolume3D

T2BuildingVolume3D --&amp;gt;
 # the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)
 split(y) {~Upperfloor_Height : T2Volume}*

T2Volume --&amp;gt; 
 case (split.index &amp;lt;= (NumFlrComm2 - 1)):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; CommReporting
&amp;nbsp;&amp;nbsp; MassReporting
 case ((split.index &amp;gt; (NumFlrComm2 - 1)) &amp;amp;&amp;amp; (NumFlrMix2 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm2 + NumFlrMix2) - 1))):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; MixReporting
&amp;nbsp;&amp;nbsp; MassReporting
 case (((split.index) &amp;gt; ((NumFlrComm2 + NumFlrMix2) - 1)) &amp;amp;&amp;amp; (NumFlrOff2 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm2 + NumFlrMix2 + NumFlrOff2) - 1))):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; OffReporting
&amp;nbsp;&amp;nbsp; MassReporting
 case ((split.index) &amp;gt; (NumFlrComm2 + NumFlrMix2 + NumFlrOff2) - 1):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; ResReporting
&amp;nbsp;&amp;nbsp; MassReporting
 else:
&amp;nbsp; NIL


Simple_Com --&amp;gt; color(ComColor)
 set(material.opacity,OpacityVal)

Simple_Mix --&amp;gt; color(MixColor)
 set(material.opacity,OpacityVal)

Simple_Off --&amp;gt; color(OffColor)
 set(material.opacity,OpacityVal)

Simple_Res --&amp;gt; color(ResColor)
 set(material.opacity,OpacityVal)&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:38:10 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438986#M5994</guid>
      <dc:creator>LoringTupper</dc:creator>
      <dc:date>2021-12-11T19:38:10Z</dc:date>
    </item>
    <item>
      <title>Re: Recursive tower has extra walls</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438987#M5995</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;So I've solved the extra wall issue but now I've got duplicate towers, one set that is extruding from the top floor&amp;nbsp; of the pedestal but also a set that extrudes from the top of the first floor of the pedestal. I thought that the split only effected the current polygon?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The model now looks like the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[ATTACH=CONFIG]30663[/ATTACH]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;the code now looks like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Pedestal --&amp;gt;
 extrude(world.y, ((Num_Pedestal_Floors * Upperfloor_Height) + (Groundfloor_Height - Upperfloor_Height)))
 PedBuildingVolume3D

PedBuildingVolume3D --&amp;gt;
 case (Groundfloor_Height != ((Num_Pedestal_Floors * Upperfloor_Height) + (Groundfloor_Height - Upperfloor_Height))) : #pedestal height is NOT equal to height of just the ground floor
&amp;nbsp; # the 3d volume will be split into smaller 3d volumes ! 1 ground floor volume will be created.
&amp;nbsp; split(y) {Groundfloor_Height : Volume("GF") | ~1 : PedAllUpperFloors}
 else:
&amp;nbsp; split(y) {Groundfloor_Height : Volume("GF")}
&amp;nbsp; report("NUMFLRS",NumFlrs)
&amp;nbsp; Towers
 
PedAllUpperFloors --&amp;gt;
 # the rest of the volume is not split into upper floor volumes, as many times as possible ('*' sign)
 split(y) {~Upperfloor_Height : Volume("UF")}*
 NIL
 Towers


Volume(volumeType) --&amp;gt;
 case volumeType == "GF" :
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt;= 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; report("SPLITTOT", split.total)
&amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix &amp;gt;= 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; report("SPLITTOT", split.total)
&amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff &amp;gt;= 1)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; report("SPLITTOT", split.total)
&amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.index == 0) &amp;amp;&amp;amp; (NumFlrsComm == 0) &amp;amp;&amp;amp; (NumFlrMix == 0) &amp;amp;&amp;amp; (NumFlrOff == 0)):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top | all: NIL }
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity,OpacityVal)
&amp;nbsp;&amp;nbsp;&amp;nbsp; report("SPLITTOT", split.total)
&amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; else:
&amp;nbsp;&amp;nbsp; NIL
 case volumeType == "UF" :
&amp;nbsp; case ((split.total &amp;lt;= Num_Pedestal_Floors) &amp;amp;&amp;amp; (((split.index + 1) &amp;lt;= (NumFlrsComm - 1)) &amp;amp;&amp;amp; (NumFlrsComm &amp;gt; 1))):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp;&amp;nbsp; report("SPLITTOT", split.total)
&amp;nbsp;&amp;nbsp;&amp;nbsp; CommReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.total &amp;lt;= Num_Pedestal_Floors) &amp;amp;&amp;amp; ((split.index + 1) &amp;gt; (NumFlrsComm - 1)) &amp;amp;&amp;amp; (NumFlrMix &amp;gt; 0) &amp;amp;&amp;amp; ((split.index + 1) &amp;lt;= ((NumFlrsComm + NumFlrMix) - 1))):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp;&amp;nbsp; report("SPLITTOT", split.total)
&amp;nbsp;&amp;nbsp;&amp;nbsp; MixReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.total &amp;lt;= Num_Pedestal_Floors) &amp;amp;&amp;amp; ((split.index + 1) &amp;gt; ((NumFlrsComm - 1) + (NumFlrMix - 1))) &amp;amp;&amp;amp; (NumFlrOff &amp;gt; 0) &amp;amp;&amp;amp; ((split.index + 1) &amp;lt;= ((NumFlrsComm + NumFlrMix + NumFlrOff) - 1))):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp;&amp;nbsp; report("SPLITTOT", split.total)
&amp;nbsp;&amp;nbsp;&amp;nbsp; OffReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; case ((split.total &amp;lt;= Num_Pedestal_Floors) &amp;amp;&amp;amp; (split.index + 1) &amp;gt; (NumFlrsComm + NumFlrMix + NumFlrOff) - 1):
&amp;nbsp;&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp;&amp;nbsp; report("SPLITTOT", split.total)
&amp;nbsp;&amp;nbsp;&amp;nbsp; ResReporting
&amp;nbsp;&amp;nbsp;&amp;nbsp; MassReporting
&amp;nbsp; else:
&amp;nbsp;&amp;nbsp; NIL
 else:
&amp;nbsp; NIL

Towers --&amp;gt;
 case xLength &amp;gt; zLength : 
&amp;nbsp; split(x) {'.5 : Tower1 | '.5 : Tower2 }&amp;nbsp; # I expected this split to split the polygon at the top of the pedestal, but it appears to
 else :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # also split the top of the first floor of the pedestal and extrudes from both location, why?
&amp;nbsp; split(z) {'.5 : Tower1 | '.5 : Tower2 }
 

Tower1 --&amp;gt;

 setback(FSetbackT1) { street.front : Concrete | remainder : T1Sub1 }

T1Sub1 --&amp;gt; setback(BSetbackT1) { street.back : Concrete | remainder : T1Sub2 }

T1Sub2 --&amp;gt; setback(LSetbackT1) { street.left : Concrete | remainder : T1Sub3 }

T1Sub3 --&amp;gt; setback(RSetbackT1) { street.right : Concrete | remainder : Tower1Extrude }

Tower1Extrude --&amp;gt;
 extrude(world.y, (Tower1_Floors * Upperfloor_Height))
 T1BuildingVolume3D
 
 
T1BuildingVolume3D --&amp;gt;
 # the volume is split into upper floor volumes, as many times as possible ('*' sign)
 split(y) {~Upperfloor_Height : T1Volume}*

T1Volume --&amp;gt;
 
 case ((split.total &amp;lt;= Tower1_Floors) &amp;amp;&amp;amp; (split.index &amp;lt;= (NumFlrComm1 - 1))):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Com | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; CommReporting
&amp;nbsp;&amp;nbsp; MassReporting
 case ((split.total &amp;lt;= Tower1_Floors) &amp;amp;&amp;amp; ((split.index &amp;gt; (NumFlrComm1 - 1)) &amp;amp;&amp;amp; (NumFlrMix1 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm1 + NumFlrMix1) - 1)))):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Mix | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; MixReporting
&amp;nbsp;&amp;nbsp; MassReporting
 case ((split.total &amp;lt;= Tower1_Floors) &amp;amp;&amp;amp; (((split.index) &amp;gt; ((NumFlrComm1 + NumFlrMix1) - 1)) &amp;amp;&amp;amp; (NumFlrOff1 &amp;gt; 0) &amp;amp;&amp;amp; ((split.index) &amp;lt;= ((NumFlrComm1 + NumFlrMix1 + NumFlrOff1) - 1)))):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Off | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; OffReporting
&amp;nbsp;&amp;nbsp; MassReporting
 case ((split.total &amp;lt;= Tower1_Floors) &amp;amp;&amp;amp; ((split.index) &amp;gt; (NumFlrComm1 + NumFlrMix1 + NumFlrOff1) - 1)):
&amp;nbsp;&amp;nbsp; comp(f){side: Simple_Res | bottom: FloorBottom | top : Top }
&amp;nbsp;&amp;nbsp; ResReporting
&amp;nbsp;&amp;nbsp; MassReporting
 else:
&amp;nbsp; NIL&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 19:38:13 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438987#M5995</guid>
      <dc:creator>LoringTupper</dc:creator>
      <dc:date>2021-12-11T19:38:13Z</dc:date>
    </item>
    <item>
      <title>Re: Recursive tower has extra walls</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438988#M5996</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi !&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You still have an awful amout of code duplicated. I'm sure you can still erase lots of that. Especially in relation to those reports.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I know it's difficult to track this down .. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This here may help you if you've not seen it already :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;OBJECT height="380" width="640"&gt;&lt;PARAM name="movie" value="http://www.youtube.com/v/gnefAyqUQVE" /&gt;&lt;/OBJECT&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also, make absolutely sure you use the Model Hierarchy to track these things down.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Check here :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://forums.arcgis.com/threads/44417-CGA-Understanding-the-concept-of-the-scope"&gt;http://forums.arcgis.com/threads/44417-CGA-Understanding-the-concept-of-the-scope&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Let me know how you progress !&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Matt&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Jan 2014 14:25:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438988#M5996</guid>
      <dc:creator>MatthiasBuehler1</dc:creator>
      <dc:date>2014-01-22T14:25:27Z</dc:date>
    </item>
    <item>
      <title>Re: Recursive tower has extra walls</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438989#M5997</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks for the feedback Matt.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I did manage to solve the problem, I was missing a component operation when I branched from the pedestal to the towers.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As for the duplicate code, I'm not sure how I can clean it up, I'm dealing with a report that requires that I report on the 4 floor use types as well as having the ability to independently modify the floor use makeup of the pedestal and each of the 2 towers.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Jan 2014 16:03:10 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438989#M5997</guid>
      <dc:creator>LoringTupper</dc:creator>
      <dc:date>2014-01-22T16:03:10Z</dc:date>
    </item>
    <item>
      <title>Re: Recursive tower has extra walls</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438990#M5998</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Ok..&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;well, if you need a lot of such precise control, the code may get a bit complicated.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But in general, I'd try to never copy rule calls, e.g. like for reporting.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;e.g. instead of calling the report rule from within every case statement, just call it once in the next rule.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What may help is to create so-called generic attributes. That way, you can pass everything down without rule parameters and can work with less case statements.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Pumping all geometries and all volumes through the same logic streamlines the code a lot..&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;A lot of theory.. sorry. &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'd like to help you out with coding this more properly, but I'm swamped with work right now .. &lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;a bit cooler/more automatted reporting :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Note that this automatically accumulates the totals in Vol &amp;amp; GFA too.&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;Reporting --&amp;gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; report("Vol." + myUsageAttribute, geometry.volume) &amp;nbsp;&amp;nbsp;&amp;nbsp; report("GFA." + myUsageAttribute, geometry.area(bottom))&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Jan 2014 13:12:45 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438990#M5998</guid>
      <dc:creator>MatthiasBuehler1</dc:creator>
      <dc:date>2014-01-23T13:12:45Z</dc:date>
    </item>
    <item>
      <title>Re: Recursive tower has extra walls</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438991#M5999</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks for the tip Matt. Using attributes for the report items does indeed clean up 3/4 of the code I had be using for reporting. This is something I'll use from now on and, if I get a chance, I'll go back to previous rule files and clean them up as well.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again, good tip!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Jan 2014 20:49:04 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/recursive-tower-has-extra-walls/m-p/438991#M5999</guid>
      <dc:creator>LoringTupper</dc:creator>
      <dc:date>2014-01-28T20:49:04Z</dc:date>
    </item>
  </channel>
</rss>

