/** @packageDocumentation
 * @module Polyface
 */
import { BarycentricTriangle } from "../geometry3d/BarycentricTriangle";
import { IndexedXYZCollection } from "../geometry3d/IndexedXYZCollection";
/**
 * `TriangleCandidate` is a `BarycentricTriangle` with additional application-specific label data:
 * * `quality` = numeric indicator of quality (e.g. aspect ratio of this triangle or a combination with other triangles)
 * * `isValid` = boolean flag.
 * * `id` = application specific identifier
 * @internal
 */
export declare class TriangleCandidate extends BarycentricTriangle {
    private _quality;
    private _isValid;
    id: number;
    private constructor();
    /**
     * Copy all coordinate and label data from `other` to this.
     * @param other source triangle
     */
    setFrom(other: TriangleCandidate): TriangleCandidate;
    /** Create (always) a TriangleCandidate.
     * * Access points from multiple `IndexedXYZCollection`
     * * mark invalid if any indices are invalid.
     */
    static createFromIndexedXYZ(source0: IndexedXYZCollection, index0: number, source1: IndexedXYZCollection, index1: number, source2: IndexedXYZCollection, index2: number, id: number, result?: TriangleCandidate): TriangleCandidate;
    /** (property) return the validity flag. */
    get isValid(): boolean;
    /**
     * * Mark this triangle invalid.
     * * optionally set aspect ratio.
     * * points are not changed
     * @param aspectRatio
     */
    markInvalid(quality?: number): void;
    /**
     * * Recompute the aspect ratio.
     * * Mark invalid if aspect ratio is 0 or negative.
     */
    updateAspectRatio(): void;
    /**
     * Clone all coordinate and label data.
     * @param result optional preallocated `TriangleCandidate`
     */
    clone(result?: TriangleCandidate): TriangleCandidate;
    /**
     * Return a `TriangleCandidate` with
     *  * coordinate data and labels from `candidateA`
     *  * LOWER quality of the two candidates.
     *  * quality reduced by 1 if triangles have opposing normals (negative dot product of the two normals)
     * @param candidateA candidate known to be valid
     * @param candidateB candidate that may by valid
     * @param result copy of candidate A, but if candidateB is valid the result aspect ratio is reduced (a) to the minimum of the two ratios and then (b) reduced by 1 if orientations clash.
     */
    static copyWithLowerQuality(candidateA: TriangleCandidate, candidateB: TriangleCandidate, result?: TriangleCandidate): TriangleCandidate;
    /**
     * choose better aspect ratio of triangle, other.
     * @param triangle known valid triangle, to be updated
     * @param other candidate replacement
     */
    static updateIfOtherHasHigherQuality(triangle: TriangleCandidate, other: TriangleCandidate): void;
}
//# sourceMappingURL=TriangleCandidate.d.ts.map