<?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 Re: Why Python in CityEngine in ArcGIS CityEngine Questions</title>
    <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211261#M2802</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hey Kristian,&amp;nbsp;&lt;BR /&gt;&lt;SPAN&gt;So what you are hinting at is actually really complicated and detailed matter for the CityEngine Team. First Why Python:&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Python can help you control global variables of your scene and your data in ways you could not with just CGA alone. This means adjusting camera angles and rule parameters based on data dynamically such as what is done in&lt;A href="https://vimeo.com/69556201" rel="nofollow noopener noreferrer" target="_blank"&gt; this video&lt;/A&gt; (you can &lt;A href="https://github.com/urschrei/CityEngine-Twitter" rel="nofollow noopener noreferrer" target="_blank"&gt;find the code here&lt;/A&gt;), or even splitting parcels&amp;nbsp;appropriately for Transit Oriented Development simulations (seen &lt;A href="https://www.youtube.com/watch?v=ooEF_bDSchY" rel="nofollow noopener noreferrer" target="_blank"&gt;here&lt;/A&gt;).&amp;nbsp;&amp;nbsp;I have used python in CityEngine to batch render and export thousands of 3D street cross sections for multimodal planning projects where we wanted to visualize&amp;nbsp;baseline&amp;nbsp;conditions right next to improvements. It can be incredibly useful. The python script below as an example batch exports every layer in the CityEngine Scene to KML, which is useful if you have a lot of time layers you want to see in Google Earth or ArcGIS Earth.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;In terms of the problem at hand, you are touching on something that is a known limitation of CGA. CGA is a hierarchical rules based language, and as a result as you create new leafs in CGA (new leafs being new subdivided shapes) those shapes CANNOT communicate with previous shapes or shapes in other parts of the rule. This was a hard limitation for the &lt;A href="https://github.com/Holisticnature/Complete_Street_Rule" rel="nofollow noopener noreferrer" target="_blank"&gt;Complete Street Rule&lt;/A&gt;, which had to make choices about which shapes take up scarce geometry on the road&amp;nbsp;in the rule. To allocate shapes in that rule, I to precalculate street widths with functions GLOBALLY rather than have the resulting shapes send important information to other shapes (my bike lanes don't know how large their buffers are, but some global function declared before the first leaf can pass that information onto them). Python and smart math can get past this limitation &lt;EM&gt;in some cases&lt;/EM&gt;, but other cases would require CGA shapes to be able to "talk" to each other. This is being talked about within the CE community, but so far we are just finding other ways around it.&amp;nbsp;&lt;BR /&gt;&lt;A href="https://community.esri.com/migrated-users/172220" target="_blank"&gt;Cheryl Lau&lt;/A&gt;&amp;nbsp;might have more to add on that point.&amp;nbsp;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;# --------------------------------&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Name: CEBatchWebSceneExport.py&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Purpose: Batch export of CE layers to web scenes.&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Current Owner: David Wasserman&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Last Modified: 12/22/2015&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Copyright:&amp;nbsp;&amp;nbsp; (c) Co-Adaptive&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# CityEngine Vs: 2015.2&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Python Version:&amp;nbsp;&amp;nbsp; 2.7&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# License&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Copyright 2015 David J. Wasserman&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;#&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Licensed under the Apache License, Version 2.0 (the "License");&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# you may not use this file except in compliance with the License.&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# You may obtain a copy of the License at&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;#&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;&lt;SPAN&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.esri.com/external-link.jspa?url=http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0" target="_blank"&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/A&gt;&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;#&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Unless required by applicable law or agreed to in writing, software&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# distributed under the License is distributed on an "AS IS" BASIS,&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# See the License for the specific language governing permissions and&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# limitations under the License.&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# --------------------------------&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;# Import Modules&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; scripting &lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;# get a CityEngine instance&lt;/SPAN&gt;
ce &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; CE&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

outputFolder &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"/BatchExport"&lt;/SPAN&gt;
generateBoolean &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token boolean"&gt;False&lt;/SPAN&gt;
deleteBoolean &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token boolean"&gt;False&lt;/SPAN&gt;


