{"id":2979032,"date":"2026-08-06T03:40:24","date_gmt":"2026-08-06T10:40:24","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2979032"},"modified":"2026-08-06T18:15:13","modified_gmt":"2026-08-07T01:15:13","slug":"create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1","title":{"rendered":"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1"},"author":166382,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23771,615021,23851],"tags":[781200,310972,30371,760762,176662],"industry":[],"product":[36551,36561],"class_list":["post-2979032","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","category-aec","category-data-management","tag-4d","tag-aec","tag-bim","tag-ifc","tag-revit","product-arcgis-online","product-arcgis-pro"],"acf":{"short_description":"4D simulation integrates time based information into (BIM) to create a dynamic, evolving view of the construction process.","flexible_content":[{"acf_fc_layout":"image","image":{"ID":2979080,"id":2979080,"title":"3D Object Layer 4D simulation","filename":"3D-Object-Layer-4D-simulation-1.gif","filesize":4845426,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/3D-Object-Layer-4D-simulation-1.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\/3d-object-layer-4d-simulation-2","alt":"3D Object Layer 4D simulation","author":"166382","description":"","caption":"3D Object Layers - 4D simulation","name":"3d-object-layer-4d-simulation-2","status":"inherit","uploaded_to":2979032,"date":"2026-08-03 20:13:23","modified":"2026-08-03 20:13:44","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1872,"height":852,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/3D-Object-Layer-4D-simulation-1-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/3D-Object-Layer-4D-simulation-1.gif","medium-width":464,"medium-height":211,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/3D-Object-Layer-4D-simulation-1.gif","medium_large-width":768,"medium_large-height":350,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/3D-Object-Layer-4D-simulation-1.gif","large-width":1872,"large-height":852,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/3D-Object-Layer-4D-simulation-1-1536x699.gif","1536x1536-width":1536,"1536x1536-height":699,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/3D-Object-Layer-4D-simulation-1.gif","2048x2048-width":1872,"2048x2048-height":852,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/3D-Object-Layer-4D-simulation-1-826x376.gif","card_image-width":826,"card_image-height":376,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/3D-Object-Layer-4D-simulation-1.gif","wide_image-width":1872,"wide_image-height":852}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>4D simulation integrates time\u2011based information into building information model (BIM) to create a dynamic, evolving view of the construction process. By connecting the 3D model with the project schedule, it allows teams to visualize how construction activities unfold over time. This time\u2011sequenced representation helps stakeholders better understand the project timeline, anticipate potential challenges, and enhance overall planning and operations.<\/p>\n<p>This blog article demonstrates how a construction schedule can be connected to an IFC model to generate an interactive 4D simulation that can be shared with stakeholders directly on the web.<\/p>\n<p><strong>Key points of 4D simulation<\/strong><\/p>\n<p>4D simulations can help with the following:<\/p>\n<ul>\n<li>Improved planning \u2014 4D simulation turns static schedules into dynamic visuals, helping teams spot sequencing issues and create more accurate timelines.<\/li>\n<li>Better communication \u2014 Visual schedules allow stakeholders to understand the construction process.<\/li>\n<li>Risk mitigation \u2014 By simulating activities in advance, teams can detect clashes and conflicts early, reducing rework and delays.<\/li>\n<li>Optimized resources \u2014 More accurate sequencing leads to better allocation of labor, equipment, and materials.<\/li>\n<\/ul>\n<p><strong>Before you begin<\/strong><\/p>\n<p>Ensure that all models are already\u00a0<a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/geolocating-a-digital-model-revit-or-ifc-in-arcgis-pro\/\">georeferenced<\/a>.<\/p>\n<p><strong>What you need<\/strong><\/p>\n<ul>\n<li>ArcGIS Notebooks and the notebook included with this post<\/li>\n<li>ArcGIS Pro 3.2 or later<\/li>\n<li>ArcGIS Online<\/li>\n<\/ul>\n<p>The core of 4D simulation is synchronization of the elements of a BIM model with the tasks described in the project schedule. By importing detailed 3D models and linking them directly to timeline data, 4D BIM enables a step\u2011by\u2011step visualization of how construction will progress. This alignment ensures that planned activities correspond with actual construction sequences, ultimately improving coordination and overall project efficiency.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"content","content":"<h2><strong>Build the initial 4D simulation manually<\/strong><\/h2>\n<p>Complete the following steps to build a 4D simulation using a building scene layer based on a construction schedule:<\/p>\n<ol>\n<li>Prepare the data to handle the time component.\n<ul>\n<li>Use the BIM File to Geodatabase geoprocessing tool to convert the BIM File Workspace (IFC) to a geodatabase.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>The tool also converts all the categories from the BIM File Workspace (IFC) to feature classes.<\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Delete empty feature classes to make the data more manageable.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n"},{"acf_fc_layout":"content","content":"<ol start=\"2\">\n<li>Add the time fields by doing the following for each of the feature classes:<\/li>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Using the Add Fields (multiple) geoprocessing tool, add the fields from the table:<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n"},{"acf_fc_layout":"content","content":"<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n<thead>\n<tr>\n<th>Field Name<\/th>\n<th>Type<\/th>\n<th>Length<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Sched_TaskID<\/td>\n<td>TEXT<\/td>\n<td>255<\/td>\n<\/tr>\n<tr>\n<td>Sched_TaskName<\/td>\n<td>TEXT<\/td>\n<td>255<\/td>\n<\/tr>\n<tr>\n<td>Sched_Phase<\/td>\n<td>TEXT<\/td>\n<td>255<\/td>\n<\/tr>\n<tr>\n<td>Sched_Category<\/td>\n<td>TEXT<\/td>\n<td>255<\/td>\n<\/tr>\n<tr>\n<td>Sched_Level<\/td>\n<td>TEXT<\/td>\n<td>255<\/td>\n<\/tr>\n<tr>\n<td>Sched_StoreyName<\/td>\n<td>TEXT<\/td>\n<td>255<\/td>\n<\/tr>\n<tr>\n<td>Sched_Elev_m<\/td>\n<td>DOUBLE<\/td>\n<td>None<\/td>\n<\/tr>\n<tr>\n<td>Sched_StartDay<\/td>\n<td>LONG<\/td>\n<td>None<\/td>\n<\/tr>\n<tr>\n<td>Sched_Duration<\/td>\n<td>LONG<\/td>\n<td>None<\/td>\n<\/tr>\n<tr>\n<td>Sched_EndDay<\/td>\n<td>LONG<\/td>\n<td>None<\/td>\n<\/tr>\n<tr>\n<td>Sched_StartDate<\/td>\n<td>DATE<\/td>\n<td>None<\/td>\n<\/tr>\n<tr>\n<td>Sched_EndDate<\/td>\n<td>DATE<\/td>\n<td>None<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n"},{"acf_fc_layout":"image","image":{"ID":2979065,"id":2979065,"title":"Add Fields (multiple) geoprocessing tool","filename":"Add-Fields-multiple-geoprocessing-tool.png","filesize":38795,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Add-Fields-multiple-geoprocessing-tool.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\/add-fields-multiple-geoprocessing-tool","alt":"Add Fields (multiple) parameters","author":"166382","description":"","caption":"Add Fields (multiple) parameters","name":"add-fields-multiple-geoprocessing-tool","status":"inherit","uploaded_to":2979032,"date":"2026-08-03 19:17:04","modified":"2026-08-03 19:17:21","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":584,"height":861,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Add-Fields-multiple-geoprocessing-tool-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Add-Fields-multiple-geoprocessing-tool.png","medium-width":177,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Add-Fields-multiple-geoprocessing-tool.png","medium_large-width":584,"medium_large-height":861,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Add-Fields-multiple-geoprocessing-tool.png","large-width":584,"large-height":861,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Add-Fields-multiple-geoprocessing-tool.png","1536x1536-width":584,"1536x1536-height":861,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Add-Fields-multiple-geoprocessing-tool.png","2048x2048-width":584,"2048x2048-height":861,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Add-Fields-multiple-geoprocessing-tool-315x465.png","card_image-width":315,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Add-Fields-multiple-geoprocessing-tool.png","wide_image-width":584,"wide_image-height":861}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Using the Add Join geoprocessing tool, join the feature class to the spreadsheet using the Storey Name value on the spreadsheet and ContainerName from the feature class.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n"},{"acf_fc_layout":"image","image":{"ID":2979054,"id":2979054,"title":"Spreadsheet showing the schedule by phases","filename":"Spreadsheet-showing-the-schedule-by-phases.png","filesize":154863,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Spreadsheet-showing-the-schedule-by-phases.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\/spreadsheet-showing-the-schedule-by-phases","alt":"Schedule by phases","author":"166382","description":"Spreadsheet showing the schedule by phases","caption":"Spreadsheet showing the schedule by phases","name":"spreadsheet-showing-the-schedule-by-phases","status":"inherit","uploaded_to":2979032,"date":"2026-08-03 18:40:05","modified":"2026-08-03 18:40:36","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1918,"height":811,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Spreadsheet-showing-the-schedule-by-phases-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Spreadsheet-showing-the-schedule-by-phases.png","medium-width":464,"medium-height":196,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Spreadsheet-showing-the-schedule-by-phases.png","medium_large-width":768,"medium_large-height":325,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Spreadsheet-showing-the-schedule-by-phases.png","large-width":1918,"large-height":811,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Spreadsheet-showing-the-schedule-by-phases-1536x649.png","1536x1536-width":1536,"1536x1536-height":649,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Spreadsheet-showing-the-schedule-by-phases.png","2048x2048-width":1918,"2048x2048-height":811,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Spreadsheet-showing-the-schedule-by-phases-826x349.png","card_image-width":826,"card_image-height":349,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Spreadsheet-showing-the-schedule-by-phases.png","wide_image-width":1918,"wide_image-height":811}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>The schedule in the spreadsheet must be formatted so each column represents each of the fields added on the prior step.<\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Populate the fields with schedule information using the Calculate Field (multiple) geoprocessing tool.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n"},{"acf_fc_layout":"content","content":"<ol start=\"3\">\n<li>Set the time property.\n<ul>\n<li>Open a global scene.<\/li>\n<li>Add the feature class dataset to the scene.<\/li>\n<li>Enable the <a href=\"https:\/\/doc.esri.com\/en\/arcgis-pro\/latest\/help\/mapping\/time\/set-the-time-properties-on-data.html\">time property<\/a> for each layer, and on the <strong>Time<\/strong> tab, set <strong>Layer Time<\/strong> to <strong>Each feature has start and end time fields <\/strong>using the <strong>Sched_StartDate<\/strong> and <strong>Sched_EndDate <\/strong>options for the drop-down menus.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n"},{"acf_fc_layout":"image","image":{"ID":2979052,"id":2979052,"title":"Properties -Layer Time tab","filename":"Properties-Time-tab.png","filesize":45245,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Properties-Time-tab.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\/properties-time-tab","alt":"Layer Properties - Time Tab","author":"166382","description":"","caption":"Layer Properties - Time Tab","name":"properties-time-tab","status":"inherit","uploaded_to":2979032,"date":"2026-08-03 18:35:17","modified":"2026-08-03 18:35:45","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1068,"height":616,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Properties-Time-tab-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Properties-Time-tab.png","medium-width":453,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Properties-Time-tab.png","medium_large-width":768,"medium_large-height":443,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Properties-Time-tab.png","large-width":1068,"large-height":616,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Properties-Time-tab.png","1536x1536-width":1068,"1536x1536-height":616,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Properties-Time-tab.png","2048x2048-width":1068,"2048x2048-height":616,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Properties-Time-tab-806x465.png","card_image-width":806,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Properties-Time-tab.png","wide_image-width":1068,"wide_image-height":616}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<ol start=\"4\">\n<li>Share on ArcGIS Online with the initial schedule.\n<ul>\n<li>On the ribbon, click the\u00a0<strong>Share<\/strong><\/li>\n<li>In the\u00a0<strong>Share As <\/strong>group, click<\/li>\n<li>Configure options on the <strong>Scene<\/strong> tab,<\/li>\n<li>On the <strong>Configuration<\/strong> tab, select <strong>Copy all data: Editable.<\/strong><\/li>\n<li>Click <strong>Analyze<\/strong>.<\/li>\n<li>Ignore the warning that the layer does not have a time zone.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n"},{"acf_fc_layout":"image","image":{"ID":2979050,"id":2979050,"title":"Messages tab with warnings Sharing WebScene","filename":"Messages-tab-with-warnings_SharingWebScene.png","filesize":54931,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Messages-tab-with-warnings_SharingWebScene.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\/messages-tab-with-warnings_sharingwebscene","alt":"Messages tab with warnings","author":"166382","description":"Sharing WebScene - Messages tab with warnings ","caption":"Sharing WebScene - Messages tab with warnings ","name":"messages-tab-with-warnings_sharingwebscene","status":"inherit","uploaded_to":2979032,"date":"2026-08-03 18:32:28","modified":"2026-08-03 18:33:10","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":665,"height":852,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Messages-tab-with-warnings_SharingWebScene-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Messages-tab-with-warnings_SharingWebScene.png","medium-width":204,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Messages-tab-with-warnings_SharingWebScene.png","medium_large-width":665,"medium_large-height":852,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Messages-tab-with-warnings_SharingWebScene.png","large-width":665,"large-height":852,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Messages-tab-with-warnings_SharingWebScene.png","1536x1536-width":665,"1536x1536-height":852,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Messages-tab-with-warnings_SharingWebScene.png","2048x2048-width":665,"2048x2048-height":852,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Messages-tab-with-warnings_SharingWebScene-363x465.png","card_image-width":363,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/Messages-tab-with-warnings_SharingWebScene.png","wide_image-width":665,"wide_image-height":852}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Click <strong>Publish<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n"},{"acf_fc_layout":"content","content":"<ol start=\"5\">\n<li>Open the scene view and start visualizing the progress of the construction.\n<ul>\n<li>On the time slider, click\u00a0<strong>Time slider options<\/strong>.<\/li>\n<li>Optionally, <a href=\"https:\/\/doc.arcgis.com\/en\/arcgis-online\/create-maps\/configure-time-mv.htm\">configure<\/a> the\u00a0Time slider mode.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n"},{"acf_fc_layout":"image","image":{"ID":2979048,"id":2979048,"title":"Time Enable Scene with BIM data","filename":"TimeEnable_Scene.png","filesize":1221857,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\/timeenable_scene","alt":"BIM Time Enable Scene","author":"166382","description":"","caption":"4D Enable Scene (BIM)","name":"timeenable_scene","status":"inherit","uploaded_to":2979032,"date":"2026-08-03 18:20:45","modified":"2026-08-03 18:21:57","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1914,"height":906,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene.png","medium-width":464,"medium-height":220,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene.png","medium_large-width":768,"medium_large-height":364,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene.png","large-width":1914,"large-height":906,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene-1536x727.png","1536x1536-width":1536,"1536x1536-height":727,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene.png","2048x2048-width":1914,"2048x2048-height":906,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene-826x391.png","card_image-width":826,"card_image-height":391,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene.png","wide_image-width":1914,"wide_image-height":906}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2><strong>Build the initial 4D simulation automatically<\/strong><\/h2>\n<p>The following code shows the workflow to build a 4D simulation using a hosted 3D object scene layer based on a construction schedule. This is an overview of the code, and\u00a0the provided notebook contains further details and explanations of the code.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"color: #24292e;background: #ffffff;display: block;padding: 1em\"><span style=\"color: #032f62\">\"\"\"\r\nBIM 4D Schedule Pipeline\r\nThis notebook demonstrates how to:\r\n\r\nConvert a BIM file (IFC\/Revit) to a File Geodatabase\r\nClean up empty feature classes\r\nAdd scheduling fields to each feature class\r\nPopulate those fields from a Construction Schedule spreadsheet\r\n\"\"\"<\/span>\r\n\r\n<span style=\"color: #d73a49\">import<\/span> os\r\n<span style=\"color: #d73a49\">import<\/span> re\r\n<span style=\"color: #d73a49\">import<\/span> json\r\n<span style=\"color: #d73a49\">import<\/span> math\r\n<span style=\"color: #d73a49\">import<\/span> arcpy\r\n<span style=\"color: #d73a49\">import<\/span> openpyxl\r\n<span style=\"color: #d73a49\">from<\/span> datetime <span style=\"color: #d73a49\">import<\/span> datetime\r\n<span style=\"color: #d73a49\">from<\/span> arcgis.gis <span style=\"color: #d73a49\">import<\/span> GIS\r\n<span style=\"color: #d73a49\">from<\/span> arcgis.<span style=\"color: #e36209\">map<\/span> <span style=\"color: #d73a49\">import<\/span> Scene\r\n\r\n<span style=\"color: #032f62\">\"\"\"\r\nUser Configuration\r\nSet input\/output paths and scheduling parameters.\r\n\"\"\"<\/span>\r\n\r\n<span style=\"color: #6a737d\"># BIM input file and dataset name<\/span>\r\nBIM_PATH = <span style=\"color: #032f62\">r\"C:\\\\Blog_4D_Simulation_Vertical\\Data\\IFC\\tower_ifc4x3.ifc\"<\/span>\r\nDATASET_NAME = <span style=\"color: #032f62\">\"Simulation\"<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Output geodatabase \u2014 defaults to the project's default geodatabase<\/span>\r\nOUTPUT_GDB = arcpy.mp.ArcGISProject(<span style=\"color: #032f62\">\"CURRENT\"<\/span>).defaultGeodatabase\r\n<span style=\"color: #6a737d\"># OUTPUT_GDB = r\"C:\\\\Blog_4D_Simulation\\Data\\GDB\\Demo_bldg_time.gdb\"  # Uncomment to override<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Excel schedule<\/span>\r\nEXCEL_PATH = <span style=\"color: #032f62\">r\"C:\\\\Blog_4D_Simulation_Vertical\\Data\\Schedule\\tower_schedule.xlsx\"<\/span>\r\nSHEET_NAME = <span style=\"color: #032f62\">\"Construction Schedule\"<\/span>\r\nHEADER_ROW = <span style=\"color: #005cc5\">4<\/span>  <span style=\"color: #6a737d\"># 1-based row containing column headers<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Join keys<\/span>\r\nEXCEL_JOIN_COL = <span style=\"color: #032f62\">\"Storey Name\"<\/span>\r\nGDB_JOIN_FIELD = <span style=\"color: #032f62\">\"ContainerName\"<\/span>\r\n\r\n<span style=\"color: #032f62\">\"\"\"\r\nField Definitions\r\nDefine the scheduling fields to add and the Excel-to-GDB column mapping.\r\n\"\"\"<\/span>\r\nSCHED_FIELDS = [\r\n    (<span style=\"color: #032f62\">\"Sched_TaskID\"<\/span>,     <span style=\"color: #032f62\">\"TEXT\"<\/span>,   <span style=\"color: #005cc5\">255<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_TaskName\"<\/span>,   <span style=\"color: #032f62\">\"TEXT\"<\/span>,   <span style=\"color: #005cc5\">255<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_Phase\"<\/span>,      <span style=\"color: #032f62\">\"TEXT\"<\/span>,   <span style=\"color: #005cc5\">255<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_Category\"<\/span>,   <span style=\"color: #032f62\">\"TEXT\"<\/span>,   <span style=\"color: #005cc5\">255<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_Level\"<\/span>,      <span style=\"color: #032f62\">\"TEXT\"<\/span>,   <span style=\"color: #005cc5\">255<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_StoreyName\"<\/span>, <span style=\"color: #032f62\">\"TEXT\"<\/span>,   <span style=\"color: #005cc5\">255<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_Elev_m\"<\/span>,     <span style=\"color: #032f62\">\"DOUBLE\"<\/span>, <span style=\"color: #005cc5\">None<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_StartDay\"<\/span>,   <span style=\"color: #032f62\">\"LONG\"<\/span>,   <span style=\"color: #005cc5\">None<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_Duration\"<\/span>,   <span style=\"color: #032f62\">\"LONG\"<\/span>,   <span style=\"color: #005cc5\">None<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_EndDay\"<\/span>,     <span style=\"color: #032f62\">\"LONG\"<\/span>,   <span style=\"color: #005cc5\">None<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_StartDate\"<\/span>,  <span style=\"color: #032f62\">\"DATE\"<\/span>,   <span style=\"color: #005cc5\">None<\/span>),\r\n    (<span style=\"color: #032f62\">\"Sched_EndDate\"<\/span>,    <span style=\"color: #032f62\">\"DATE\"<\/span>,   <span style=\"color: #005cc5\">None<\/span>),\r\n]\r\n\r\n<span style=\"color: #6a737d\"># Excel column header \u2192 GDB field name<\/span>\r\nFIELD_MAP = {\r\n    <span style=\"color: #032f62\">\"Task ID\"<\/span>:       <span style=\"color: #032f62\">\"Sched_TaskID\"<\/span>,\r\n    <span style=\"color: #032f62\">\"Task Name\"<\/span>:     <span style=\"color: #032f62\">\"Sched_TaskName\"<\/span>,\r\n    <span style=\"color: #032f62\">\"Phase\"<\/span>:         <span style=\"color: #032f62\">\"Sched_Phase\"<\/span>,\r\n    <span style=\"color: #032f62\">\"Category\"<\/span>:      <span style=\"color: #032f62\">\"Sched_Category\"<\/span>,\r\n    <span style=\"color: #032f62\">\"Level\"<\/span>:         <span style=\"color: #032f62\">\"Sched_Level\"<\/span>,\r\n    <span style=\"color: #032f62\">\"Storey Name\"<\/span>:   <span style=\"color: #032f62\">\"Sched_StoreyName\"<\/span>,\r\n    <span style=\"color: #032f62\">\"Elevation (m)\"<\/span>: <span style=\"color: #032f62\">\"Sched_Elev_m\"<\/span>,\r\n    <span style=\"color: #032f62\">\"Start Day\"<\/span>:     <span style=\"color: #032f62\">\"Sched_StartDay\"<\/span>,\r\n    <span style=\"color: #032f62\">\"Duration (d)\"<\/span>:  <span style=\"color: #032f62\">\"Sched_Duration\"<\/span>,\r\n    <span style=\"color: #032f62\">\"End Day\"<\/span>:       <span style=\"color: #032f62\">\"Sched_EndDay\"<\/span>,\r\n    <span style=\"color: #032f62\">\"Start Date\"<\/span>:    <span style=\"color: #032f62\">\"Sched_StartDate\"<\/span>,\r\n    <span style=\"color: #032f62\">\"End Date\"<\/span>:      <span style=\"color: #032f62\">\"Sched_EndDate\"<\/span>,\r\n}\r\n\r\n<span style=\"color: #6a737d\"># Keywords to resolve GDB Category \u2192 Excel Category<\/span>\r\nFACADE_KEYWORDS    = {<span style=\"color: #032f62\">\"curtainwall\"<\/span>, <span style=\"color: #032f62\">\"plate\"<\/span>}\r\nSTRUCTURE_KEYWORDS = {<span style=\"color: #032f62\">\"wall\"<\/span>, <span style=\"color: #032f62\">\"slab\"<\/span>, <span style=\"color: #032f62\">\"column\"<\/span>, <span style=\"color: #032f62\">\"member\"<\/span>, <span style=\"color: #032f62\">\"roof\"<\/span>}\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 1 \u2014 Convert BIM to Geodatabase\r\n\"\"\"<\/span>\r\n<span style=\"color: #6a737d\"># Create the output geodatabase<\/span>\r\n<span style=\"color: #d73a49\">if<\/span> <span style=\"color: #d73a49\">not<\/span> arcpy.Exists(OUTPUT_GDB):\r\n    arcpy.management.CreateFileGDB(\r\n        os.path.dirname(OUTPUT_GDB),\r\n        os.path.basename(OUTPUT_GDB)\r\n    )\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Created: <span style=\"color: #24292e\">{OUTPUT_GDB}<\/span>\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Delete existing feature dataset if it exists (overwrite)<\/span>\r\nfeature_dataset = os.path.join(OUTPUT_GDB, DATASET_NAME)\r\n<span style=\"color: #d73a49\">if<\/span> arcpy.Exists(feature_dataset):\r\n    arcpy.management.Delete(feature_dataset)\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Deleted existing: <span style=\"color: #24292e\">{feature_dataset}<\/span>\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Convert BIM file<\/span>\r\narcpy.conversion.BIMFileToGeodatabase(\r\n    in_bim_file_workspace=BIM_PATH,\r\n    out_gdb_path=OUTPUT_GDB,\r\n    out_dataset_name=DATASET_NAME\r\n)\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">\"BIM conversion complete.\"<\/span>)\r\n\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 2 \u2014 Delete Empty Feature Classes\r\n\"\"\"<\/span>\r\n<span style=\"color: #6a737d\"># List all feature classes in the dataset<\/span>\r\nfeature_dataset = os.path.join(OUTPUT_GDB, DATASET_NAME)\r\narcpy.env.workspace = feature_dataset\r\nall_fcs = arcpy.ListFeatureClasses()\r\n\r\n<span style=\"color: #6a737d\"># Delete any with zero rows<\/span>\r\n<span style=\"color: #d73a49\">for<\/span> fc <span style=\"color: #d73a49\">in<\/span> all_fcs:\r\n    fc_path = os.path.join(feature_dataset, fc)\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #e36209\">int<\/span>(arcpy.management.GetCount(fc_path)[<span style=\"color: #005cc5\">0<\/span>]) == <span style=\"color: #005cc5\">0<\/span>:\r\n        arcpy.management.Delete(fc_path)\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Deleted empty: <span style=\"color: #24292e\">{fc}<\/span>\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Delete ExteriorShell (no ContainerName field, cannot be schedule-joined)<\/span>\r\n<span style=\"color: #d73a49\">for<\/span> fc <span style=\"color: #d73a49\">in<\/span> arcpy.ListFeatureClasses():\r\n    <span style=\"color: #d73a49\">if<\/span> fc.lower().startswith(<span style=\"color: #032f62\">\"exteriorshell\"<\/span>):\r\n        arcpy.management.Delete(os.path.join(feature_dataset, fc))\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Deleted: <span style=\"color: #24292e\">{fc}<\/span>\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Refresh the list<\/span>\r\narcpy.env.workspace = feature_dataset\r\nsurviving_fcs = arcpy.ListFeatureClasses()\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"\\n<span style=\"color: #24292e\">{<span style=\"color: #e36209\">len<\/span>(surviving_fcs)}<\/span> feature classes remaining.\"<\/span>)\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 3 \u2014 Add Scheduling Fields\r\n\"\"\"<\/span>\r\narcpy.ClearWorkspaceCache_management()\r\n<span style=\"color: #d73a49\">for<\/span> fc <span style=\"color: #d73a49\">in<\/span> surviving_fcs:\r\n    fc_path = os.path.join(feature_dataset, fc)\r\n    <span style=\"color: #d73a49\">for<\/span> field_name, field_type, field_length <span style=\"color: #d73a49\">in<\/span> SCHED_FIELDS:\r\n        <span style=\"color: #d73a49\">if<\/span> field_type == <span style=\"color: #032f62\">\"TEXT\"<\/span>:\r\n            arcpy.management.AddField(fc_path, field_name, field_type, field_length=field_length)\r\n        <span style=\"color: #d73a49\">else<\/span>:\r\n            arcpy.management.AddField(fc_path, field_name, field_type)\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Added fields to: <span style=\"color: #24292e\">{fc}<\/span>\"<\/span>)\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 4 \u2014 Load Construction Schedule from Excel\r\n\"\"\"<\/span>\r\nwb = openpyxl.load_workbook(EXCEL_PATH, read_only=<span style=\"color: #005cc5\">True<\/span>, data_only=<span style=\"color: #005cc5\">True<\/span>)\r\nws = wb[SHEET_NAME]\r\nrows = <span style=\"color: #e36209\">list<\/span>(ws.iter_rows(values_only=<span style=\"color: #005cc5\">True<\/span>))\r\nheaders = [<span style=\"color: #e36209\">str<\/span>(h).strip() <span style=\"color: #d73a49\">if<\/span> h <span style=\"color: #d73a49\">else<\/span> <span style=\"color: #032f62\">\"\"<\/span> <span style=\"color: #d73a49\">for<\/span> h <span style=\"color: #d73a49\">in<\/span> rows[HEADER_ROW - <span style=\"color: #005cc5\">1<\/span>]]\r\n\r\njoin_col_idx = headers.index(EXCEL_JOIN_COL)\r\ncat_col_idx  = headers.index(<span style=\"color: #032f62\">\"Category\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Build lookup: (Storey Name, Category) \u2192 row data<\/span>\r\nschedule = {}\r\n<span style=\"color: #d73a49\">for<\/span> row <span style=\"color: #d73a49\">in<\/span> rows[HEADER_ROW:]:\r\n    join_val = row[join_col_idx]\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #d73a49\">not<\/span> join_val <span style=\"color: #d73a49\">or<\/span> <span style=\"color: #e36209\">str<\/span>(join_val).strip() == <span style=\"color: #032f62\">\"\"<\/span>:\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n    join_str = <span style=\"color: #e36209\">str<\/span>(join_val).strip()\r\n    <span style=\"color: #d73a49\">if<\/span> join_str.startswith(<span style=\"color: #032f62\">\"\u25b6\"<\/span>) <span style=\"color: #d73a49\">or<\/span> join_str.startswith(<span style=\"color: #032f62\">\"&gt;\"<\/span>):\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n    cat_val = row[cat_col_idx]\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #d73a49\">not<\/span> cat_val:\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n    cat_str = <span style=\"color: #e36209\">str<\/span>(cat_val).strip()\r\n\r\n    key = (join_str, cat_str)\r\n    schedule[key] = {col: row[headers.index(col)] <span style=\"color: #d73a49\">for<\/span> col <span style=\"color: #d73a49\">in<\/span> FIELD_MAP <span style=\"color: #d73a49\">if<\/span> col <span style=\"color: #d73a49\">in<\/span> headers}\r\n\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Loaded <span style=\"color: #24292e\">{<span style=\"color: #e36209\">len<\/span>(schedule)}<\/span> schedule entries.\"<\/span>)\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 5 \u2014 Resolve Category\r\nMap GDB Category values (e.g. \"IfcWall\") to Excel categories (\"Structure\" or \"Facade\").\r\n\"\"\"<\/span>\r\n<span style=\"color: #d73a49\">def<\/span> <span style=\"color: #6f42c1\">resolve_category<\/span>(raw_category):\r\n    <span style=\"color: #032f62\">\"\"\"Map a GDB Category to 'Structure' or 'Facade' via keyword matching.\"\"\"<\/span>\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #d73a49\">not<\/span> raw_category:\r\n        <span style=\"color: #d73a49\">return<\/span> <span style=\"color: #005cc5\">None<\/span>\r\n    lower = raw_category.strip().lower()\r\n    <span style=\"color: #6a737d\"># Test Facade first so 'curtainwall' doesn't match Structure's 'wall'<\/span>\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #e36209\">any<\/span>(kw <span style=\"color: #d73a49\">in<\/span> lower <span style=\"color: #d73a49\">for<\/span> kw <span style=\"color: #d73a49\">in<\/span> FACADE_KEYWORDS):\r\n        <span style=\"color: #d73a49\">return<\/span> <span style=\"color: #032f62\">\"Facade\"<\/span>\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #e36209\">any<\/span>(kw <span style=\"color: #d73a49\">in<\/span> lower <span style=\"color: #d73a49\">for<\/span> kw <span style=\"color: #d73a49\">in<\/span> STRUCTURE_KEYWORDS):\r\n        <span style=\"color: #d73a49\">return<\/span> <span style=\"color: #032f62\">\"Structure\"<\/span>\r\n    <span style=\"color: #d73a49\">return<\/span> <span style=\"color: #005cc5\">None<\/span>\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 6 \u2014 Populate Schedule Fields\r\nJoin each feature class row to the schedule by (ContainerName, resolved Category).\r\n\"\"\"<\/span>\r\n\r\ncursor_fields = [GDB_JOIN_FIELD, <span style=\"color: #032f62\">\"Category\"<\/span>] + <span style=\"color: #e36209\">list<\/span>(FIELD_MAP.values())\r\n\r\n<span style=\"color: #d73a49\">for<\/span> fc <span style=\"color: #d73a49\">in<\/span> surviving_fcs:\r\n    fc_path = os.path.join(feature_dataset, fc)\r\n\r\n    <span style=\"color: #6a737d\"># Skip feature classes without the join fields<\/span>\r\n    fc_field_names = {f.name <span style=\"color: #d73a49\">for<\/span> f <span style=\"color: #d73a49\">in<\/span> arcpy.ListFields(fc_path)}\r\n    <span style=\"color: #d73a49\">if<\/span> GDB_JOIN_FIELD <span style=\"color: #d73a49\">not<\/span> <span style=\"color: #d73a49\">in<\/span> fc_field_names <span style=\"color: #d73a49\">or<\/span> <span style=\"color: #032f62\">\"Category\"<\/span> <span style=\"color: #d73a49\">not<\/span> <span style=\"color: #d73a49\">in<\/span> fc_field_names:\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n    matched = <span style=\"color: #005cc5\">0<\/span>\r\n    <span style=\"color: #d73a49\">with<\/span> arcpy.da.UpdateCursor(fc_path, cursor_fields) <span style=\"color: #d73a49\">as<\/span> cursor:\r\n        <span style=\"color: #d73a49\">for<\/span> row <span style=\"color: #d73a49\">in<\/span> cursor:\r\n            container_name = row[<span style=\"color: #005cc5\">0<\/span>]\r\n            raw_category = row[<span style=\"color: #005cc5\">1<\/span>]\r\n\r\n            <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #d73a49\">not<\/span> container_name:\r\n                <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n            resolved_cat = resolve_category(raw_category)\r\n            <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #d73a49\">not<\/span> resolved_cat:\r\n                <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n            key = (<span style=\"color: #e36209\">str<\/span>(container_name).strip(), resolved_cat)\r\n            <span style=\"color: #d73a49\">if<\/span> key <span style=\"color: #d73a49\">not<\/span> <span style=\"color: #d73a49\">in<\/span> schedule:\r\n                <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n            record = schedule[key]\r\n            new_row = [container_name, raw_category]\r\n            <span style=\"color: #d73a49\">for<\/span> excel_col <span style=\"color: #d73a49\">in<\/span> FIELD_MAP:\r\n                new_row.append(record.get(excel_col))\r\n\r\n            cursor.updateRow(new_row)\r\n            matched += <span style=\"color: #005cc5\">1<\/span>\r\n\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"<span style=\"color: #24292e\">{fc}<\/span>: <span style=\"color: #24292e\">{matched}<\/span> rows updated.\"<\/span>)\r\n\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">\"\\nDone.\"<\/span>)\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 7 \u2014 Create a Global Scene\r\nCreate an in-memory global scene and add the feature classes from the geodatabase.\r\n\"\"\"<\/span>\r\naprx = arcpy.mp.ArcGISProject(<span style=\"color: #032f62\">\"CURRENT\"<\/span>)\r\n<span style=\"color: #6a737d\"># If running outside ArcGIS Pro, use the path to your .aprx file instead of \"CURRENT\"<\/span>\r\n<span style=\"color: #6a737d\"># aprx = arcpy.mp.ArcGISProject(r\"C:\\Projects\\Tower\\Tower.aprx\")<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Create a new global scene<\/span>\r\nscene_name = <span style=\"color: #032f62\">\"4D_Schedule_Scene\"<\/span>\r\nscene = aprx.createMap(scene_name, map_type=<span style=\"color: #032f62\">\"GLOBE\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Add each surviving feature class to the scene<\/span>\r\n<span style=\"color: #d73a49\">for<\/span> fc <span style=\"color: #d73a49\">in<\/span> surviving_fcs:\r\n    fc_path = os.path.join(feature_dataset, fc)\r\n    scene.addDataFromPath(fc_path)\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Added: <span style=\"color: #24292e\">{fc}<\/span>\"<\/span>)\r\n\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"\\nScene '<span style=\"color: #24292e\">{scene_name}<\/span>' created with <span style=\"color: #24292e\">{<span style=\"color: #e36209\">len<\/span>(surviving_fcs)}<\/span> layers.\"<\/span>)\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 8 \u2014 Enable Time on Layers\r\nEnable time properties using the Sched_StartDate and Sched_EndDate fields.\r\n\"\"\"<\/span>\r\n<span style=\"color: #d73a49\">for<\/span> lyr <span style=\"color: #d73a49\">in<\/span> scene.listLayers():\r\n    <span style=\"color: #d73a49\">if<\/span> lyr.isFeatureLayer:\r\n        lyr.enableTime(startTimeField=<span style=\"color: #032f62\">\"Sched_StartDate\"<\/span>, endTimeField=<span style=\"color: #032f62\">\"Sched_EndDate\"<\/span>)\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Time enabled: <span style=\"color: #24292e\">{lyr.name}<\/span>\"<\/span>)\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 9 \u2014 Share as a Web Scene\r\nPublish each layer as a scene layer, then create a Web Scene item that bundles them all together.\r\n\"\"\"<\/span>\r\n<span style=\"color: #6a737d\"># Connect to portal using the active Pro sign-in<\/span>\r\ngis = GIS(<span style=\"color: #032f62\">\"pro\"<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Publish each feature layer as its own scene layer service<\/span>\r\npublished_items = []\r\nlayer_names = []\r\n<span style=\"color: #d73a49\">for<\/span> lyr <span style=\"color: #d73a49\">in<\/span> scene.listLayers():\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #d73a49\">not<\/span> lyr.isFeatureLayer:\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n    service_name = <span style=\"color: #032f62\">f\"BIM_4D_<span style=\"color: #24292e\">{lyr.name}<\/span>\"<\/span>.replace(<span style=\"color: #032f62\">\" \"<\/span>, <span style=\"color: #032f62\">\"_\"<\/span>)\r\n    draft = scene.getWebLayerSharingDraft(\r\n        server_type=<span style=\"color: #032f62\">\"HOSTING_SERVER\"<\/span>,\r\n        service_type=<span style=\"color: #032f62\">\"SCENE_LAYER\"<\/span>,\r\n        service_name=service_name,\r\n        layers_and_tables=[lyr]\r\n    )\r\n    draft.summary = <span style=\"color: #032f62\">\"4D BIM schedule visualization\"<\/span>\r\n    draft.tags = <span style=\"color: #032f62\">\"BIM, 4D, construction schedule, IFC\"<\/span>\r\n    draft.sharing.sharingLevel = <span style=\"color: #032f62\">\"OWNER\"<\/span>\r\n\r\n    <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Publishing: <span style=\"color: #24292e\">{lyr.name}<\/span>...\"<\/span>)\r\n    <span style=\"color: #d73a49\">try<\/span>:\r\n        result = arcpy.sharing.Publish(draft)\r\n        item_url = result[<span style=\"color: #032f62\">\"web_scene_layer\"<\/span>][<span style=\"color: #032f62\">\"item_url\"<\/span>]\r\n        item_id = item_url.split(<span style=\"color: #032f62\">\"id=\"<\/span>)[-<span style=\"color: #005cc5\">1<\/span>]\r\n        published_items.append(item_id)\r\n        layer_names.append(lyr.name)\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  Published \u2192 <span style=\"color: #24292e\">{item_url}<\/span>\"<\/span>)\r\n    <span style=\"color: #d73a49\">except<\/span> Exception <span style=\"color: #d73a49\">as<\/span> e:\r\n        msg = <span style=\"color: #e36209\">str<\/span>(e)\r\n        <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #032f62\">\"already exists\"<\/span> <span style=\"color: #d73a49\">in<\/span> msg.lower() <span style=\"color: #d73a49\">or<\/span> <span style=\"color: #032f62\">\"service name\"<\/span> <span style=\"color: #d73a49\">in<\/span> msg.lower():\r\n            <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  SKIPPED: Service '<span style=\"color: #24292e\">{service_name}<\/span>' already exists. \"<\/span>\r\n                  <span style=\"color: #032f62\">f\"Delete or rename the existing service and retry.\"<\/span>)\r\n        <span style=\"color: #d73a49\">else<\/span>:\r\n            <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  ERROR publishing <span style=\"color: #24292e\">{lyr.name}<\/span>: <span style=\"color: #24292e\">{msg}<\/span>\"<\/span>)\r\n\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"\\n<span style=\"color: #24292e\">{<span style=\"color: #e36209\">len<\/span>(published_items)}<\/span> of <span style=\"color: #24292e\">{<span style=\"color: #e36209\">sum<\/span>(<span style=\"color: #005cc5\">1<\/span> <span style=\"color: #d73a49\">for<\/span> l <span style=\"color: #d73a49\">in<\/span> scene.listLayers() <span style=\"color: #d73a49\">if<\/span> l.isFeatureLayer)}<\/span> layers published.\"<\/span>)\r\n<span style=\"color: #6a737d\"># Create a Web Scene that references all the published scene layers<\/span>\r\nweb_scene = Scene()\r\n<span style=\"color: #d73a49\">for<\/span> item_id, name <span style=\"color: #d73a49\">in<\/span> <span style=\"color: #e36209\">zip<\/span>(published_items, layer_names):\r\n    item = gis.content.get(item_id)\r\n    <span style=\"color: #d73a49\">if<\/span> item <span style=\"color: #d73a49\">is<\/span> <span style=\"color: #005cc5\">None<\/span>:\r\n        <span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"  WARNING: Could not find item <span style=\"color: #24292e\">{item_id}<\/span>, skipping\"<\/span>)\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n    web_scene.content.add(item)\r\n\r\nweb_scene_properties = {\r\n    <span style=\"color: #032f62\">\"title\"<\/span>: <span style=\"color: #032f62\">\"BIM_4D_Schedule_Scene\"<\/span>,\r\n    <span style=\"color: #032f62\">\"tags\"<\/span>: <span style=\"color: #032f62\">\"BIM, 4D, construction schedule, IFC\"<\/span>,\r\n    <span style=\"color: #032f62\">\"snippet\"<\/span>: <span style=\"color: #032f62\">\"Time-enabled 3D web scene from BIM data with construction schedule\"<\/span>\r\n}\r\nweb_scene_item = web_scene.save(web_scene_properties)\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"\\nWeb Scene published: <span style=\"color: #24292e\">{web_scene_item.homepage}<\/span>\"<\/span>)\r\n<span style=\"color: #032f62\">\"\"\"\r\nStep 10 (Optional) \u2014 Patch Web Scene Viewpoint &amp; Time Slider\r\nRe-read the saved web scene JSON and patch it with a computed viewpoint centered on the data, a time slider widget, and lighting settings.\r\n\"\"\"<\/span>\r\n\r\n<span style=\"color: #6a737d\"># --- Patch the web scene JSON: viewpoint from data, time slider, lighting ---<\/span>\r\ndata = web_scene_item.get_data()\r\nlayers = data.get(<span style=\"color: #032f62\">\"operationalLayers\"<\/span>, [])\r\nall_xmin, all_ymin, all_xmax, all_ymax, all_zmin, all_zmax = [], [], [], [], [], []\r\n\r\n<span style=\"color: #d73a49\">for<\/span> lyr <span style=\"color: #d73a49\">in<\/span> layers:\r\n    url = lyr.get(<span style=\"color: #032f62\">\"url\"<\/span>)\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #d73a49\">not<\/span> url:\r\n        <span style=\"color: #d73a49\">continue<\/span>\r\n\r\n    <span style=\"color: #6a737d\"># Fix itemId from the SceneServer root<\/span>\r\n    svc_url = re.sub(<span style=\"color: #032f62\">r'\/layers\/\\d+$'<\/span>, <span style=\"color: #032f62\">''<\/span>, url)\r\n    svc_info = gis._con.get(svc_url, {<span style=\"color: #032f62\">\"f\"<\/span>: <span style=\"color: #032f62\">\"json\"<\/span>})\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #e36209\">isinstance<\/span>(svc_info, <span style=\"color: #e36209\">dict<\/span>) <span style=\"color: #d73a49\">and<\/span> <span style=\"color: #032f62\">\"serviceItemId\"<\/span> <span style=\"color: #d73a49\">in<\/span> svc_info:\r\n        lyr[<span style=\"color: #032f62\">\"itemId\"<\/span>] = svc_info[<span style=\"color: #032f62\">\"serviceItemId\"<\/span>]\r\n\r\n    <span style=\"color: #6a737d\"># Get actual extent from the layer endpoint<\/span>\r\n    lyr_info = gis._con.get(url, {<span style=\"color: #032f62\">\"f\"<\/span>: <span style=\"color: #032f62\">\"json\"<\/span>})\r\n    <span style=\"color: #d73a49\">if<\/span> <span style=\"color: #e36209\">isinstance<\/span>(lyr_info, <span style=\"color: #e36209\">dict<\/span>) <span style=\"color: #d73a49\">and<\/span> <span style=\"color: #032f62\">\"error\"<\/span> <span style=\"color: #d73a49\">not<\/span> <span style=\"color: #d73a49\">in<\/span> lyr_info:\r\n        ext = lyr_info.get(<span style=\"color: #032f62\">\"fullExtent\"<\/span>)\r\n        <span style=\"color: #d73a49\">if<\/span> ext:\r\n            all_xmin.append(ext.get(<span style=\"color: #032f62\">\"xmin\"<\/span>, <span style=\"color: #005cc5\">0<\/span>))\r\n            all_ymin.append(ext.get(<span style=\"color: #032f62\">\"ymin\"<\/span>, <span style=\"color: #005cc5\">0<\/span>))\r\n            all_xmax.append(ext.get(<span style=\"color: #032f62\">\"xmax\"<\/span>, <span style=\"color: #005cc5\">0<\/span>))\r\n            all_ymax.append(ext.get(<span style=\"color: #032f62\">\"ymax\"<\/span>, <span style=\"color: #005cc5\">0<\/span>))\r\n            all_zmin.append(ext.get(<span style=\"color: #032f62\">\"zmin\"<\/span>, <span style=\"color: #005cc5\">0<\/span>))\r\n            all_zmax.append(ext.get(<span style=\"color: #032f62\">\"zmax\"<\/span>, <span style=\"color: #005cc5\">0<\/span>))\r\n\r\n    <span style=\"color: #6a737d\"># Strip bloated blocks<\/span>\r\n    <span style=\"color: #d73a49\">for<\/span> key <span style=\"color: #d73a49\">in<\/span> [<span style=\"color: #032f62\">\"layerDefinition\"<\/span>, <span style=\"color: #032f62\">\"popupInfo\"<\/span>]:\r\n        lyr.pop(key, <span style=\"color: #005cc5\">None<\/span>)\r\n\r\n<span style=\"color: #6a737d\"># Compute viewpoint from actual layer extents<\/span>\r\n<span style=\"color: #d73a49\">if<\/span> all_xmin:\r\n    cx = (<span style=\"color: #e36209\">min<\/span>(all_xmin) + <span style=\"color: #e36209\">max<\/span>(all_xmax)) \/ <span style=\"color: #005cc5\">2<\/span>\r\n    cy = (<span style=\"color: #e36209\">min<\/span>(all_ymin) + <span style=\"color: #e36209\">max<\/span>(all_ymax)) \/ <span style=\"color: #005cc5\">2<\/span>\r\n    cz = <span style=\"color: #e36209\">max<\/span>(all_zmax) <span style=\"color: #d73a49\">if<\/span> all_zmax <span style=\"color: #d73a49\">else<\/span> <span style=\"color: #005cc5\">500<\/span>\r\n    cam_z = cz + <span style=\"color: #005cc5\">300<\/span>\r\n\r\n    <span style=\"color: #6a737d\"># Project data center from WGS84 to Web Mercator (3857) for the viewpoint<\/span>\r\n    mx = cx * <span style=\"color: #005cc5\">20037508.34<\/span> \/ <span style=\"color: #005cc5\">180.0<\/span>\r\n    my = math.log(math.tan((<span style=\"color: #005cc5\">90.0<\/span> + cy) * math.pi \/ <span style=\"color: #005cc5\">360.0<\/span>)) * <span style=\"color: #005cc5\">20037508.34<\/span> \/ math.pi\r\n\r\n    <span style=\"color: #6a737d\"># Offset camera south so the tilted view looks at the building, not past it<\/span>\r\n    backoff_m = cam_z * <span style=\"color: #005cc5\">1.5<\/span>\r\n    my -= backoff_m\r\n\r\n    sr_wkid = <span style=\"color: #005cc5\">102100<\/span>\r\n    sr_latest = <span style=\"color: #005cc5\">3857<\/span>\r\n    cam_x, cam_y = mx, my\r\n<span style=\"color: #d73a49\">else<\/span>:\r\n    cam_x, cam_y, cam_z = <span style=\"color: #005cc5\">0<\/span>, <span style=\"color: #005cc5\">0<\/span>, <span style=\"color: #005cc5\">300000<\/span>\r\n    sr_wkid, sr_latest = <span style=\"color: #005cc5\">102100<\/span>, <span style=\"color: #005cc5\">3857<\/span>\r\n\r\n<span style=\"color: #6a737d\"># Get time range from schedule<\/span>\r\nall_starts = [v[<span style=\"color: #032f62\">\"Start Date\"<\/span>] <span style=\"color: #d73a49\">for<\/span> v <span style=\"color: #d73a49\">in<\/span> schedule.values() <span style=\"color: #d73a49\">if<\/span> v.get(<span style=\"color: #032f62\">\"Start Date\"<\/span>)]\r\nall_ends = [v[<span style=\"color: #032f62\">\"End Date\"<\/span>] <span style=\"color: #d73a49\">for<\/span> v <span style=\"color: #d73a49\">in<\/span> schedule.values() <span style=\"color: #d73a49\">if<\/span> v.get(<span style=\"color: #032f62\">\"End Date\"<\/span>)]\r\nstart_ms = <span style=\"color: #e36209\">int<\/span>(<span style=\"color: #e36209\">min<\/span>(all_starts).timestamp() * <span style=\"color: #005cc5\">1000<\/span>)\r\nend_ms = <span style=\"color: #e36209\">int<\/span>(<span style=\"color: #e36209\">max<\/span>(all_ends).timestamp() * <span style=\"color: #005cc5\">1000<\/span>)\r\ntotal_days = (end_ms - start_ms) \/ (<span style=\"color: #005cc5\">1000<\/span> * <span style=\"color: #005cc5\">60<\/span> * <span style=\"color: #005cc5\">60<\/span> * <span style=\"color: #005cc5\">24<\/span>)\r\ninterval_days = <span style=\"color: #e36209\">max<\/span>(<span style=\"color: #005cc5\">1<\/span>, <span style=\"color: #e36209\">int<\/span>(total_days \/ <span style=\"color: #005cc5\">40<\/span>))\r\n\r\n<span style=\"color: #6a737d\"># Apply: time slider<\/span>\r\ndata[<span style=\"color: #032f62\">\"widgets\"<\/span>] = {\r\n    <span style=\"color: #032f62\">\"timeSlider\"<\/span>: {\r\n        <span style=\"color: #032f62\">\"properties\"<\/span>: {\r\n            <span style=\"color: #032f62\">\"startTime\"<\/span>: start_ms,\r\n            <span style=\"color: #032f62\">\"endTime\"<\/span>: end_ms,\r\n            <span style=\"color: #032f62\">\"currentTimeExtent\"<\/span>: [<span style=\"color: #005cc5\">None<\/span>, end_ms],\r\n            <span style=\"color: #032f62\">\"thumbCount\"<\/span>: <span style=\"color: #005cc5\">1<\/span>,\r\n            <span style=\"color: #032f62\">\"thumbMovingRate\"<\/span>: <span style=\"color: #005cc5\">300<\/span>,\r\n            <span style=\"color: #032f62\">\"timeStopInterval\"<\/span>: {\r\n                <span style=\"color: #032f62\">\"interval\"<\/span>: interval_days,\r\n                <span style=\"color: #032f62\">\"units\"<\/span>: <span style=\"color: #032f62\">\"esriTimeUnitsDays\"<\/span>\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n<span style=\"color: #6a737d\"># Apply: initial state<\/span>\r\n<span style=\"color: #d73a49\">if<\/span> <span style=\"color: #032f62\">\"initialState\"<\/span> <span style=\"color: #d73a49\">not<\/span> <span style=\"color: #d73a49\">in<\/span> data:\r\n    data[<span style=\"color: #032f62\">\"initialState\"<\/span>] = {}\r\n<span style=\"color: #d73a49\">if<\/span> <span style=\"color: #032f62\">\"environment\"<\/span> <span style=\"color: #d73a49\">not<\/span> <span style=\"color: #d73a49\">in<\/span> data.get(<span style=\"color: #032f62\">\"initialState\"<\/span>, {}):\r\n    data[<span style=\"color: #032f62\">\"initialState\"<\/span>][<span style=\"color: #032f62\">\"environment\"<\/span>] = {}\r\n\r\ndata[<span style=\"color: #032f62\">\"initialState\"<\/span>][<span style=\"color: #032f62\">\"timeExtent\"<\/span>] = [<span style=\"color: #005cc5\">None<\/span>, end_ms]\r\ndata[<span style=\"color: #032f62\">\"initialState\"<\/span>][<span style=\"color: #032f62\">\"viewpoint\"<\/span>] = {\r\n    <span style=\"color: #032f62\">\"camera\"<\/span>: {\r\n        <span style=\"color: #032f62\">\"position\"<\/span>: {\r\n            <span style=\"color: #032f62\">\"spatialReference\"<\/span>: {<span style=\"color: #032f62\">\"latestWkid\"<\/span>: sr_latest, <span style=\"color: #032f62\">\"wkid\"<\/span>: sr_wkid},\r\n            <span style=\"color: #032f62\">\"x\"<\/span>: cam_x, <span style=\"color: #032f62\">\"y\"<\/span>: cam_y, <span style=\"color: #032f62\">\"z\"<\/span>: cam_z\r\n        },\r\n        <span style=\"color: #032f62\">\"heading\"<\/span>: <span style=\"color: #005cc5\">0<\/span>, <span style=\"color: #032f62\">\"tilt\"<\/span>: <span style=\"color: #005cc5\">65<\/span>\r\n    }\r\n}\r\ndata[<span style=\"color: #032f62\">\"initialState\"<\/span>][<span style=\"color: #032f62\">\"environment\"<\/span>][<span style=\"color: #032f62\">\"lighting\"<\/span>] = {\r\n    <span style=\"color: #032f62\">\"type\"<\/span>: <span style=\"color: #032f62\">\"sun\"<\/span>, <span style=\"color: #032f62\">\"directShadows\"<\/span>: <span style=\"color: #005cc5\">True<\/span>, <span style=\"color: #032f62\">\"displayUTCOffset\"<\/span>: <span style=\"color: #005cc5\">0<\/span>\r\n}\r\ndata[<span style=\"color: #032f62\">\"heightModelInfo\"<\/span>] = {<span style=\"color: #032f62\">\"heightModel\"<\/span>: <span style=\"color: #032f62\">\"gravity_related_height\"<\/span>, <span style=\"color: #032f62\">\"heightUnit\"<\/span>: <span style=\"color: #032f62\">\"meter\"<\/span>}\r\n\r\n<span style=\"color: #6a737d\"># Save patched web scene<\/span>\r\nweb_scene_item.update(item_properties={}, data=json.dumps(data))\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"\\nPatched: viewpoint, time slider (<span style=\"color: #24292e\">{interval_days}<\/span>-day intervals over <span style=\"color: #24292e\">{<span style=\"color: #e36209\">int<\/span>(total_days)}<\/span> days), lighting\"<\/span>)\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Data center: (<span style=\"color: #24292e\">{cx:<span style=\"color: #005cc5\">.4<\/span>f}<\/span>, <span style=\"color: #24292e\">{cy:<span style=\"color: #005cc5\">.4<\/span>f}<\/span>), Camera: (<span style=\"color: #24292e\">{cam_x:<span style=\"color: #005cc5\">.0<\/span>f}<\/span>, <span style=\"color: #24292e\">{cam_y:<span style=\"color: #005cc5\">.0<\/span>f}<\/span>, z=<span style=\"color: #24292e\">{cam_z:<span style=\"color: #005cc5\">.0<\/span>f}<\/span>) [Web Mercator]\"<\/span>)\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"Time: <span style=\"color: #24292e\">{<span style=\"color: #e36209\">min<\/span>(all_starts)}<\/span> \u2192 <span style=\"color: #24292e\">{<span style=\"color: #e36209\">max<\/span>(all_ends)}<\/span>\"<\/span>)\r\n<span style=\"color: #e36209\">print<\/span>(<span style=\"color: #032f62\">f\"View: <span style=\"color: #24292e\">{web_scene_item.homepage}<\/span>\"<\/span>)<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<p>Figure 1 shows an overview of the steps necessary to create the 4D simulation using a hosted 3D object scene layer and how to keep it up to date.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2979042,"id":2979042,"title":"WorkflowBIMTimeEnable","filename":"WorkflowTimeEnable_Graphic.png","filesize":1148700,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\/workflowtimeenable_graphic","alt":"4D simulation for a scene layer and hosted 3D object","author":"166382","description":"Workflow to create a 4D simulation for a scene layer and hosted 3D object","caption":"Figure 1. Workflow to create a 4D simulation for a scene layer and hosted 3D object","name":"workflowtimeenable_graphic","status":"inherit","uploaded_to":2979032,"date":"2026-08-03 18:08:46","modified":"2026-08-03 18:10:20","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1365,"height":768,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","large-width":1365,"large-height":768,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","1536x1536-width":1365,"1536x1536-height":768,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","2048x2048-width":1365,"2048x2048-height":768,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/WorkflowTimeEnable_Graphic.png","wide_image-width":1365,"wide_image-height":768}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h1>Conclusion<\/h1>\n<p>By using ArcGIS Online to create an interactive representation of the construction process, project teams can use a 4D simulation to work more efficiently and accurately.\u00a0 The 4D simulation can enhance BIM projects and improve project planning and scheduling, communication and collaboration, risk mitigation, and resource management.<\/p>\n<p>With a 4D simulation, the schedule is no longer a spreadsheet someone has to interpret. The whole team can watch the structure rising phase by phase where it will actually stands. Planners catch sequencing issues before they ever reach the field, stakeholders follow the construction without needing data interpreted, and everyone can view the same picture at the same time. Because the model and the schedule are connected in ArcGIS, the simulation keeps pace with the project. Part 2 of this blog series will demonstrate an example of a delay in a building project, and the simulation will automatically change to display the new information.<\/p>\n"},{"acf_fc_layout":"content","content":"<h2><strong>Download the\u00a0<a href=\"https:\/\/arcgisforautocad.maps.arcgis.com\/home\/item.html?id=6b9edaddc4f543358553d6d6e981eaf8#overview\">ArcGIS Notebook<\/a><\/strong><\/h2>\n"},{"acf_fc_layout":"content","content":"<p><span data-teams=\"true\">This blog demonstrates how a 3D Object Layer can be linked to construction schedule data to create a time-enabled visualization. While the example focuses on a few 3D Object Layer, the same workflow can be applied to additional layers, allowing them to be managed and scheduled consistently using the approach outlined in this article.<\/span><\/p>\n"}],"authors":[{"ID":166382,"user_firstname":"David","user_lastname":"Alvarez","nickname":"David Alvarez","user_nicename":"dalvarez","display_name":"David Alvarez","user_email":"DAlvarez@esri.com","user_url":"","user_registered":"2021-01-27 18:11:11","user_description":"David is a product engineer on the BIM\/CAD team.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/02\/DavidAlvarez-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":369202,"user_firstname":"Jared","user_lastname":"Kohler","nickname":"Jared Kohler","user_nicename":"jkohler","display_name":"Jared Kohler","user_email":"jkohler@esri.com","user_url":"","user_registered":"2025-02-27 20:55:45","user_description":"Jared Kohler is a Sr. Technical Consultant on a Denver-based data science team in Esri Professional Services. He's been helping customers with solution design and problem solving since 2021.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/02\/Jared-Head-Shot-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":386702,"user_firstname":"Brett","user_lastname":"Heist","nickname":"Brett Heist","user_nicename":"bre13078esri-com_arcaec","display_name":"Brett Heist","user_email":"bheist@esri.com","user_url":"","user_registered":"2025-06-27 16:19:25","user_description":"Brett Heist is a Senior Solution Engineer at Esri specializing in the Architecture, Engineering, and Construction industry. With over a decade of AEC experience and a foundation in Environmental Geography and spatial data science, Brett brings a rare combination of domain depth and technical fluency to his work. \r\n\r\nAt Esri, Brett helps AEC organizations unlock the strategic value of location intelligence, from translating complex GIS capabilities into clear business outcomes to developing technical solutions that fit real-world workflows. He's a regular presence at industry conferences, an active creator of AEC-focused content, and someone who gravitates toward the intersection of spatial data, automation, and practical problem-solving.\r\n\r\nWhether he's writing Arcade expressions, building out Python workflows, or piloting a drone to capture aerial data, Brett's approach is consistent: find the most effective way to make spatial technology work harder for the people using it.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/04\/ChatGPT-Image-Apr-30-2026-06_29_26-PM-465x465.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":23991,"user_firstname":"Daniel","user_lastname":"Chantlos","nickname":"Daniel Chantlos","user_nicename":"dchantlos","display_name":"Daniel Chantlos","user_email":"dchantlos@esri.com","user_url":"https:\/\/www.linkedin.com\/in\/dchantlos\/","user_registered":"2020-04-08 14:46:34","user_description":"Daniel is a Sr. Solution Engineer based in Singapore. He specializes in helping AEC firms unlock the value of spatial intelligence by bridging the gap between complex design and construction workflows and GIS.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/05\/DanielChantlos_Profile_FullRes-461x465.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":"","show_article_image":false,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene-CARD2.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene-WIDE2.png"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1<\/title>\n<meta name=\"description\" content=\"ArcGIS Blog Supporting Digital Twin and Construction Visualization Workflows Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1 Publishing BIM Data to ArcGIS Online and Enterprise\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1\" \/>\n<meta property=\"og:description\" content=\"ArcGIS Blog Supporting Digital Twin and Construction Visualization Workflows Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1 Publishing BIM Data to ArcGIS Online and Enterprise\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-07T01:15:13+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\"},\"author\":{\"name\":\"David Alvarez\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/91ef98666e3489083d734f74d3d8ec31\"},\"headline\":\"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1\",\"datePublished\":\"2026-08-06T10:40:24+00:00\",\"dateModified\":\"2026-08-07T01:15:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\"},\"wordCount\":13,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"4D\",\"AEC\",\"BIM\",\"ifc\",\"Revit\"],\"articleSection\":[\"3D Visualization &amp; Analytics\",\"Architecture, Engineering, and Construction\",\"Data Management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\",\"name\":\"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2026-08-06T10:40:24+00:00\",\"dateModified\":\"2026-08-07T01:15:13+00:00\",\"description\":\"ArcGIS Blog Supporting Digital Twin and Construction Visualization Workflows Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1 Publishing BIM Data to ArcGIS Online and Enterprise\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/91ef98666e3489083d734f74d3d8ec31\",\"name\":\"David Alvarez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/02\/DavidAlvarez-213x200.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/02\/DavidAlvarez-213x200.jpg\",\"caption\":\"David Alvarez\"},\"description\":\"David is a product engineer on the BIM\/CAD team.\",\"sameAs\":[\"www.linkedin.com\/in\/dalvarezgeospatial\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/dalvarez\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1","description":"ArcGIS Blog Supporting Digital Twin and Construction Visualization Workflows Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1 Publishing BIM Data to ArcGIS Online and Enterprise","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1","og_locale":"en_US","og_type":"article","og_title":"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1","og_description":"ArcGIS Blog Supporting Digital Twin and Construction Visualization Workflows Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1 Publishing BIM Data to ArcGIS Online and Enterprise","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2026-08-07T01:15:13+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1"},"author":{"name":"David Alvarez","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/91ef98666e3489083d734f74d3d8ec31"},"headline":"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1","datePublished":"2026-08-06T10:40:24+00:00","dateModified":"2026-08-07T01:15:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1"},"wordCount":13,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["4D","AEC","BIM","ifc","Revit"],"articleSection":["3D Visualization &amp; Analytics","Architecture, Engineering, and Construction","Data Management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1","name":"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2026-08-06T10:40:24+00:00","dateModified":"2026-08-07T01:15:13+00:00","description":"ArcGIS Blog Supporting Digital Twin and Construction Visualization Workflows Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1 Publishing BIM Data to ArcGIS Online and Enterprise","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Create a 4D simulation with a scene layer and hosted 3D object\u2014Part 1"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/91ef98666e3489083d734f74d3d8ec31","name":"David Alvarez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/02\/DavidAlvarez-213x200.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2021\/02\/DavidAlvarez-213x200.jpg","caption":"David Alvarez"},"description":"David is a product engineer on the BIM\/CAD team.","sameAs":["www.linkedin.com\/in\/dalvarezgeospatial"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/dalvarez"}]}},"text_date":"August 6, 2026","author_name":"Multiple Authors","author_page":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/aec\/create-a-4d-simulation-with-a-scene-layer-and-hosted-3d-object-part-1","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/08\/TimeEnable_Scene-WIDE2.png","primary_product":"ArcGIS Pro","tag_data":[{"term_id":781200,"name":"4D","slug":"4d","term_group":0,"term_taxonomy_id":781200,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":310972,"name":"AEC","slug":"aec","term_group":0,"term_taxonomy_id":310972,"taxonomy":"post_tag","description":"","parent":0,"count":44,"filter":"raw"},{"term_id":30371,"name":"BIM","slug":"bim","term_group":0,"term_taxonomy_id":30371,"taxonomy":"post_tag","description":"","parent":0,"count":70,"filter":"raw"},{"term_id":760762,"name":"ifc","slug":"ifc","term_group":0,"term_taxonomy_id":760762,"taxonomy":"post_tag","description":"","parent":0,"count":19,"filter":"raw"},{"term_id":176662,"name":"Revit","slug":"revit","term_group":0,"term_taxonomy_id":176662,"taxonomy":"post_tag","description":"","parent":0,"count":27,"filter":"raw"}],"category_data":[{"term_id":23771,"name":"3D Visualization &amp; Analytics","slug":"3d-gis","term_group":0,"term_taxonomy_id":23771,"taxonomy":"category","description":"","parent":0,"count":714,"filter":"raw"},{"term_id":615021,"name":"Architecture, Engineering, and Construction","slug":"aec","term_group":0,"term_taxonomy_id":615021,"taxonomy":"category","description":"","parent":0,"count":143,"filter":"raw"},{"term_id":23851,"name":"Data Management","slug":"data-management","term_group":0,"term_taxonomy_id":23851,"taxonomy":"category","description":"","parent":0,"count":968,"filter":"raw"}],"product_data":[{"term_id":36551,"name":"ArcGIS Online","slug":"arcgis-online","term_group":0,"term_taxonomy_id":36551,"taxonomy":"product","description":"","parent":0,"count":2475,"filter":"raw"},{"term_id":36561,"name":"ArcGIS Pro","slug":"arcgis-pro","term_group":0,"term_taxonomy_id":36561,"taxonomy":"product","description":"","parent":0,"count":2145,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=arcgis-pro","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2979032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/166382"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2979032"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2979032\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2979032"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2979032"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2979032"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2979032"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2979032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}