@itwin/core-frontend
Version:
iTwin.js frontend components
94 lines • 4.46 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/** @packageDocumentation
* @module Tiles
*/
import { assert } from "@itwin/core-bentley";
import { ImageMapLayerSettings, ModelMapLayerSettings } from "@itwin/core-common";
import { IModelApp } from "../../IModelApp";
import { createModelMapLayerTileTreeReference, TileTreeReference } from "../internal";
/**
* A [[TileTreeReference]] to be used specifically for [[MapTileTree]]s.
* The reference refers to its MapTileTree by way of the tree's [[TileTreeOwner]].
* Multiple MapLayerTileTreeReferences can refer to the same TileTree if the map layer settings are equivalent, meaning
* they have identical format IDs, URLs, credentials, etc.
* @beta
*/
export class MapLayerTileTreeReference extends TileTreeReference {
/* @internal */
_layerSettings;
/* @internal */
_layerIndex;
/* @internal */
iModel;
/**
* Constructor for a MapLayerTileTreeReference.
* @param _layerSettings Map layer settings that are applied to the MapLayerTileTreeReference.
* @param _layerIndex The index of the associated map layer.
* @param iModel The iModel containing the MapLayerTileTreeReference.
* @internal
*/
constructor(_layerSettings, _layerIndex, iModel) {
super();
this._layerSettings = _layerSettings;
this._layerIndex = _layerIndex;
this.iModel = iModel;
}
/* @internal */
get _transparency() { return this._layerSettings.transparency ? this._layerSettings.transparency : undefined; }
/** Returns true if the associated map layer, including its sublayers, is opaque. */
get isOpaque() {
return this._layerSettings.visible && (!this._layerSettings.allSubLayersInvisible) && !this._layerSettings.transparentBackground && 0 === this._layerSettings.transparency;
}
/* Returns the map layer name. */
get layerName() { return this._layerSettings.name; }
/** Returns the imagery provider for the tile tree. */
get imageryProvider() { return undefined; }
set layerSettings(layerSettings) { this._layerSettings = layerSettings; }
/** Returns the layer settings for the map layer. */
get layerSettings() { return this._layerSettings; }
/** Returns the index of the map layer associated with the tile tree. */
get layerIndex() { return this._layerIndex; }
/** Returns the transparency value of the map layer. */
get transparency() { return this._transparency; }
canSupplyToolTip(hit) {
const tree = this.treeOwner.tileTree;
return undefined !== tree && hit.iModel === tree.iModel && tree.modelId === hit.sourceId;
}
/* Returns a tooltip describing the hit with the map layer name. */
async getToolTip(hit) {
const tree = this.treeOwner.tileTree;
if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.sourceId)
return undefined;
const strings = [];
strings.push(`Map Layer: ${this._layerSettings.name}`);
const div = document.createElement("div");
div.innerHTML = strings.join("<br>");
return div;
}
decorate(_context) {
this.imageryProvider?.decorate(_context);
}
}
/**
* Creates a MapLayerTileTreeReference.
* @param layerSettings Model or image map layer settings that are applied to the MapLayerTileTreeReference.
* @param layerIndex The index of the associated map layer.
* @param iModel The iModel containing the new MapLayerTileTreeReference.
* @returns Returns the new tile tree reference, either a ModelMapLayerTileTreeReference or an ImageryMapLayerTreeReference.
* @internal
*/
export function createMapLayerTreeReference(layerSettings, layerIndex, iModel) {
if (layerSettings instanceof ModelMapLayerSettings) {
return createModelMapLayerTileTreeReference(layerSettings, layerIndex, iModel);
}
else if (layerSettings instanceof ImageMapLayerSettings)
return IModelApp.mapLayerFormatRegistry.createImageryMapLayerTree(layerSettings, layerIndex, iModel);
else {
assert(false);
return undefined;
}
}
//# sourceMappingURL=MapLayerTileTreeReference.js.map