<?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: Batch import terrain layers? in ArcGIS CityEngine Questions</title>
    <link>https://community.esri.com/t5/arcgis-cityengine-questions/batch-import-terrain-layers/m-p/295111#M4089</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I made&amp;nbsp;a solution. I missed that addAttributeLayer could perform the function. Here's a script if anyone wants to run&amp;nbsp;a similar batch process. I found this necessary as my terrain files needed to be broken down to a smaller resolution.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here, I have both the texture tiles and heightmap tiles named to match and located in sub directories.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;from scripting import *&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;import os&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;# get a CityEngine instance&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;ce = CE()&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;# function to access the filename of a requested heightmap (.tif)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;def get_heightmap(file):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;return 'maps/&amp;lt;sub_directory&amp;gt;/' + file&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&lt;SPAN&gt;# function to access the filename of a requested&amp;nbsp;texture (.tif)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;def get_texture(file):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;return 'maps/&amp;lt;sub_directory&amp;gt;/' + file&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;def main():&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;# get a list containing all texture files (imagery)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;texture = os.listdir(ce.toFSPath('maps/imagery_by_grid_blocks'))&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;# get a list of all heightmap files&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;heightmaps_all = os.listdir(ce.toFSPath('maps/dem_by_grid_blocks'))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;heightmaps = [file for file in heightmaps_all if file.split('.')[1] == 'tif']&lt;/SPAN&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp;# for each image in the texture list&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for image in range(len(texture)):&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t = get_texture(texture[image]) # get the texture image&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_name = texture[image].split('.')[0] # this becomes the file name&lt;/SPAN&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;# loop through heightmaps to find the respective file&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for heightmap in range(len(heightmaps)):&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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;#find matching heightmap and texture file&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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;if texture[image].split('.')[0] == heightmaps[heightmap].split('.')[0]:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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;h = get_heightmap(heightmaps[heightmap])&lt;/SPAN&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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.addAttributeLayer(file_name, t, h, True)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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;print (file_name + ' has been added.')&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;if __name__ == '__main__':&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; main()&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 03 Sep 2019 06:10:20 GMT</pubDate>
    <dc:creator>AndrewCampbell2</dc:creator>
    <dc:date>2019-09-03T06:10:20Z</dc:date>
    <item>
      <title>Batch import terrain layers?</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/batch-import-terrain-layers/m-p/295110#M4088</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Is there any terrain importing functionality offered by the CityEngine Python API?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I can import both the heightmap and texture .tif files separately using the ce.importFile() method but I need to &lt;STRONG&gt;automate the process for batch imports&amp;nbsp;&lt;/STRONG&gt;so that each heightmap tile is draped with its respective texture file. Has anyone come across this problem?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Sep 2019 04:43:30 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/batch-import-terrain-layers/m-p/295110#M4088</guid>
      <dc:creator>AndrewCampbell2</dc:creator>
      <dc:date>2019-09-03T04:43:30Z</dc:date>
    </item>
    <item>
      <title>Re: Batch import terrain layers?</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/batch-import-terrain-layers/m-p/295111#M4089</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I made&amp;nbsp;a solution. I missed that addAttributeLayer could perform the function. Here's a script if anyone wants to run&amp;nbsp;a similar batch process. I found this necessary as my terrain files needed to be broken down to a smaller resolution.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here, I have both the texture tiles and heightmap tiles named to match and located in sub directories.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;from scripting import *&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;import os&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;# get a CityEngine instance&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;ce = CE()&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;# function to access the filename of a requested heightmap (.tif)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;def get_heightmap(file):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;return 'maps/&amp;lt;sub_directory&amp;gt;/' + file&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&lt;SPAN&gt;# function to access the filename of a requested&amp;nbsp;texture (.tif)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;def get_texture(file):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;return 'maps/&amp;lt;sub_directory&amp;gt;/' + file&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;def main():&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;# get a list containing all texture files (imagery)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;texture = os.listdir(ce.toFSPath('maps/imagery_by_grid_blocks'))&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;# get a list of all heightmap files&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;heightmaps_all = os.listdir(ce.toFSPath('maps/dem_by_grid_blocks'))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;heightmaps = [file for file in heightmaps_all if file.split('.')[1] == 'tif']&lt;/SPAN&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp; &amp;nbsp;# for each image in the texture list&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for image in range(len(texture)):&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t = get_texture(texture[image]) # get the texture image&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file_name = texture[image].split('.')[0] # this becomes the file name&lt;/SPAN&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;# loop through heightmaps to find the respective file&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for heightmap in range(len(heightmaps)):&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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;#find matching heightmap and texture file&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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;if texture[image].split('.')[0] == heightmaps[heightmap].split('.')[0]:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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;h = get_heightmap(heightmaps[heightmap])&lt;/SPAN&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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.addAttributeLayer(file_name, t, h, True)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&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;print (file_name + ' has been added.')&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt;if __name__ == '__main__':&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier, monospace; font-size: 13px;"&gt; main()&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Sep 2019 06:10:20 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/batch-import-terrain-layers/m-p/295111#M4089</guid>
      <dc:creator>AndrewCampbell2</dc:creator>
      <dc:date>2019-09-03T06:10:20Z</dc:date>
    </item>
    <item>
      <title>Re: Batch import terrain layers?</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/batch-import-terrain-layers/m-p/1174068#M10508</link>
      <description>&lt;P&gt;from scripting import *&lt;/P&gt;&lt;P&gt;import os&lt;/P&gt;&lt;P&gt;# get a CityEngine instance&lt;BR /&gt;ce = CE()&lt;/P&gt;&lt;P&gt;# function to access the filename of a requested heightmap (.tif)&lt;/P&gt;&lt;P&gt;def get_heightmap(file):&lt;BR /&gt;return 'maps/dem' + file&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;# function to access the filename of a requested texture (.tif)&lt;/P&gt;&lt;P&gt;def get_texture(file):&lt;BR /&gt;return 'maps/texture' + file&lt;/P&gt;&lt;P&gt;def main():&lt;/P&gt;&lt;P&gt;# get a list containing all texture files (imagery)&lt;/P&gt;&lt;P&gt;texture = os.listdir(ce.toFSPath('maps/imagery_by_grid_blocks'))&lt;/P&gt;&lt;P&gt;# get a list of all heightmap files&lt;/P&gt;&lt;P&gt;heightmaps_all = os.listdir(ce.toFSPath('maps/dem_by_grid_blocks'))&lt;BR /&gt;heightmaps = [file for file in heightmaps_all if file.split('.')[1] == 'tif']&lt;/P&gt;&lt;P&gt;# for each image in the texture list&lt;/P&gt;&lt;P&gt;for image in range(len(texture)):&lt;/P&gt;&lt;P&gt;t = get_texture(texture[image]) # get the texture image&lt;BR /&gt;file_name = texture[image].split('.')[0] # this becomes the file name&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;# loop through heightmaps to find the respective file&lt;/P&gt;&lt;P&gt;for heightmap in range(len(heightmaps)):&lt;BR /&gt;#find matching heightmap and texture file&lt;/P&gt;&lt;P&gt;if texture[image].split('.')[0] == heightmaps[heightmap].split('.')[0]:&lt;BR /&gt;h = get_heightmap(heightmaps[heightmap])&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;ce.addAttributeLayer(file_name, t, h, True)&lt;BR /&gt;print (file_name + ' has been added.')&lt;/P&gt;&lt;P&gt;if __name__ == '__main__':&lt;/P&gt;&lt;P&gt;main()&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="캡처.PNG" style="width: 750px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/41393iBE7223684EC0DB49/image-size/large?v=v2&amp;amp;px=999" role="button" title="캡처.PNG" alt="캡처.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="캡처.PNG1.PNG" style="width: 716px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/41394i27F094B3103BFE35/image-size/large?v=v2&amp;amp;px=999" role="button" title="캡처.PNG1.PNG" alt="캡처.PNG1.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;I wrote the script as above and I get the same error as in the last picture. I want to know the reason.&lt;/P&gt;</description>
      <pubDate>Mon, 16 May 2022 06:12:53 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/batch-import-terrain-layers/m-p/1174068#M10508</guid>
      <dc:creator>leehwichan</dc:creator>
      <dc:date>2022-05-16T06:12:53Z</dc:date>
    </item>
  </channel>
</rss>

