import { Color } from 'three';
import type { OpenCascadeInstance, TopoDS_Shape, TopoDS_Vertex, TopoDS_Edge, TopoDS_Wire, TopoDS_Face, TopoDS_Shell, TopoDS_Solid, TopoDS_CompSolid, TopoDS_Compound, Geom2d_Curve, Geom_Curve, BRepMesh_IncrementalMesh, gp_Pln, gp_Pnt2d, gp_Pnt, gp_Quaternion, gp_Vec2d, gp_Vec, Bnd_Box, gp_Trsf, gp_Ax1, gp_Ax2, gp_Dir, gp_XYZ, TopAbs_ShapeEnum, TopExp, TopTools_IndexedMapOfShape, TopLoc_Location, Message_ProgressRange, TopTools_ListOfShape, GProp_GProps } from './build/polygonjs-occt';
export type { OpenCascadeInstance, BRepMesh_IncrementalMesh, TopoDS_Shape, TopoDS_Vertex, TopoDS_Face, TopoDS_Shell, TopoDS_Solid, TopoDS_CompSolid, TopoDS_Compound, TopoDS_Edge, TopoDS_Wire, Geom2d_Curve, Geom_Curve, Bnd_Box, gp_Pln, gp_Pnt2d, gp_Pnt, gp_Quaternion, gp_Vec2d, gp_Vec, gp_Trsf, gp_Ax1, gp_Ax2, gp_Dir, gp_XYZ, TopAbs_ShapeEnum, TopExp, TopTools_IndexedMapOfShape, TopLoc_Location, Message_ProgressRange, TopTools_ListOfShape, GProp_GProps, };
export type CadGeometry = gp_Pnt2d | Geom2d_Curve | TopoDS_Vertex | TopoDS_Edge | TopoDS_Wire | TopoDS_Shape;
export declare enum CadGeometryType {
    POINT_2D = "CADPoint2D",
    CURVE_2D = "CADCurve2D",
    VERTEX = "CADVertex",
    EDGE = "CADEdge",
    WIRE = "CADWire",
    FACE = "CADFace",
    SHELL = "CADShell",
    SOLID = "CADSolid",
    COMPSOLID = "CADCompsolid",
    COMPOUND = "CADCompound"
}
export declare const CAD_GEOMETRY_TYPES_SET: Set<CadGeometryType>;
export type CadGeometryTypeShape = CadGeometryType.VERTEX | CadGeometryType.EDGE | CadGeometryType.WIRE | CadGeometryType.FACE | CadGeometryType.SHELL | CadGeometryType.SOLID | CadGeometryType.COMPSOLID | CadGeometryType.COMPOUND;
export declare const CAD_GEOMETRY_TYPES_SHAPE: CadGeometryTypeShape[];
export declare const CAD_GEOMETRY_TYPES_SET_SHAPE: Set<CadGeometryType>;
export type CadShape = TopoDS_Vertex | TopoDS_Edge | TopoDS_Wire | TopoDS_Face | TopoDS_Shell | TopoDS_Solid | TopoDS_CompSolid | TopoDS_Compound;
export declare function cadGeometryTypeFromShape(oc: OpenCascadeInstance, shape: TopoDS_Shape): CadGeometryType | undefined;
export declare function cadDowncast(oc: OpenCascadeInstance, shape: TopoDS_Shape): CadShape;
export interface CadTypeMap {
    [CadGeometryType.POINT_2D]: gp_Pnt2d;
    [CadGeometryType.CURVE_2D]: Geom2d_Curve;
    [CadGeometryType.VERTEX]: TopoDS_Vertex;
    [CadGeometryType.EDGE]: TopoDS_Edge;
    [CadGeometryType.WIRE]: TopoDS_Wire;
    [CadGeometryType.FACE]: TopoDS_Face;
    [CadGeometryType.SHELL]: TopoDS_Shell;
    [CadGeometryType.SOLID]: TopoDS_Solid;
    [CadGeometryType.COMPSOLID]: TopoDS_CompSolid;
    [CadGeometryType.COMPOUND]: TopoDS_Compound;
}
export interface CachedCADTesselationParams {
    linearTolerance: number;
    angularTolerance: number;
    curveAbscissa: number;
    curveTolerance: number;
}
export interface CachedCADOBJTesselationParams {
    CADLinearTolerance: number;
    CADAngularTolerance: number;
    CADCurveAbscissa: number;
    CADCurveTolerance: number;
}
export interface CADTesselationParams extends CachedCADTesselationParams {
    wireframe: boolean;
    displayMeshes: boolean;
    displayEdges: boolean;
    meshesColor: Color;
    edgesColor: Color;
}
export interface CADOBJTesselationParams extends CachedCADOBJTesselationParams {
    CADWireframe: boolean;
    CADDisplayMeshes: boolean;
    CADDisplayEdges: boolean;
    CADMeshesColor: Color;
    CADEdgesColor: Color;
}
export interface FaceData {
    positions: number[];
    normals: number[];
    indices: number[];
}
export interface EdgeData {
    positions: number[];
}
export interface CadObjectData {
    type: CadGeometryType;
}
export interface CadNumberHandle {
    current: number;
}
export declare const _createCadNumberHandle: () => CadNumberHandle;
export interface CadVector3Handle {
    x: CadNumberHandle;
    y: CadNumberHandle;
    z: CadNumberHandle;
}
export declare const _createCadVector3Handle: () => CadVector3Handle;
export interface CadBox3Handle {
    min: CadVector3Handle;
    max: CadVector3Handle;
}
export declare const _createCadBox3Handle: () => CadBox3Handle;
interface Deletable {
    delete: () => void;
}
export type GCRegisterFunction = <D extends Deletable>(deletable: D) => D;
type GCCallback<T> = (r: GCRegisterFunction) => T;
export declare class CadGC {
    static withGC<T>(callback: GCCallback<T>): T;
}
