UNPKG

@giro3d/giro3d

Version:

A JS/WebGL framework for 3D geospatial data visualization

335 lines 12.3 kB
import type { Box3 } from 'three'; import { Vector2 } from 'three'; import type Context from '../core/Context'; import type ColorLayer from '../core/layer/ColorLayer'; import type HasLayers from '../core/layer/HasLayers'; import type Layer from '../core/layer/Layer'; import type { GetMemoryUsageContext } from '../core/MemoryUsage'; import type PickOptions from '../core/picking/PickOptions'; import type PickResult from '../core/picking/PickResult'; import type { IntersectingVolume } from '../renderer/IntersectingVolume'; import type { Classification } from '../renderer/PointCloudMaterial'; import type { EntityPreprocessOptions, EntityUserData } from './Entity'; import type { Entity3DEventMap, Entity3DOptions } from './Entity3D'; import ColorMap from '../core/ColorMap'; import { type PointCloudAttribute, type PointCloudSource } from '../sources/PointCloudSource'; import Entity3D from './Entity3D'; export declare class UnsupportedAttributeError extends Error { constructor(attribute: string); } export interface ActiveAttribute { readonly attribute: PointCloudAttribute; weight: number; /** @internal */ readonly geometrySlot: 0 | 1 | 2; } export interface ActiveAttributeDefinition { name: string; weight: number; } /** * Constructor options for the {@link PointCloud} entity. */ export interface PointCloudOptions extends Entity3DOptions { /** * The point cloud source. */ source: PointCloudSource; /** * The delay, in milliseconds, before unused data is freed from memory. * The longer the delay, the longer a node's data will be kept in memory, making it possible * to display this node immediately when it becomes visible. * * Conversely, reducing this value will free memory more often, leading to a reduced memory * footprint. * * @defaultValue 5000 */ cleanupDelay?: number; } /** * Displays point clouds coming from a {@link PointCloudSource}. * * This entity supports two coloring modes: `'attribute'` and `'layer'`. In coloring mode `'attribute'`, * points are colorized from the selected attributes (e.g color, intensity, classification...). * * ```ts * pointCloud.setColoringMode('attribute'); * pointCloud.setActiveAttribute('Intensity'); * ``` * * In coloring mode `'layer'`, points are colorized using a {@link ColorLayer} that must be set with * {@link setColorLayer}. * * Note: the layer does not have to be in the same coordinate system as the point cloud. * * ```ts * const colorLayer = new ColorLayer(...); * pointCloud.setColorLayer(colorLayer); * pointCloud.setColoringMode('layer'); * ``` */ declare class PointCloud<TUserData extends EntityUserData = EntityUserData> extends Entity3D<Entity3DEventMap, TUserData> implements HasLayers { /** Readonly flag to indicate that this object is a PointCloud instance. */ readonly isPointCloud: true; readonly type: "PointCloud"; readonly hasLayers: true; private readonly _stateMachine; private readonly _listeners; private readonly _tileVolumeRoot; private readonly _pointsRoot; private readonly _cleanupPollingInterval; private readonly _classificationsPerAttribute; private readonly _colorMapPerAttribute; /** The source of this entity. */ readonly source: PointCloudSource; readonly intersectingVolumes: IntersectingVolume[]; private _colorLayer; private _depthTest; private _subdivisionThreshold; private _shaderMode; private _activeAttributes; private _pointSize; private _cleanupDelay; private _showVolume; private _decimation; private _showPoints; private _showNodeDataVolumes; private _disposed; private _pointBudget; private _elevationColorMap; private _colorimetry; private _rootNode; private _metadata; private _volumeHelper; constructor(options: PointCloudOptions); private getNodeLoadingPriority; /** * Enables or disables depth testing for point cloud meshes. * * @defaultValue true */ get depthTest(): boolean; set depthTest(v: boolean); get progress(): number; get loading(): boolean; get layerCount(): number; private updateMaterials; /** * Gets or sets the brightness of this point cloud. */ get brightness(): number; set brightness(v: number); /** * Gets or sets the contrast of this point cloud. */ get contrast(): number; set contrast(v: number); /** * Gets or sets the saturation of this point cloud. */ get saturation(): number; set saturation(v: number); /** * The colormap used to colorize cloud by elevation. */ get elevationColorMap(): ColorMap; set elevationColorMap(c: ColorMap | null); /** * Gets the colormap used for coloring an attribute. * @param attributeName - The name of the attribute */ getAttributeColorMap(attributeName: string): ColorMap; /** * Sets the colormap used for coloring an attribute. * @param attributeName - The name of the attribute * @param colorMap - The colormap to use */ setAttributeColorMap(attributeName: string, colorMap: ColorMap | null): void; private updateUniforms; /** * The global factor that drives LOD computation. The lower this value, the * sooner a node is subdivided. Note: changing this scale to a value less than 1 can drastically * increase the number of nodes displayed in the scene, and can even lead to browser crashes. * * @defaultValue 1 */ get subdivisionThreshold(): number; set subdivisionThreshold(v: number); /** * Returns the list of supported attributes in the source. */ getSupportedAttributes(): PointCloudAttribute[]; /** * The point size, in pixels. * * Note: a value of zero triggers automatic size computation. * * @defaultValue 0 */ get pointSize(): number; set pointSize(size: number); /** * Gets the active attributes. * * Note: to set the active attributes, use {@link setActiveAttribute} or {@link setActiveAttributes}. */ getActiveAttributes(): ReadonlyArray<Readonly<ActiveAttribute>>; /** * Sets the coloring mode of the entity: * - `layer`: the point cloud is colorized from a color layer previously set with {@link setColorLayer}. * - `attribute`: the point cloud is colorized from the source attributes (e.g color, classification...) * previously set with {@link setActiveAttribute}. */ setColoringMode(mode: 'layer' | 'attribute'): void; private updateColoringFromAttribute; /** * Sets the active attribute. * * Note: to enable coloring from the attribute, use {@link setColoringMode} with mode `'attribute'`. * * Note: To get the supported attributes, use {@link getSupportedAttributes}. * * @param attributeName - The active attribute. * * @throws {@link UnsupportedAttributeError} If the attribute is not supported by the source. */ setActiveAttribute(attributeName: string): void; /** * Sets the active attributes. * * Note: to enable coloring from the attributes, use {@link setColoringMode} with mode `'attribute'`. * * Note: To get the supported attributes, use {@link getSupportedAttributes}. * * @param attributes - List of attributes to set activate, with their respective weights. There cannot be more than 3; * * @throws {@link UnsupportedAttributeError} If the attribute is not supported by the source. */ setActiveAttributes(attributes: ActiveAttributeDefinition[]): void; /** * Toggles the visibility of the point cloud volume. */ get showVolume(): boolean; set showVolume(show: boolean); /** * The amount of decimation to apply to currently displayed point meshes. A value of `1` means * that all points are displayed. A value of `N` means that we display only 1 every Nth point. * * Note: this has no effect on the quantity of data that point cloud sources must fetch, as it * is a purely graphical setting. This does, however, improve rendering performance by reducing * the number of points to draw on the screen. */ get decimation(): number; set decimation(v: number); /** * The delay, in milliseconds, to remove unused data for each node. * Must be a positive integer greater or equal to zero. * * Setting it to zero will cleanup immediately after a node becomes invisible. */ get cleanupDelay(): number; set cleanupDelay(delay: number); /** * Enables or disables the display of the point cloud. * @defaultValue true */ get showPoints(): boolean; set showPoints(v: boolean); /** * Toggles the visibility of invidividual node volumes. */ get showNodeVolumes(): boolean; set showNodeVolumes(show: boolean); /** * Toggles the visibility of individual node content volumes. * * Note: octree-based point clouds have cube-shaped node volumes, whereas * their node data volume is a tight bounding box around the actual points of the node. */ get showNodeDataVolumes(): boolean; set showNodeDataVolumes(show: boolean); /** * Gets the classification array. The array contains 256 entries that can be updated, * but the array itself may not be resized. * * @param attributeName - Name of the attribute * @defaultValue `ASPRS_CLASSIFICATIONS` */ getAttributeClassifications(attributeName: string): Readonly<Classification[]>; /** * Gets the total number of points in this point cloud, or `undefined` * if this value is not known. * * Note: the entity must be initialized to be able to access this property. */ get pointCount(): number | undefined; /** * Gets the number of points currently displayed. */ get displayedPointCount(): number; /** * Gets or sets the point budget. A non-null point budget will automatically compute the * {@link decimation} property every frame, based on the number of currently displayed points. * A value of `null` removes the point budget and stop automatic decimation computation. */ get pointBudget(): number | null; set pointBudget(v: number | null); getMemoryUsage(context: GetMemoryUsageContext): void; updateOpacity(): void; /** * Forces the point cloud to reload all data. */ clear(): void; getBoundingBox(): Box3 | null; protected preprocess(_opts: EntityPreprocessOptions): Promise<void>; private deleteNodeHierarchy; preUpdate(context: Context): unknown[] | null; private updateDecimation; postUpdate(context: Context): void; /** * Disposes this entity and deletes unmanaged graphical resources. */ dispose(): void; pick(canvasCoords: Vector2, options?: PickOptions): PickResult[]; /** * Sets the color layer to colorize the points. * * Note: to enable coloring from the color layer, use {@link setColoringMode} with mode `'layer'`. * * @param colorLayer - The color layer. */ setColorLayer(colorLayer: ColorLayer): void; removeColorLayer(): void; forEachLayer(callback: (layer: Layer) => void): void; getLayers(predicate?: (arg0: Layer) => boolean): Layer[]; private updateMinMaxDistance; private traversePointCloudMaterials; /** * Creates a volume helper for the entire entity. */ private createGlobalVolumeHelper; private getOrCreateAttributeClassifications; private cleanup; private testNodeSSE; private updateGeometry; private createGeometry; private createMaterial; private createMesh; private updateMaterial; private cleanupNodeIfNecessary; private disposeMesh; private traversePointCloudMeshes; /** * Loads data from the source for the given node. */ private loadNodeData; private showNode; private getNodeInfo; private removeDataVolumeHelper; private removeVolumeHelper; private forEachNodeInfo; private updateHelpers; } export default PointCloud; //# sourceMappingURL=PointCloud.d.ts.map