/**
 * @module vim-loader/materials
 */
import * as THREE from 'three';
import { StandardMaterial } from './standardMaterial';
import { OutlineMaterial } from './outlineMaterial';
import { ViewerSettings } from '../../viewer/settings/viewerSettings';
import { MergeMaterial } from './mergeMaterial';
import { SkyboxMaterial } from './skyboxMaterial';
export type ModelMaterial = THREE.Material | THREE.Material[] | undefined;
/**
 * Defines the materials to be used by the vim loader and allows for material injection.
 */
export declare class ViewerMaterials {
    static instance: ViewerMaterials;
    static createInstance(instance: ViewerMaterials): void;
    static getInstance(): ViewerMaterials;
    /**
     * Material used for opaque model geometry.
     */
    readonly opaque: StandardMaterial;
    /**
     * Material used for transparent model geometry.
     */
    readonly transparent: StandardMaterial;
    /**
     * Material used for maximum performance.
     */
    readonly simple: THREE.Material;
    /**
     * Material used when creating wireframe geometry of the model.
     */
    readonly wireframe: THREE.LineBasicMaterial;
    /**
     * Material used to show traces of hidden objects.
     */
    readonly ghost: THREE.Material;
    /**
     * Material used to filter out what is not selected for selection outline effect.
     */
    readonly mask: THREE.ShaderMaterial;
    /**
     * Material used for selection outline effect.
     */
    readonly outline: OutlineMaterial;
    /**
     * Material used for the skybox effect.
     */
    readonly skyBox: SkyboxMaterial;
    /**
     * Material used to merge outline effect with scene render.
     */
    readonly merge: MergeMaterial;
    private _clippingPlanes;
    private _sectionStrokeWitdh;
    private _sectionStrokeFallof;
    private _sectionStrokeColor;
    private _focusIntensity;
    private _focusColor;
    private _onUpdate;
    constructor(opaque?: StandardMaterial, transparent?: StandardMaterial, simple?: THREE.Material, wireframe?: THREE.LineBasicMaterial, ghost?: THREE.Material, mask?: THREE.ShaderMaterial, outline?: OutlineMaterial, merge?: MergeMaterial, skyBox?: SkyboxMaterial);
    /**
     * Updates material settings based on the provided configuration.
     * @param {ViewerSettings} settings - The settings to apply to the materials.
     */
    applySettings(settings: ViewerSettings): void;
    /**
     * A signal dispatched whenever a material is modified.
     */
    get onUpdate(): import("ste-signals").ISignal;
    /**
     * Determines the color of the model regular opaque and transparent materials.
     */
    get modelColor(): THREE.Color;
    set modelColor(color: THREE.Color);
    /**
     * Determines the opacity of the ghost material.
     */
    get ghostOpacity(): number;
    set ghostOpacity(opacity: number);
    /**
     * Determines the color of the ghost material.
     */
    get ghostColor(): THREE.Color;
    set ghostColor(color: THREE.Color);
    /**
     * Determines the color intensity of the highlight effect on mouse hover.
     */
    get focusIntensity(): number;
    set focusIntensity(value: number);
    /**
     * Determines the color of the highlight effect on mouse hover.
     */
    get focusColor(): THREE.Color;
    set focusColor(value: THREE.Color);
    /**
     * Determines the color of wireframe meshes.
     */
    get wireframeColor(): THREE.Color;
    set wireframeColor(value: THREE.Color);
    /**
     * Determines the opacity of wireframe meshes.
     */
    get wireframeOpacity(): number;
    set wireframeOpacity(value: number);
    /**
     * The clipping planes applied to all relevent materials
     */
    get clippingPlanes(): THREE.Plane[] | undefined;
    set clippingPlanes(value: THREE.Plane[] | undefined);
    /**
     * The width of the stroke effect where the section box intersects the model.
     */
    get sectionStrokeWitdh(): number;
    set sectionStrokeWitdh(value: number);
    /**
     * Gradient of the stroke effect where the section box intersects the model.
     */
    get sectionStrokeFallof(): number;
    set sectionStrokeFallof(value: number);
    /**
     * Color of the stroke effect where the section box intersects the model.
     */
    get sectionStrokeColor(): THREE.Color;
    set sectionStrokeColor(value: THREE.Color);
    /**
     * Color of the selection outline effect.
     */
    get outlineColor(): THREE.Color;
    set outlineColor(value: THREE.Color);
    get outlineAntialias(): boolean;
    set outlineAntialias(value: boolean);
    /**
     * Size of the blur convolution on the selection outline effect.
     */
    get outlineBlur(): number;
    set outlineBlur(value: number);
    /**
     * Gradient of the the selection outline effect.
     */
    get outlineFalloff(): number;
    set outlineFalloff(value: number);
    /**
     * Intensity of the the selection outline effect.
     */
    get outlineIntensity(): number;
    set outlineIntensity(value: number);
    get skyboxSkyColor(): THREE.Color;
    set skyboxSkyColor(value: THREE.Color);
    get skyboxGroundColor(): THREE.Color;
    set skyboxGroundColor(value: THREE.Color);
    get skyboxSharpness(): number;
    set skyboxSharpness(value: number);
    /** dispose all materials. */
    dispose(): void;
}
/**
 * Creates a new instance of the default wireframe material.
 * @returns {THREE.LineBasicMaterial} A new instance of LineBasicMaterial.
 */
export declare function createWireframe(): THREE.LineBasicMaterial;
