/** @packageDocumentation
 * @module Rendering
 */
import { IndexedPolyface, Point3d, Polyface, PolyfaceVisitor, Range3d } from "@itwin/core-geometry";
import { Feature, TextureMapping } from "@itwin/core-common";
import { DisplayParams } from "./DisplayParams";
import { Triangle, TriangleSet } from "./Primitives";
import { StrokesPrimitivePointLists } from "./Strokes";
import { VertexKeyProps, VertexMap } from "./VertexKey";
import { Mesh } from "./MeshPrimitives";
type VertexKeyPropsWithIndex = VertexKeyProps & {
    sourceIndex: number;
};
/** @internal */
export declare class MeshBuilder {
    readonly vertexMap: VertexMap;
    private _triangleSet?;
    private _currentPolyface?;
    readonly mesh: Mesh;
    readonly tolerance: number;
    readonly areaTolerance: number;
    readonly tileRange: Range3d;
    get currentPolyface(): MeshBuilderPolyface | undefined;
    get displayParams(): DisplayParams;
    set displayParams(params: DisplayParams);
    /** create reference for triangleSet on demand */
    get triangleSet(): TriangleSet;
    private constructor();
    /** create a new MeshBuilder */
    static create(props: MeshBuilder.Props): MeshBuilder;
    /**
     * iterate through each point list of the strokes primitive and either load the point string or polyline into builder
     * @param strokes lists of stroke primitive point lists to iterate
     * @param isDisjoint if true add point string, else add polyline
     * @param fillColor
     */
    addStrokePointLists(strokes: StrokesPrimitivePointLists, isDisjoint: boolean, fillColor: number, feature: Feature | undefined): void;
    /**
     * add data from polyface into mesh builder
     * @param polyface the indexed polyface to iterate the facets of to load each facet's triangles' vertices
     * @param props the properties required for this operation
     */
    addFromPolyface(polyface: IndexedPolyface, props: MeshBuilder.PolyfaceOptions, feature: Feature | undefined): void;
    /**
     * @param visitor the PolyfaceVisitor containing the face data to be added
     * @param props the properties required for this operation:
     */
    addFromPolyfaceVisitor(visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceOptions, feature: Feature | undefined): void;
    createTriangleVertices(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions, feature: Feature | undefined): VertexKeyPropsWithIndex[] | undefined;
    createTriangle(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions, feature: Feature | undefined): Triangle | undefined;
    /** removed Feature for now */
    addPolyline(points: Point3d[], fillColor: number, feature: Feature | undefined): void;
    /** removed Feature for now */
    addPointString(points: Point3d[], fillColor: number, feature: Feature | undefined): void;
    beginPolyface(polyface: Polyface, options: MeshEdgeCreationOptions): void;
    endPolyface(): void;
    addVertex(vertex: VertexKeyProps, addToMeshOnInsert?: boolean): number;
    addTriangle(triangle: Triangle): void;
}
/** @internal */
export declare namespace MeshBuilder {
    interface Props extends Mesh.Props {
        tolerance: number;
        areaTolerance: number;
    }
    interface PolyfaceOptions {
        includeParams: boolean;
        fillColor: number;
        mappedTexture?: TextureMapping;
        edgeOptions: MeshEdgeCreationOptions;
    }
    interface PolyfaceVisitorOptions extends PolyfaceOptions {
        triangleCount: number;
        haveParam: boolean;
    }
}
/** @internal */
export declare class MeshEdgeCreationOptions {
    readonly type: MeshEdgeCreationOptions.Type;
    readonly minCreaseAngle: number;
    get generateAllEdges(): boolean;
    get generateNoEdges(): boolean;
    get generateCreaseEdges(): boolean;
    /** Create edge chains for polyfaces that do not already have them. */
    get createEdgeChains(): boolean;
    constructor(type?: MeshEdgeCreationOptions.Type);
}
/** @internal */
export declare namespace MeshEdgeCreationOptions {
    enum Type {
        NoEdges = 0,
        CreaseEdges = 2,
        SmoothEdges = 4,
        CreateChains = 8,
        DefaultEdges = 2,
        AllEdges = 6
    }
}
/** @internal */
export declare class MeshBuilderPolyface {
    readonly polyface: Polyface;
    readonly edgeOptions: MeshEdgeCreationOptions;
    readonly vertexIndexMap: Map<number, number>;
    readonly baseTriangleIndex: number;
    constructor(polyface: Polyface, edgeOptions: MeshEdgeCreationOptions, baseTriangleIndex: number);
}
export {};
//# sourceMappingURL=MeshBuilder.d.ts.map