import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * Clipping arbitrary (degenerate, non-convex, self-intersecting, etc.) polygons based on binary criteria (e.g.
 * left/right, inside/outside).
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Vector2 from '../../../dot/js/Vector2.js';
import { EdgedClippedFace, LinearEdge } from '../imports.js';
export type BinaryClipCallback = (isMinFace: boolean, startX: number, startY: number, endX: number, endY: number, startPoint: Vector2 | null, endPoint: Vector2 | null) => void;
export type PolygonCompleteCallback = () => void;
export type BinaryPolygonCompleteCallback = (isMinFace: boolean) => void;
export default class BinaryClipping {
    private static binaryInitialPush;
    private static binaryPushClipEdges;
    static binaryXClipEdge(startPoint: Vector2, endPoint: Vector2, x: number, fakeCornerY: number, minLinearEdges: LinearEdge[], // Will append into this (for performance)
    maxLinearEdges: LinearEdge[]): void;
    static binaryYClipEdge(startPoint: Vector2, endPoint: Vector2, y: number, fakeCornerX: number, minLinearEdges: LinearEdge[], // Will append into this (for performance)
    maxLinearEdges: LinearEdge[]): void;
    static binaryLineClipEdge(startPoint: Vector2, endPoint: Vector2, normal: Vector2, // NOTE: does NOT need to be a unit vector
    value: number, fakeCornerPerpendicular: number, minLinearEdges: LinearEdge[], // Will append into this (for performance)
    maxLinearEdges: LinearEdge[]): void;
    static binaryXClipPolygon(polygon: Vector2[], x: number, minPolygon: Vector2[], // Will append into this (for performance)
    maxPolygon: Vector2[]): void;
    static binaryYClipPolygon(polygon: Vector2[], y: number, minPolygon: Vector2[], // Will append into this (for performance)
    maxPolygon: Vector2[]): void;
    static binaryLineClipPolygon(polygon: Vector2[], normal: Vector2, // NOTE: does NOT need to be a unit vector
    value: number, minPolygon: Vector2[], // Will append into this (for performance)
    maxPolygon: Vector2[]): void;
    static binaryXClipEdgedClipped(face: EdgedClippedFace, x: number): {
        minFace: EdgedClippedFace;
        maxFace: EdgedClippedFace;
    };
    static binaryYClipEdgedClipped(face: EdgedClippedFace, y: number): {
        minFace: EdgedClippedFace;
        maxFace: EdgedClippedFace;
    };
}
//# sourceMappingURL=BinaryClipping.d.ts.map