<?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 conditional rule and addressing functions in ArcGIS CityEngine Questions</title>
    <link>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149931#M1984</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello guys,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have been reading your forum for a couple of weeks now. In my opinion City Engine is a great peace of software, although CGA&amp;nbsp; gives me hard time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I watched/red most of the tutorials and I read the help all the time but It seems my way of thinking is a bit different.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My first question is about conditional rule. How do I nest conditions properly?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
nRange = 4 
attr temp = 0

Lot --&amp;gt; Loop(nRange)

Loop(nRange) --&amp;gt;
 case nRange &amp;gt;= temp: print("nRange = " + nRange) Loop(nRange - 1) 
&amp;nbsp; case nRange == 3: print("INNER CASE")
 else: print("END OF LOOP")
&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What I want to achieve is to print:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 4&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 3&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;INNERCASE&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;END OF LOOP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But it seems the cycle never gets within the second case, so instead I get:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 4&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 3&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;END OF LOOP&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Second question is about how to properly address a function?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;What I want to achieve is the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
const listOfBuildings =&amp;nbsp; //what is the purpose of constant in CGA?
 "building_01.obj;building_02.obj;building_03.obj;building_04.obj;" 
nRange = (listSize(listOfBuildings) - 1) 
buildingList = ""/empty string to fill with chosen buildings
const temp = 0

#FUNCTION
testFunction(nRange) = //not sure about the attribute here
 listAdd(buildingList, listItem(listOfBuildings, nRange))
#RULE
Loop(nRange) --&amp;gt;
 case nRange &amp;gt;= temp: Loop(nRange - 1)
&amp;nbsp; case geometry.isRectangular(5)&amp;nbsp; 
&amp;nbsp; &amp;amp;&amp;amp; ((scope.sx &amp;gt; assetInfo(listItem(listOfBuildings, nRange), sx) 
&amp;nbsp; &amp;amp;&amp;amp; scope.sz &amp;gt; assetInfo(listItem(listOfBuildings, nRange), sz))) 
&amp;nbsp; || ((scope.sx &amp;gt; assetInfo(listItem(listOfBuildings, nRange), sz) 
&amp;nbsp; &amp;amp;&amp;amp; scope.sz &amp;gt; assetInfo(listItem(listOfBuildings, nRange), sx))):
&amp;nbsp; testFunctionn(nRange)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //this gives me error? what should I put here ???
 else: print("END OF LOOP")&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //not sure about this
&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Basically I want to test every building in listOfBuildings if it fits within xz scope of the current Lot. If it fits I want to put it in buildingList so I can randomly choose between several buildings whitch fit the current lot.&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Well this is for now.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pledgeshield&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 01 Nov 2013 09:56:35 GMT</pubDate>
    <dc:creator>VencislavValchev</dc:creator>
    <dc:date>2013-11-01T09:56:35Z</dc:date>
    <item>
      <title>conditional rule and addressing functions</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149931#M1984</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello guys,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have been reading your forum for a couple of weeks now. In my opinion City Engine is a great peace of software, although CGA&amp;nbsp; gives me hard time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I watched/red most of the tutorials and I read the help all the time but It seems my way of thinking is a bit different.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My first question is about conditional rule. How do I nest conditions properly?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
nRange = 4 
attr temp = 0

Lot --&amp;gt; Loop(nRange)

Loop(nRange) --&amp;gt;
 case nRange &amp;gt;= temp: print("nRange = " + nRange) Loop(nRange - 1) 
&amp;nbsp; case nRange == 3: print("INNER CASE")
 else: print("END OF LOOP")
&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What I want to achieve is to print:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 4&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 3&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;INNERCASE&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;END OF LOOP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But it seems the cycle never gets within the second case, so instead I get:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 4&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 3&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;END OF LOOP&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Second question is about how to properly address a function?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;What I want to achieve is the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
const listOfBuildings =&amp;nbsp; //what is the purpose of constant in CGA?
 "building_01.obj;building_02.obj;building_03.obj;building_04.obj;" 
nRange = (listSize(listOfBuildings) - 1) 
buildingList = ""/empty string to fill with chosen buildings
const temp = 0

#FUNCTION
testFunction(nRange) = //not sure about the attribute here
 listAdd(buildingList, listItem(listOfBuildings, nRange))
#RULE
Loop(nRange) --&amp;gt;
 case nRange &amp;gt;= temp: Loop(nRange - 1)
