import type PopupTemplate from "../../PopupTemplate.js"; import type Extent from "../../geometry/Extent.js"; import type BuildingSublayer from "./BuildingSublayer.js"; import type Field from "../support/Field.js"; import type FeatureSet from "../../rest/support/FeatureSet.js"; import type Query from "../../rest/support/Query.js"; import type { LoadableMixin, LoadableMixinProperties } from "../../core/Loadable.js"; import type { EsriPromiseMixin } from "../../core/Promise.js"; import type { AbortOptions } from "../../core/promiseUtils.js"; import type { FieldDomainOptions } from "../types.js"; import type { DomainUnion } from "../support/types.js"; import type { RendererUnion } from "../../renderers/types.js"; import type { QueryProperties } from "../../rest/support/Query.js"; import type { CreatePopupTemplateOptions } from "../../support/popupUtils.js"; import type { HeatmapRendererProperties } from "../../renderers/HeatmapRenderer.js"; import type { PieChartRendererProperties } from "../../renderers/PieChartRenderer.js"; import type { DictionaryRendererProperties } from "../../renderers/DictionaryRenderer.js"; import type { DotDensityRendererProperties } from "../../renderers/DotDensityRenderer.js"; import type { UniqueValueRendererProperties } from "../../renderers/UniqueValueRenderer.js"; import type { ClassBreaksRendererProperties } from "../../renderers/ClassBreaksRenderer.js"; import type { SimpleRendererProperties } from "../../renderers/SimpleRenderer.js"; import type { PopupTemplateProperties } from "../../PopupTemplate.js"; import type { BuildingSublayerProperties } from "./BuildingSublayer.js"; export interface BuildingComponentSublayerProperties extends BuildingSublayerProperties, LoadableMixinProperties, Partial> { /** * The popup template for the sublayer. When set, the `popupTemplate` * allows users to access attributes and display their values in the * view's Popup when a feature is selected * using text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/) * for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) interacts with a * [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/). Setting a [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) * on this layer type is done in the same way as a FeatureLayer. * * A default popup template is automatically used if no `popupTemplate` has been defined when * [Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/Popup/#defaultPopupTemplateEnabled) * is set to `true`. * * @see [createPopupTemplate()](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#createPopupTemplate) * @see [SceneView.popup](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#popup) * @see [View2D.popup](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#popup) */ popupTemplate?: PopupTemplateProperties | null; /** * The renderer assigned to the sublayer. The renderer defines how to * visualize each feature in the sublayer. Depending on the renderer type, * features may be visualized with the same symbol, or with varying symbols * based on the values of provided attribute fields or functions. * * @example * // all features in the layer will be visualized with * // a blue color * sublayer.renderer = { * type: "simple", // autocasts as new SimpleRenderer() * symbol: { * type: "mesh-3d", // autocasts as new MeshSymbol3D() * symbolLayers: [{ * type: "fill", // autocasts as new FillSymbol3DLayer() * material: { color: "blue" } * }] * } * }; */ renderer?: (((SimpleRendererProperties & { type: "simple" }) | (ClassBreaksRendererProperties & { type: "class-breaks" }) | (UniqueValueRendererProperties & { type: "unique-value" }) | (DotDensityRendererProperties & { type: "dot-density" }) | (DictionaryRendererProperties & { type: "dictionary" }) | (PieChartRendererProperties & { type: "pie-chart" })) | (HeatmapRendererProperties & { type: "heatmap" })) | null; } /** * BuildingComponentSublayers contain 3D Object features representing building components * like doors, pipes or AC units. They are sublayers in a [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/BuildingSceneLayer/) * either directly or as part of a [BuildingGroupSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingGroupSublayer/). * This sublayer is similar to a 3D Object [SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/), it can be visualized with a * specific [renderer](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#renderer), popups can be customized using [popupTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#popupTemplate) * and SQL filters can be applied by setting a [definitionExpression](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#definitionExpression). * * Starting with version 4.17, BuildingComponentSublayers support attribute or spatial queries if the * the [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/BuildingSceneLayer/) has an associated feature layer. * * @since 4.10 * @see [Sample - BuildingSceneLayer with Slice widget](https://developers.arcgis.com/javascript/latest/sample-code/building-scene-layer-slice/) * @see [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/BuildingSceneLayer/) * @see [BuildingComponentSublayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/BuildingComponentSublayerView/) * @see [BuildingGroupSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingGroupSublayer/) * @see [SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/) */ export default class BuildingComponentSublayer extends BuildingComponentSublayerSuperclass { constructor(properties?: BuildingComponentSublayerProperties); /** * The SQL where clause used to filter features on the client. Only the features that satisfy the definition * expression are displayed in the [View](https://developers.arcgis.com/javascript/latest/references/core/views/View/). Setting a definition expression is useful * when only a subset of the data in the layer should be displayed. * * Setting the definition expression of a layer automatically updates all layer views. * * If the definition expression is set after the layer has been added to the map, the view will * automatically refresh itself to display the features that satisfy the new definition expression. * * Note that the initial loading time of the features remains unchanged, even if they are filtered. * This happens because, as opposed to Feature Layers, feature filtering is done client-side. This means that all * features need to be downloaded for filter evaluation. * * This property is evaluated on the client using the cached attributes and it only supports * [standardized SQL](https://doc.arcgis.com/en/arcgis-online/reference/sql-agol.htm). */ accessor definitionExpression: string | null | undefined; /** * An array of fields in the layer. Each field represents an attribute * that may contain a value for each feature in the layer. * * @since 4.33 */ get fields(): Field[]; /** * The name of a `global-id` [field](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#fields) containing * a globally unique identifier for each feature in the layer. * * @since 4.33 */ get globalIdField(): string; /** * Indicates how the layer should display in the [LayerList](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/) widget. * The possible values are listed below. * * Value | Description * ------|------------ * show | The layer is visible in the table of contents. * hide | The layer is hidden in the table of contents. * * @default "show" * @since 4.11 */ accessor listMode: "hide" | "show"; /** * The name of an `oid` [field](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#fields) containing * a unique value or identifier for each feature in the layer. * * @since 4.33 */ get objectIdField(): string; /** * An array of field names from the service to include with each feature. * To fetch the values from all fields in the layer, use `["*"]`. Fields specified in * `outFields` will be requested alongside with required fields for [rendering](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#renderer). * * To include fields in all sublayers, use the * [BuildingSceneLayer.outFields](https://developers.arcgis.com/javascript/latest/references/core/layers/BuildingSceneLayer/#outFields) * property of the parent layer. * * @since 4.12 */ accessor outFields: string[] | null | undefined; /** * Indicates whether to display popups when features in the layer are clicked. The layer needs to have a [popupTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#popupTemplate) to define what * information should be displayed in the popup. Alternatively, a default popup template may be automatically used if * [Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/Popup/#defaultPopupTemplateEnabled) is set to `true`. * * @default true * @see [createPopupTemplate()](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#createPopupTemplate) * @see [SceneView.popup](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#popup) * @see [View2D.popup](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#popup) */ accessor popupEnabled: boolean; /** * The popup template for the sublayer. When set, the `popupTemplate` * allows users to access attributes and display their values in the * view's Popup when a feature is selected * using text and/or charts. See the [PopupTemplate sample](https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/) * for an example of how [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) interacts with a * [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/). Setting a [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) * on this layer type is done in the same way as a FeatureLayer. * * A default popup template is automatically used if no `popupTemplate` has been defined when * [Popup.defaultPopupTemplateEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/Popup/#defaultPopupTemplateEnabled) * is set to `true`. * * @see [createPopupTemplate()](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#createPopupTemplate) * @see [SceneView.popup](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#popup) * @see [View2D.popup](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#popup) */ get popupTemplate(): PopupTemplate | null | undefined; set popupTemplate(value: PopupTemplateProperties | null | undefined); /** * The renderer assigned to the sublayer. The renderer defines how to * visualize each feature in the sublayer. Depending on the renderer type, * features may be visualized with the same symbol, or with varying symbols * based on the values of provided attribute fields or functions. * * @example * // all features in the layer will be visualized with * // a blue color * sublayer.renderer = { * type: "simple", // autocasts as new SimpleRenderer() * symbol: { * type: "mesh-3d", // autocasts as new MeshSymbol3D() * symbolLayers: [{ * type: "fill", // autocasts as new FillSymbol3DLayer() * material: { color: "blue" } * }] * } * }; */ get renderer(): RendererUnion | null | undefined; set renderer(value: (((SimpleRendererProperties & { type: "simple" }) | (ClassBreaksRendererProperties & { type: "class-breaks" }) | (UniqueValueRendererProperties & { type: "unique-value" }) | (DotDensityRendererProperties & { type: "dot-density" }) | (DictionaryRendererProperties & { type: "dictionary" }) | (PieChartRendererProperties & { type: "pie-chart" })) | (HeatmapRendererProperties & { type: "heatmap" })) | null | undefined); readonly type: "building-component"; /** * Creates a default popup template for the layer, populated with all the fields of the layer. * * @param options - Options for creating the popup template. * @returns The popup template, or `null` if the layer does not * have any fields. * @since 4.11 */ createPopupTemplate(options?: CreatePopupTemplateOptions): PopupTemplate | null | undefined; /** * Creates a query object that can be used to fetch features that * satisfy the component sublayer's current [definition expression](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#definitionExpression). * The query should only be used on the layer and not on the layer view. * * @returns The query object representing the layer's * definition expression. * @since 4.17 */ createQuery(): Query; /** * Returns the [Field](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Field/) instance for a field name (case-insensitive). * * @param fieldName - Name of the field. * @returns the matching field or `undefined` * @since 4.12 */ getField(fieldName: string): Field | null | undefined; /** * Returns the [Domain](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Domain/) associated with the given field name. The domain can be either a * [CodedValueDomain](https://developers.arcgis.com/javascript/latest/references/core/layers/support/CodedValueDomain/) or [RangeDomain](https://developers.arcgis.com/javascript/latest/references/core/layers/support/RangeDomain/). * * @param fieldName - Name of the field. * @param options - An object specifying additional options. See the * object specification table below for the required properties of this object. * @returns The Domain object associated with the given field name for the given feature. * @since 4.12 */ getFieldDomain(fieldName: string, options?: FieldDomainOptions): DomainUnion | null | undefined; /** * Gets field usage information. On building component sub layers, fields can always be used for rendering and popups. * Fields can only be used for querying if an associated feature service is available. * * The returned object contains the following usage information: * * Property | Type | Description * ----------------------|---------|------------ * supportsRenderer | boolean | Indicates that a field can be used in a renderer (e.g. in visual variables), [see renderer](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#renderer). * supportsLabelingInfo | boolean | This is always `false`, labeling is not supported on [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/BuildingSceneLayer/). * supportsPopupTemplate | boolean | Indicates that a field can be used in a popup template, [see popupTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#popupTemplate). * supportsLayerQuery | boolean | Indicates that a field can be used in layer queries, [see queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#queryFeatures). * * @param fieldName - The name of the field to get usage info for. * @returns the field usage * @since 4.17. */ getFieldUsageInfo(fieldName: string): object; /** * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the associated feature service and returns the 2D * [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) of features that satisfy the query. * At the moment the 3D Extent can be returned by using * [BuildingComponentSublayerView.queryExtent()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/BuildingComponentSublayerView/#queryExtent), * but this will return the 3D extent only for features currently in the view. * The query succeeds only if the BuildingSceneLayer has an associated feature layer. * If an associated feature layer is not available, then an error * with the name `buildingscenelayer:query-not-available` is thrown. Read more about queries in the * [Querying](https://developers.arcgis.com/javascript/latest/references/core/layers/BuildingSceneLayer/#querying) section of the BuildingSceneLayer class description. * * @param query - Specifies the query parameters. * @param options - An object with the following properties. * @returns When resolved, returns the extent and count of the features * that satisfy the input query. See the object specification table below for details. * Property | Type | Description * ---------|------|------------- * count | Number | The number of features that satisfy the input query. * extent | [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) | The extent of the features that satisfy the query. * @since 4.17 */ queryExtent(query?: QueryProperties | null | undefined, options?: AbortOptions): Promise<{ count: number; extent: Extent | null; }>; /** * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the associated feature service and * returns the number of features that satisfy the query. The query succeeds only if * the layer's `supportsLayerQuery` capability is enabled. Use the * [getFieldUsageInfo()](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#getFieldUsageInfo) method to check if the layer supports queries. * If querying is not enabled, then an error * with the name `buildingscenelayer:query-not-available` is thrown. Read more about queries in the * [Querying](https://developers.arcgis.com/javascript/latest/references/core/layers/BuildingSceneLayer/#querying) section of the BuildingSceneLayer class description. * * @param query - Specifies the query parameters. * @param options - An object with the following properties. * @returns Resolves to the count of the features satisfying the query. * @since 4.17 */ queryFeatureCount(query?: QueryProperties | null | undefined, options?: AbortOptions): Promise; /** * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the associated feature service and returns a * [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/). The query succeeds only if * the layer's `supportsLayerQuery` capability is enabled. Use the * [getFieldUsageInfo()](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#getFieldUsageInfo) method to check if the layer supports queries. * If querying is not enabled, then an error * with the name `buildingscenelayer:query-not-available` is thrown. Read more about queries in the * [Querying](https://developers.arcgis.com/javascript/latest/references/core/layers/BuildingSceneLayer/#querying) section of the BuildingSceneLayer class description. * * @param query - Specifies the query parameters. * @param options - An object with the following properties. * @returns Resolves to a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) * which contains the features satisfying the query. * @since 4.17 */ queryFeatures(query?: QueryProperties | null | undefined, options?: AbortOptions): Promise; /** * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the associated feature service and returns an array of * ObjectIDs of the features that satisfy the input query. The query succeeds only if * the layer's `supportsLayerQuery` capability is enabled. Use the * [getFieldUsageInfo()](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/#getFieldUsageInfo) method to check if the layer supports queries. * If querying is not enabled, then an error * with the name `buildingscenelayer:query-not-available` is thrown. Read more about queries in the * [Querying](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#querying) section of the SceneLayer class description. * * @param query - Specifies the query parameters. * @param options - An object with the following properties. * @returns Resolves to an array of numbers representing the object IDs * of the features satisfying the query. * @since 4.17 * @see [FeatureLayer.queryObjectIds()](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#queryObjectIds) */ queryObjectIds(query?: QueryProperties | null | undefined, options?: AbortOptions): Promise; } declare const BuildingComponentSublayerSuperclass: typeof BuildingSublayer & typeof EsriPromiseMixin & typeof LoadableMixin