@speckle/viewer
Version:
A 3d viewer for Speckle, based on threejs.
112 lines (111 loc) • 5.18 kB
TypeScript
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 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<void>;
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;
}