&amp;nbsp; case geometry.isRectangular(5)&amp;nbsp; 
&amp;nbsp; &amp;amp;&amp;amp; ((scope.sx &amp;gt; assetInfo(listItem(listOfBuildings, nRange), sx) 
&amp;nbsp; &amp;amp;&amp;amp; scope.sz &amp;gt; assetInfo(listItem(listOfBuildings, nRange), sz))) 
&amp;nbsp; || ((scope.sx &amp;gt; assetInfo(listItem(listOfBuildings, nRange), sz) 
&amp;nbsp; &amp;amp;&amp;amp; scope.sz &amp;gt; assetInfo(listItem(listOfBuildings, nRange), sx))):
&amp;nbsp; testFunctionn(nRange)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //this gives me error? what should I put here ???
 else: print("END OF LOOP")&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //not sure about this
&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Basically I want to test every building in listOfBuildings if it fits within xz scope of the current Lot. If it fits I want to put it in buildingList so I can randomly choose between several buildings whitch fit the current lot.&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Well this is for now.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pledgeshield&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Nov 2013 09:56:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149931#M1984</guid>
      <dc:creator>VencislavValchev</dc:creator>
      <dc:date>2013-11-01T09:56:35Z</dc:date>
    </item>
    <item>
      <title>Re: conditional rule and addressing functions</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149932#M1985</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;SPAN&gt;EVERY new case block must be ended with an else.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;case:
else :&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;or&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;case :
&amp;nbsp;&amp;nbsp;&amp;nbsp; case:
&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
else:&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;or&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;probability = 0.5

case p(probability):
else:&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;or&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;50%:
else:&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;or&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;attr doIt = true # or false

case doIt:
else:&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;or&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;function = case 5&amp;gt;3

case !function:
else:&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;or &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;case (scope.sx &amp;gt; scope.sz) &amp;amp;&amp;amp; (geometry.area() &amp;lt; 2):
else:&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;sorry, don't have time currently for more text here ..&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;work with this for now, ok ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;m.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 08:05:47 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149932#M1985</guid>
      <dc:creator>MatthiasBuehler1</dc:creator>
      <dc:date>2021-12-11T08:05:47Z</dc:date>
    </item>
    <item>
      <title>Re: conditional rule and addressing functions</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149933#M1986</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks for responding to me matthias!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Nice examples, they should be put into the next help file! I dug into the forums and I found an old thread which gave me some hints about the case problem. Here it is: &lt;/SPAN&gt;&lt;A href="http://forums.arcgis.com/threads/61773-few-conditional-rule-questions?p=213506&amp;amp;viewfull=1#post213506" rel="nofollow noopener noreferrer" target="_blank"&gt;Click&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Well here is what I came up with... not very pretty but works &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
nRange = 4
temp = 0

Lot --&amp;gt; Loop(nRange)

Loop(nRange) --&amp;gt;
 case nRange &amp;gt;= temp: innerLoop(nRange) print("nRange: " + nRange) Loop(nRange - 1) 
 else: print("END OF LOOP")
 
innerLoop(test) --&amp;gt;
 case test == 3: print("INNER LOOP")
 else: NIL
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And the result is:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange: 4&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange: 3&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;INNER LOOP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange: 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange: 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nRange: 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;END OF LOOP&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It would be nice if I can replace innerLoop rule with function.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pledgeshield&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 08:05:50 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149933#M1986</guid>
      <dc:creator>VencislavValchev</dc:creator>
      <dc:date>2021-12-11T08:05:50Z</dc:date>
    </item>
    <item>
      <title>Re: conditional rule and addressing functions</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149934#M1987</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;You need something like this ..&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;attr valueA = 10
attr valueB = 5

Start --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; RecursionA(valueA)

RecursionA(a) --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; case a == 0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RecursionB(valueB ) # done, continue with B.
&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RecursionA(a-1)

RecursionB(b) --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; case b == 0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Done.
&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RecursionB(b-1)&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So the structure you need/mention MUST be done via rules, that means also the whole geometry is copied 'from rule to rule'.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note that 'functions' and 'rule bodys' are have a different semantic meaning than in other programming languages.&lt;/SPAN&gt;&lt;BR /&gt;&lt;STRONG&gt;&lt;BR /&gt;functions:&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;f = 5
blah(n) = 7 * u&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;rule body:&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;A --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; B.

..&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;OK ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":face_with_open_mouth:"&gt;😮&lt;/span&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 08:05:53 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149934#M1987</guid>
      <dc:creator>MatthiasBuehler1</dc:creator>
      <dc:date>2021-12-11T08:05:53Z</dc:date>
    </item>
    <item>
      <title>Re: conditional rule and addressing functions</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149935#M1988</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Well I stumbled over new issues. As I said in my first post I am trying to create the following:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;(this is just a bunch of pseudocode mixed with CGA, I am sorry but I am not a programmer)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
attr string1 = "building1;building2;building3;building4"
attr string2 = "" //used as buffer
attr var1 = listSize(string1) 

