In this sample we load a building from a BIM project and allow to explore its detailed interior information with a Slice component. The building was published as a BuildingSceneLayer from a Revit project using ArcGIS Pro.
Creating and adding a building scene layer to the Scene component works the same as for the other layers:
const buildingLayer = new BuildingSceneLayer({
url: "https://tiles.arcgis.com/tiles/V6ZHFr6zdgNZuVG0/arcgis/rest/services/BSL__4326__US_Redlands__EsriAdminBldg_PublicDemo/SceneServer",
title: "Administration Building, Redlands - Building Scene Layer",
});
viewElement.map.layers.add(buildingLayer);
A BuildingSceneLayer contains complex digital models of buildings and interiors. Because of the high complexity, the data is organized in BuildingGroupSublayers which contain BuildingComponentSublayers. Often, a building scene layer contains an overview layer that displays only the exterior shell of a building (exterior walls, rooftop and so on). This helps viewing the model as a single feature. The building scene layer also contains a Full Model
BuildingGroupSublayer with all the features in a building grouped by disciplines: Architectural, Structural, Electrical and Mechanical. Each of the disciplines contains BuildingComponentSublayers with features such as rooftop, walls, doors, AC units, lighting fixtures, columns, foundation and so on.
Usually, when adding a building scene layer to a WebScene or a Map, only the overview layer is visible. In the sample, we want to view the Full Model
from the beginning. So we hide the overview layer and display the Full Model
sublayer:
buildingLayer.allSublayers.forEach((layer) => {
switch (layer.modelName) {
case "FullModel":
layer.visible = true;
break;
case "Overview":
layer.visible = false;
break;
}
});
Full
and Overview
are direct sublayers of a BuildingSceneLayer. In case you want to search within its subgroups, you can use BuildingSceneLayer.allSublayers which is the flat array of sublayers. To identify the sublayer, it's better to use BuildingSceneLayer.modelName because this is a standard name based on the I3S specification and it cannot be changed.
The Building
are similar to a SceneLayer. You can apply renderers or enable popups.
In this sample, we apply a SimpleRenderer to color all interior doors in red:
// A renderer can be set on a BuildingComponentSublayer
doorsLayer.renderer = {
type: "simple", // autocasts as new SimpleRenderer()
symbol: {
type: "mesh-3d", // autocasts as new MeshSymbol3D()
symbolLayers: [
{
type: "fill", // autocasts as new FillSymbol3DLayer()
material: {
color: "red"
}
}
]
}
};
With so much detailed information in a building, it's inevitable that some parts of the building will occlude others. The Slice component can be used to discover the interior parts of the building in an easy way.

The Slice can be added to the Scene component like this:
<arcgis-scene item-id="c7470b0e4e4c44288cf287d658155300">
<arcgis-slice position="top-right"></arcgis-slice>
</arcgis-scene>
The layers that we want to examine in detail can be excluded from the slice, by adding them programmatically to the excludedLayers property.
sliceComponent.excludedLayers.addMany(excludedLayers);
The user can also select the excluded layers using the component's UI: press "Exclude layer" and click on any feature in the view to have the slicing ignore the layer or sublayer it is on.
In this sample, we also create the SlicePlane programmatically. The plane can be set or retrieved with Slice.shape.