&lt;SPAN class="comment token"&gt;# Turn off User Interface updates, or script might take forever.&lt;/SPAN&gt;
@noUIupdate
&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;main&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;# This function will export in batch web scenes to the input outputFolder&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; layers &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;getObjectsFrom&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;scene&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;isLayer&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"There are "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;len&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layers&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;" layers in the current scene."&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; counter &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; layer &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; layers&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;try&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setSelection&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layer&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OID &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;getOID&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layer&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layerName &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;getName&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layer&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; generateBoolean&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&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; &lt;SPAN class="comment token"&gt;# generate models on selected shapes (assumes size of file is too big)&lt;/SPAN&gt;
&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; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;generateModels&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;selection&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&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; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;waitForUIIdle&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Setting export settings for layer named: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layerName&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; KMLExportModelSettings&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setOutputPath&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;toFSPath&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"models"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;outputFolder&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setBaseName&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layerName&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setCompression&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token boolean"&gt;False&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setTerrainLayers&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;TERRAIN_NONE&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;export&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;selection&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; exportSettings&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Exported layer named: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layerName&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"to models/BatchExport3WS"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; counter &lt;SPAN class="operator token"&gt;+=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; deleteBoolean&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&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; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;delete&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;selection&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&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; &lt;SPAN class="keyword token"&gt;pass&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Exported web scene for layer named:"&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layerName&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;# Change this to an absolute path that points to your KML files.&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;except&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Could not execute on counter "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;counter&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; counter &lt;SPAN class="operator token"&gt;+=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;pass&lt;/SPAN&gt;