while(var1 &amp;gt;= 0)
{
&amp;nbsp;&amp;nbsp; if(geometry.isRectangular(5))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; listAdd(string2, listItem(string1, var3)) //adds the buildings which passed the test to string2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; else: break;
&amp;nbsp;&amp;nbsp; var1 = var1 - 1
}

Building --&amp;gt; rand(string2) // get a random building from string2 and place it at the current lot&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Why I cant use functions such as listAdd on their own:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
Lot --&amp;gt; Building(listAdd(some code))// works
Lot --&amp;gt; listAdd(some code)// does not work ?
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;2. How do I write a while loop without modifying the model hierarchy? I really don't like the sight of 15 while(s) in model hierarchy window!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3.How do I add stuff from one list to another? Here is some code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
attr string1 = "models/box1.obj;models/box2.obj;models/box3.obj;"
attr string2 = ""
attr var1 = listSize(string1)&amp;nbsp;&amp;nbsp; 

Lot --&amp;gt; While(var1 - 1)
While(var2) --&amp;gt;
 case var2 &amp;gt;= 0:
&amp;nbsp;&amp;nbsp; If(var2)
&amp;nbsp;&amp;nbsp; While(var2 - 1)
 else: NIL

If(var3) --&amp;gt;
 case geometry.isRectangular(5):
&amp;nbsp; Test(listAdd(string2, listItem(string1, var3)))
 else: NIL

Test(str) --&amp;gt;
 print(str)
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The result I want to get is:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;models/box1.obj;models/box2.obj;models/box3.obj;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;models/box1.obj;models/box2.obj;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;models/box1.obj;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Instead of:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;models/box3.obj;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;models/box2.obj;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;models/box1.obj;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;:confused:&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 08:05:55 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149935#M1988</guid>
      <dc:creator>VencislavValchev</dc:creator>
      <dc:date>2021-12-11T08:05:55Z</dc:date>
    </item>
    <item>
      <title>Re: conditional rule and addressing functions</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149936#M1989</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;SPAN&gt;1]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;that's the way the system is designed. rules are rules and functions are functions.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;that's how it is.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;currently not possible.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;maybe one day in the future, more advanced things are added to CGA, but that's how it works in the current state.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I recommend working with 'Generic Attributes'.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That means instead of passing on values as 'rule parameters, such as &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Start --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; A(5)

A(n) --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ..&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'd say code like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;attr myStringList1 = "a;b;c;d"
attr myStringList2 = "u;v;w;x;y;z"

Lot --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(myStringList1, ..)
&amp;nbsp;&amp;nbsp;&amp;nbsp; set(myStringList2, ..)
&amp;nbsp;&amp;nbsp;&amp;nbsp; Continue.&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Question:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What's the overall problem you try to solve that way ? I've never seen the need for this code structure before. What type of city are you trying to create ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Matt&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 08:05:58 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149936#M1989</guid>
      <dc:creator>MatthiasBuehler1</dc:creator>
      <dc:date>2021-12-11T08:05:58Z</dc:date>
    </item>
    <item>
      <title>Re: conditional rule and addressing functions</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149937#M1990</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Matt,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Lets say that I have an infrastructure of a city(streets and empty lots) and I have a library of premade 3D buildings which I want to place on lots and to create urban environment. What I want to do is to insert buildings into corresponding lots without modifying building's dimensions. I know how to test a building if it fits into a lot (or at least I think so). The problem is that it always fits the smallest building and this brakes the overall variety.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have tried functions such as assetBestSize but they don't work as I expected. These functions modify the dimensions of the buildings. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So basically this is the problem which I try to solve.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;best,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pledge&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 30 Nov 2013 19:42:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149937#M1990</guid>
      <dc:creator>VencislavValchev</dc:creator>
      <dc:date>2013-11-30T19:42:11Z</dc:date>
    </item>
    <item>
      <title>Re: conditional rule and addressing functions</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149938#M1991</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;SPAN&gt;the best approach is inded using the assetBestSize / assetBestRatio / operations.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;note that&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;s(0,0,0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;before the i() operation insert with the original asset size. this is used to not scale the asset at all.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;maybe also check out the Example 'Instanced City', this uses those operations, but scales the buildings.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;otherwise, what you can do is use assetInfo() and create a series of splits that check the dimensions of the empty lots and insert the buildings by using splits.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;hope this gives some inputs ..&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;m.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Dec 2013 10:00:47 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/conditional-rule-and-addressing-functions/m-p/149938#M1991</guid>
      <dc:creator>MatthiasBuehler1</dc:creator>
      <dc:date>2013-12-09T10:00:47Z</dc:date>
    </item>
  </channel>
</rss>

