/**
 * @module vim-loader
 */
import * as THREE from 'three';
import { G3d } from 'vim-format';
import { Transparency, MergeArgs } from '../geometry';
import { ViewerMaterials } from '../materials/viewerMaterials';
import { Mesh } from '../mesh';
export type InstancingArgs = {
    matrix: THREE.Matrix4;
    legacyInstances: number[];
    legacyLoadRooms: boolean;
    transparency: Transparency.Mode;
};
/**
 * Builds meshes from the g3d and BufferGeometry
 * Allows to reuse the same material for all new built meshes
 */
export declare class MeshBuilder {
    readonly materials: ViewerMaterials;
    constructor(materials?: ViewerMaterials);
    /**
     * Creates Instanced Meshes from the g3d data
     * @param transparency Specify wheter color is RBG or RGBA and whether material is opaque or transparent
     * @param instances instance indices from the g3d for which meshes will be created.
     *  If undefined, all multireferenced meshes will be created.
     * @returns an array of THREE.InstancedMesh
     */
    createInstancedMeshes(g3d: G3d, args: InstancingArgs): Mesh[];
    /**
     * Creates a InstancedMesh from g3d data and given instance indices
     * @param geometry Geometry to use in the mesh
     * @param instances Instance indices for which matrices will be applied to the mesh
     * @param useAlpha Specify whether to use RGB or RGBA
     * @returns a THREE.InstancedMesh
     */
    createInstancedMesh(geometry: THREE.BufferGeometry, g3d: G3d, instances: number[], useAlpha: boolean): Mesh;
    /**
     * Create a merged mesh from g3d instance indices
     * @param transparency Specify wheter color is RBG or RGBA and whether material is opaque or transparent
     * @param instances g3d instance indices to be included in the merged mesh. All mergeable meshes if undefined.
     * @returns a VIM.Mesh or undefined if the mesh would be empty
     */
    createMergedMesh(g3d: G3d, args: MergeArgs): Mesh;
    /**
     * Create a wireframe mesh from g3d instance indices
     * @param instances g3d instance indices to be included in the merged mesh. All mergeable meshes if undefined.
     * @returns a THREE.Mesh
     */
    createWireframe(g3d: G3d, instances: number[]): THREE.LineSegments<THREE.WireframeGeometry<THREE.BufferGeometry>, THREE.LineBasicMaterial>;
}