&lt;SPAN class="comment token"&gt;# Call&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; __name__ &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'__main__'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Batch Layer script started."&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; main&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Script completed."&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 10:24:16 GMT</pubDate>
    <dc:creator>DavidWasserman</dc:creator>
    <dc:date>2021-12-11T10:24:16Z</dc:date>
    <item>
      <title>Why Python in CityEngine</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211259#M2800</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm a 99% noob when it comes to CityEngine and the whole programming world, but it looks to me as there is the possibility to use python scripts within CityEngine, which have made me curious, why would you do that?.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have encourtered some problems when writing cga rule files, one of them is that I want to&amp;nbsp;split a shape in two, and then extrude number 1 and split number two into two new "shapes". one part of the secound split will then be extruded so it allways has the same volume as extrusion one, see picture.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But this i have not been able to do as fare as i understand it it is becouse it calculates volume one in one branche of the tree and then it is not able to use the data in another branch, is this something you would use python to or what?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I now that for this particular exmaple there is some matematiks that can solve the problem, i think what i'm looking for is a way to store some data in an attribute and then use it again but in another branch of the tree.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG alt="" class="image-1 jive-image j-img-original" src="https://community.esri.com/legacyfs/online/241097_Loop.JPG" style="width: 620px; height: 327px;" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Another question is I want to import a shapefiles into cityengine,&amp;nbsp;which countain some building footprints, I then want to draw a shape under an amount of building footprints, and then see if a footprint is on top of the shape and if it is then calculate the sqm which is not covered by the footprint.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thise a basically the tasks at hand and i quess the question is, is this something you do with python and what task can python do in cityengine?. Would it improve my skills in cityengine to understand python?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sorry for the long post&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Oct 2016 16:44:04 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211259#M2800</guid>
      <dc:creator>KristianMortensen1</dc:creator>
      <dc:date>2016-10-07T16:44:04Z</dc:date>
    </item>
    <item>
      <title>Re: Why Python in CityEngine</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211260#M2801</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;programming anything, regardless of the language is only useful if...&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;you have repetitive tasks performed on a regular basis&lt;/LI&gt;&lt;LI&gt;your workflows are long and you want the ability to just vary a few parameters at some point in the process without having to reinvent the wheel every time.&lt;/LI&gt;&lt;LI&gt;access to certain tasks has no equivalent in the user interface, but can only be accessed at the code level&lt;/LI&gt;&lt;LI&gt;you just like to code&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;These are a few points to consider&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Oct 2016 17:32:52 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211260#M2801</guid>
      <dc:creator>DanPatterson_Retired</dc:creator>
      <dc:date>2016-10-07T17:32:52Z</dc:date>
    </item>
    <item>
      <title>Re: Why Python in CityEngine</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211261#M2802</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hey Kristian,&amp;nbsp;&lt;BR /&gt;&lt;SPAN&gt;So what you are hinting at is actually really complicated and detailed matter for the CityEngine Team. First Why Python:&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Python can help you control global variables of your scene and your data in ways you could not with just CGA alone. This means adjusting camera angles and rule parameters based on data dynamically such as what is done in&lt;A href="https://vimeo.com/69556201" rel="nofollow noopener noreferrer" target="_blank"&gt; this video&lt;/A&gt; (you can &lt;A href="https://github.com/urschrei/CityEngine-Twitter" rel="nofollow noopener noreferrer" target="_blank"&gt;find the code here&lt;/A&gt;), or even splitting parcels&amp;nbsp;appropriately for Transit Oriented Development simulations (seen &lt;A href="https://www.youtube.com/watch?v=ooEF_bDSchY" rel="nofollow noopener noreferrer" target="_blank"&gt;here&lt;/A&gt;).&amp;nbsp;&amp;nbsp;I have used python in CityEngine to batch render and export thousands of 3D street cross sections for multimodal planning projects where we wanted to visualize&amp;nbsp;baseline&amp;nbsp;conditions right next to improvements. It can be incredibly useful. The python script below as an example batch exports every layer in the CityEngine Scene to KML, which is useful if you have a lot of time layers you want to see in Google Earth or ArcGIS Earth.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;In terms of the problem at hand, you are touching on something that is a known limitation of CGA. CGA is a hierarchical rules based language, and as a result as you create new leafs in CGA (new leafs being new subdivided shapes) those shapes CANNOT communicate with previous shapes or shapes in other parts of the rule. This was a hard limitation for the &lt;A href="https://github.com/Holisticnature/Complete_Street_Rule" rel="nofollow noopener noreferrer" target="_blank"&gt;Complete Street Rule&lt;/A&gt;, which had to make choices about which shapes take up scarce geometry on the road&amp;nbsp;in the rule. To allocate shapes in that rule, I to precalculate street widths with functions GLOBALLY rather than have the resulting shapes send important information to other shapes (my bike lanes don't know how large their buffers are, but some global function declared before the first leaf can pass that information onto them). Python and smart math can get past this limitation &lt;EM&gt;in some cases&lt;/EM&gt;, but other cases would require CGA shapes to be able to "talk" to each other. This is being talked about within the CE community, but so far we are just finding other ways around it.&amp;nbsp;&lt;BR /&gt;&lt;A href="https://community.esri.com/migrated-users/172220" target="_blank"&gt;Cheryl Lau&lt;/A&gt;&amp;nbsp;might have more to add on that point.&amp;nbsp;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;# --------------------------------&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Name: CEBatchWebSceneExport.py&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Purpose: Batch export of CE layers to web scenes.&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Current Owner: David Wasserman&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Last Modified: 12/22/2015&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Copyright:&amp;nbsp;&amp;nbsp; (c) Co-Adaptive&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# CityEngine Vs: 2015.2&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Python Version:&amp;nbsp;&amp;nbsp; 2.7&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# License&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Copyright 2015 David J. Wasserman&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;#&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Licensed under the Apache License, Version 2.0 (the "License");&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# you may not use this file except in compliance with the License.&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# You may obtain a copy of the License at&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;#&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;&lt;SPAN&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.esri.com/external-link.jspa?url=http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0" target="_blank"&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/A&gt;&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;#&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# Unless required by applicable law or agreed to in writing, software&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# distributed under the License is distributed on an "AS IS" BASIS,&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# See the License for the specific language governing permissions and&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# limitations under the License.&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# --------------------------------&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;# Import Modules&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; scripting &lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;# get a CityEngine instance&lt;/SPAN&gt;
ce &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; CE&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

outputFolder &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"/BatchExport"&lt;/SPAN&gt;
generateBoolean &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token boolean"&gt;False&lt;/SPAN&gt;
deleteBoolean &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token boolean"&gt;False&lt;/SPAN&gt;


