import { Color, Material, Texture } from 'three'; import { GeometryType } from '../batching/Batch.js'; import { type TreeNode } from '../tree/WorldTree.js'; import { NodeRenderView } from '../tree/NodeRenderView.js'; import { SpeckleMaterial } from './SpeckleMaterial.js'; import { type MaterialOptions } from '../../IViewer.js'; export interface RenderMaterial extends MinimalMaterial { id: string; emissive: number; opacity: number; roughness: number; metalness: number; vertexColors: boolean; } export interface DisplayStyle extends MinimalMaterial { id: string; lineWeight: number; opacity?: number; } export interface MinimalMaterial { color: number; } export declare enum FilterMaterialType { GHOST = 0, GRADIENT = 1, COLORED = 2, HIDDEN = 3 } /** TO DO: This still sucks */ export interface FilterMaterial { filterType: FilterMaterialType; rampIndex?: number; rampIndexColor?: Color; rampTexture?: Texture; } export interface FilterMaterialOptions { rampIndex?: number; rampIndexColor?: Color; rampTexture?: Texture; rampWidth?: number; } export default class Materials { static readonly UNIFORM_VECTORS_USED = 33; static readonly DEFAULT_ARTIFICIAL_ROUGHNESS = 0.6; /** The inverse of "shininess" */ private readonly materialMap; private meshGhostMaterial; private meshGradientMaterial; private meshTransparentGradientMaterial; private meshColoredMaterial; private meshTransparentColoredMaterial; private meshHiddenMaterial; private lineGhostMaterial; private lineColoredMaterial; private lineHiddenMaterial; private pointGhostMaterial; private pointCloudColouredMaterial; private pointCloudGradientMaterial; private textGhostMaterial; private textColoredMaterial; private textGradientMaterial; private textHiddenMaterial; private defaultGradientTextureData; private static readonly NullRenderMaterialHash; private static readonly NullRenderMaterialVertexColorsHash; private static readonly NullDisplayStyleHash; private static readonly NullTextDisplayStyle; private static readonly NullPointMaterialHash; private static readonly NullPointCloudMaterialHash; private static readonly NullPointCloudVertexColorsMaterialHash; private static readonly NullRenderMaterialInstancedHash; private static readonly NullRenderMaterialInstancedVertexColorHash; static renderMaterialFromNode(materialNode: TreeNode | null, geometryNode: TreeNode | null): RenderMaterial | null; static displayStyleFromNode(node: TreeNode | null): DisplayStyle | null; static colorMaterialFromNode(node: TreeNode | null): MinimalMaterial | null; static fastCopy(from: Material, to: Material): void; private static renderMaterialToString; private static displayStyleToString; private static minimalMaterialToString; private static hashCode; static isMaterialInstance(material: Material | FilterMaterial | RenderMaterial | DisplayStyle): material is Material; static isFilterMaterial(material: Material | FilterMaterial | RenderMaterial | DisplayStyle): material is FilterMaterial; static isRenderMaterial(materialData: Material | FilterMaterial | RenderMaterial | DisplayStyle | MaterialOptions): materialData is RenderMaterial; static isDisplayStyle(materialData: Material | FilterMaterial | RenderMaterial | DisplayStyle | MaterialOptions): materialData is DisplayStyle; static getMaterialHash(renderView: NodeRenderView, materialData?: RenderMaterial | DisplayStyle | MaterialOptions | null): number; static isTransparent(material: Material): boolean; static isOpaque(material: Material): boolean; static isSpeckleMaterial(material: Material): material is SpeckleMaterial & Material; private createDefaultMeshMaterials; private createLineDefaultMaterials; private createDefaultPointMaterials; private createDefaultTextMaterials; private createDefaultNullMaterials; createDefaultMaterials(): Promise; private makeMeshMaterial; private makeLineMaterial; private makePointMaterial; private makeTextMaterial; getMaterial(hash: number, material: RenderMaterial | DisplayStyle | MinimalMaterial | null, type: GeometryType): Material; private getMeshMaterial; private getLineMaterial; private getPointMaterial; private getPointCloudMaterial; private getTextMaterial; getGhostMaterial(renderView: NodeRenderView, filterMaterial?: FilterMaterial): Material | null; getGradientMaterial(renderView: NodeRenderView, filterMaterial?: FilterMaterial): Material | null; getColoredMaterial(renderView: NodeRenderView, filterMaterial?: FilterMaterial): Material | null; getHiddenMaterial(renderView: NodeRenderView, filterMaterial?: FilterMaterial): Material | null; getFilterMaterial(renderView: NodeRenderView, filterMaterial: FilterMaterial): Material | null; getDataMaterial(renderView: NodeRenderView, materialData: RenderMaterial & DisplayStyle & MaterialOptions): Material; getFilterMaterialOptions(filterMaterial: FilterMaterial): FilterMaterialOptions | null; purge(): void; }