UNPKG

@giro3d/giro3d

Version:

A JS/WebGL framework for 3D geospatial data visualization

178 lines 6.36 kB
import { Box3, Mesh, Vector2, type Intersection, type Object3D, type Object3DEventMap, type Raycaster, type Texture, type WebGLRenderTarget } from 'three'; import type LayeredMaterial from '../renderer/LayeredMaterial'; import type { MaterialOptions } from '../renderer/LayeredMaterial'; import type RenderingState from '../renderer/RenderingState'; import type Disposable from './Disposable'; import type Extent from './geographic/Extent'; import type GetElevationOptions from './GetElevationOptions'; import type Instance from './Instance'; import ElevationLayer from './layer/ElevationLayer'; import type Layer from './layer/Layer'; import type MemoryUsage from './MemoryUsage'; import { type GetMemoryUsageContext } from './MemoryUsage'; import OffsetScale from './OffsetScale'; import TileGeometry from './TileGeometry'; import { type NeighbourList } from './TileIndex'; type GeometryPool = Map<string, TileGeometry>; export interface TileMeshEventMap extends Object3DEventMap { 'visibility-changed': unknown; dispose: unknown; } declare class TileMesh extends Mesh<TileGeometry, LayeredMaterial, TileMeshEventMap> implements Disposable, MemoryUsage { readonly isMemoryUsage: true; private readonly _pool; private readonly _extentDimensions; private _segments; readonly type: string; readonly isTileMesh: boolean; private _minmax; readonly extent: Extent; readonly textureSize: Vector2; private readonly _volume; private _materialSide; readonly level: number; readonly x: number; readonly y: number; readonly z: number; private _heightMap; disposed: boolean; private _enableTerrainDeformation; private readonly _enableCPUTerrain; private readonly _instance; private readonly _onElevationChanged; private _shouldUpdateHeightMap; isLeaf: boolean; private _elevationLayerInfo; private _helperMesh; getMemoryUsage(context: GetMemoryUsageContext): void; get boundingBox(): Box3; getWorldSpaceBoundingBox(target: Box3): Box3; /** * Creates an instance of TileMesh. * * @param options - Constructor options. */ constructor({ geometryPool, material, extent, segments, coord: { level, x, y }, textureSize, instance, enableCPUTerrain, enableTerrainDeformation, onElevationChanged, }: { /** The geometry pool to use. */ geometryPool: GeometryPool; /** The tile material. */ material: LayeredMaterial; /** The tile extent. */ extent: Extent; /** The subdivisions. */ segments: number; /** The tile coordinate. */ coord: { level: number; x: number; y: number; }; /** The texture size. */ textureSize: Vector2; instance: Instance; enableCPUTerrain: boolean; enableTerrainDeformation: boolean; onElevationChanged: (tile: TileMesh) => void; }); get showHelpers(): boolean; set showHelpers(visible: boolean); get segments(): number; set segments(v: number); private createGeometry; onLayerVisibilityChanged(layer: Layer): void; addChildTile(tile: TileMesh): void; reorderLayers(): void; /** * Checks that the given raycaster intersects with this tile's volume. */ private checkRayVolumeIntersection; raycast(raycaster: Raycaster, intersects: Intersection[]): void; private saveMaterialProperties; private restoreMaterialProperties; get customDepthMaterial(): LayeredMaterial; get customDistanceMaterial(): LayeredMaterial; onAfterShadow(): void; private updateHeightMapIfNecessary; /** * @param neighbour - The neighbour. * @param location - Its location in the neighbour array. */ private processNeighbour; /** * @param neighbours - The neighbours. */ processNeighbours(neighbours: NeighbourList<TileMesh>): void; update(materialOptions: MaterialOptions): void; isVisible(): boolean; setDisplayed(show: boolean): void; /** * @param v - The new opacity. */ set opacity(v: number); setVisibility(show: boolean): void; isDisplayed(): boolean; /** * Updates the rendering state of the tile's material. * * @param state - The new rendering state. */ changeState(state: RenderingState): void; static applyChangeState(o: Object3D, s: RenderingState): void; pushRenderState(state: RenderingState): () => void; canProcessColorLayer(): boolean; private static canSubdivideTile; canSubdivide(): boolean; removeElevationTexture(): void; setElevationTexture(layer: ElevationLayer, elevation: { texture: Texture; pitch: OffsetScale; min?: number; max?: number; renderTarget: WebGLRenderTarget; }, isFinal?: boolean): void; private createHeightMap; private inheritHeightMap; private resetHeights; private applyHeightMap; setBBoxZ(min: number | undefined, max: number | undefined): void; traverseTiles(callback: (descendant: TileMesh) => void): void; /** * Removes the child tiles and returns the detached tiles. */ detachChildren(): TileMesh[]; private updateVolume; get minmax(): { min: number; max: number; }; getExtent(): Extent; getElevation(params: GetElevationOptions): { elevation: number; resolution: number; } | null; /** * Gets whether this mesh is currently performing processing. * * @returns `true` if the mesh is currently performing processing, `false` otherwise. */ get loading(): boolean; /** * Gets the progress percentage (normalized in [0, 1] range) of the processing. * * @returns The progress percentage. */ get progress(): number; /** * Search for a common ancestor between this tile and another one. It goes * through parents on each side until one is found. * * @param tile - the tile to evaluate * @returns the resulting common ancestor */ findCommonAncestor(tile: TileMesh): TileMesh | null; isAncestorOf(node: TileMesh): boolean; dispose(): void; } export declare function isTileMesh(o: unknown): o is TileMesh; export default TileMesh; //# sourceMappingURL=TileMesh.d.ts.map