&lt;SPAN class="comment token"&gt;# Turn off User Interface updates, or script might take forever.&lt;/SPAN&gt;
@noUIupdate
&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;main&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;# This function will export in batch web scenes to the input outputFolder&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; layers &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;getObjectsFrom&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;scene&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;isLayer&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"There are "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;len&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layers&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;" layers in the current scene."&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; counter &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; layer &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; layers&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;try&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setSelection&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layer&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OID &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;getOID&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layer&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layerName &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;getName&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layer&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; generateBoolean&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&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; &lt;SPAN class="comment token"&gt;# generate models on selected shapes (assumes size of file is too big)&lt;/SPAN&gt;
&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; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;generateModels&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;selection&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&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; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;waitForUIIdle&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Setting export settings for layer named: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layerName&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; KMLExportModelSettings&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setOutputPath&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;toFSPath&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"models"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;outputFolder&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setBaseName&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layerName&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setCompression&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token boolean"&gt;False&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;setTerrainLayers&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exportSettings&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;TERRAIN_NONE&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;export&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;selection&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; exportSettings&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Exported layer named: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layerName&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"to models/BatchExport3WS"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; counter &lt;SPAN class="operator token"&gt;+=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; deleteBoolean&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&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; ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;delete&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ce&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;selection&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&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; &lt;SPAN class="keyword token"&gt;pass&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Exported web scene for layer named:"&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layerName&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;# Change this to an absolute path that points to your KML files.&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;except&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Could not execute on counter "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;counter&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; counter &lt;SPAN class="operator token"&gt;+=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;pass&lt;/SPAN&gt;


&lt;SPAN class="comment token"&gt;# Call&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; __name__ &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'__main__'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Batch Layer script started."&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; main&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Script completed."&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:24:16 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211261#M2802</guid>
      <dc:creator>DavidWasserman</dc:creator>
      <dc:date>2021-12-11T10:24:16Z</dc:date>
    </item>
    <item>
      <title>Re: Why Python in CityEngine</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211262#M2803</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the answer. Then &lt;SPAN style="background-color: rgba(250, 0, 30, 0.14902);"&gt;I&lt;/SPAN&gt;&amp;nbsp;have to find a workaround maybe by defining&amp;nbsp;the size of the footprint as an attribute&amp;nbsp;and the split should be a function of that.&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 08 Oct 2016 10:54:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211262#M2803</guid>
      <dc:creator>KristianMortensen1</dc:creator>
      <dc:date>2016-10-08T10:54:18Z</dc:date>
    </item>
    <item>
      <title>Re: Why Python in CityEngine</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211263#M2804</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It is not possible for a shape to get information about another shape in another branch of the shape tree (except in the case of occlusion testing which happens behind the scenes when you use the occlusion functions). &amp;nbsp;As David mentions, you can however try to set some attributes that you can access in the same branch of the tree. &amp;nbsp;Or, you can globally set variables if you know the information ahead of time. &amp;nbsp;Sometimes python gives you more functionality than what you can get with just CGA, but in this case I don't see a straightforward way to do this with python. &amp;nbsp;By setting variables in the same branch of the tree, I rewrote your code so that FP3 has the same volume as FP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: #3f5fc0;"&gt;@Hidden&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;STRONG style="color: #7f0055; font-size: 10.0pt;"&gt;attr&lt;/STRONG&gt; &lt;EM style="color: #0000c0; font-size: 10.0pt;"&gt;b1Area&lt;/EM&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; = 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;STRONG style="color: #7f0055; font-size: 10.0pt;"&gt;const&lt;/STRONG&gt; &lt;EM style="color: green; font-size: 10.0pt;"&gt;lotArea&lt;/EM&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; = &lt;/SPAN&gt;&lt;STRONG style="color: #0000c0; font-size: 10.0pt;"&gt;geometry.area&lt;/STRONG&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;STRONG style="color: #7f0055; font-size: 10.0pt;"&gt;const&lt;/STRONG&gt; &lt;EM style="color: green; font-size: 10.0pt;"&gt;b1Height&lt;/EM&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; = 9&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;Lot&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; --&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;split&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;(x) { ~1: &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;FP2&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; | ~1: &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;FP&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;FP&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; --&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;extrude&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;(&lt;/SPAN&gt;&lt;EM style="color: green; font-size: 10.0pt;"&gt;b1Height&lt;/EM&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;B1.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #0000c0; font-size: 10.0pt;"&gt;print&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;(&lt;/SPAN&gt;&lt;STRONG style="color: #0000c0; font-size: 10.0pt;"&gt;geometry.volume&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;FP2&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; --&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;(&lt;/SPAN&gt;&lt;EM style="color: #0000c0; font-size: 10.0pt;"&gt;b1Area&lt;/EM&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;, &lt;/SPAN&gt;&lt;EM style="color: green; font-size: 10.0pt;"&gt;lotArea&lt;/EM&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; - &lt;/SPAN&gt;&lt;STRONG style="color: #0000c0; font-size: 10.0pt;"&gt;geometry.area&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;split&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;(z) { ~1: &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;FP3&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; | ~1: &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;OpenSpace&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;FP3&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; --&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;extrude&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;((&lt;/SPAN&gt;&lt;EM style="color: #0000c0; font-size: 10.0pt;"&gt;b1Area&lt;/EM&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;*&lt;/SPAN&gt;&lt;EM style="color: green; font-size: 10.0pt;"&gt;b1Height&lt;/EM&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;)/&lt;/SPAN&gt;&lt;STRONG style="color: #0000c0; font-size: 10.0pt;"&gt;geometry.area&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #0000c0; font-size: 10.0pt;"&gt;print&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;(&lt;/SPAN&gt;&lt;STRONG style="color: #0000c0; font-size: 10.0pt;"&gt;geometry.volume&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;OpenSpace&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt; --&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: #600060;"&gt;color&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; color: black;"&gt;(0,1,0)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;Your second question about getting the area of the polygon minus the area of the footprints is also a difficult problem. In general, I don't think this is possible because CityEngine cannot do boolean intersections. &amp;nbsp;Python won't help with this.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 17 Oct 2016 13:27:48 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211263#M2804</guid>
      <dc:creator>CherylLau</dc:creator>
      <dc:date>2016-10-17T13:27:48Z</dc:date>
    </item>
    <item>
      <title>Re: Why Python in CityEngine</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211264#M2805</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hey Cheryl,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think in the case of python, I was thinking there might be a few limited cases where you could use a combination of 1) getReports, 2) setAttributes, and 3) GenerateModels in the python API to iteratively retrieve report information to make decisions on particular aspects of of the models geometry. I was not entirely sure if it would actually work though.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I want to test an example, but I was largely thinking along the lines of a block like &amp;nbsp;(pseudoish code, not checking api explicitly):&lt;/P&gt;&lt;P&gt;depth=startValue&lt;/P&gt;&lt;P&gt;while model.getReports()['setback_area'] &amp;lt;100:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;depth+=1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i.setAttribute('depth', depth)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; model.GenerateModels()&lt;BR /&gt;It is not getting information from the same branch like you mentioned, so it is not efficient, you are just telling the whole generation process to get close to 100 SQ Meters for a particular leaf based on its report.&amp;nbsp;&lt;BR /&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 17 Oct 2016 16:22:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211264#M2805</guid>
      <dc:creator>DavidWasserman</dc:creator>
      <dc:date>2016-10-17T16:22:11Z</dc:date>
    </item>
    <item>
      <title>Re: Why Python in CityEngine</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211265#M2806</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, perhaps there is a way with python and reports and such. &amp;nbsp;I just haven't tried anything in this direction, so I don't&amp;nbsp;have a workflow to recommend.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Oct 2016 06:57:20 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211265#M2806</guid>
      <dc:creator>CherylLau</dc:creator>
      <dc:date>2016-10-18T06:57:20Z</dc:date>
    </item>
    <item>
      <title>Re: Why Python in CityEngine</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211266#M2807</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It is likely not the best approach for the problem at hand...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Oct 2016 03:29:58 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/211266#M2807</guid>
      <dc:creator>DavidWasserman</dc:creator>
      <dc:date>2016-10-19T03:29:58Z</dc:date>
    </item>
    <item>
      <title>Re: Why Python in CityEngine</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/1222747#M10702</link>
      <description>&lt;P&gt;Hi David! Im having problem in CityEngine and the video you mentioned is very helpful to me! ("&lt;SPAN&gt;splitting parcels&amp;nbsp;appropriately for Transit Oriented Development simulations"&lt;/SPAN&gt;)&lt;/P&gt;&lt;P&gt;But I'm still confused about how to divide parcels into lots in Python like the picture below? Can you give some suggestions or even python code?&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Vita_Vonanli_1-1666089367284.jpeg" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/53805iB7AE854FFDD7F734/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Vita_Vonanli_1-1666089367284.jpeg" alt="Vita_Vonanli_1-1666089367284.jpeg" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot!&lt;/P&gt;</description>
      <pubDate>Tue, 18 Oct 2022 10:38:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/why-python-in-cityengine/m-p/1222747#M10702</guid>
      <dc:creator>Vita_Vonanli</dc:creator>
      <dc:date>2022-10-18T10:38:01Z</dc:date>
    </item>
  </channel>
</rss>

