/// import { Matrix } from "spline-data"; type Vector3Tuple = [number, number, number]; export type TransformFunc = ( addr: number, id: number, pivot: Vector3Tuple, mat: Matrix ) => void; export type GetVectorFunc = (addr: number, id: number) => [number, number, number]; type SetFloat32Array = ( addr: number, id: number, value: Float32Array | Float32Array[] | number[] ) => void; export type SingleOpFunc = (addr: number, id: number) => void; export type MultiOpFunc = (addr: number, id: number, count: number) => void; export type CountFunc = (addr: number) => number; export type cppVector = { get: (i: number) => T; size: () => number; } export type EdgeSlideRails = { ids: cppVector<{ idx: number }>; positionsOriginal: cppVector; positionsPos: cppVector; positionsNeg: cppVector; } export interface ProcessModule extends EmscriptenModule { alloc_subdivision_surface: ( vertex_data: number, num_vertices: number, index_data: number, num_indices: number, vertices_per_face_data: number, num_vertices_per_face: number, ) => number; alloc_subdivision_surface2: ( vertex_data: number, num_vertices: number, index_data: number, num_indices: number, vertices_per_face_data: number, num_vertices_per_face: number, shearScale: Matrix ) => number; free_subdivision_surface(addr: number): void; copy_subdivision_surface(addr: number): number; should_refine(addr: number, refinement_active: boolean): void; get_mesh_data: ( addr: number, level: number, phong_angle: number, ) => number; get_mesh_data2: ( addr: number, level: number, phong_angle: number, matrix: Matrix ) => number; free_mesh_data: (addr: number) => void; get_topological_data: (addr: number, level: number) => number; get_topological_data2: (addr: number, level: number, shearScaleInv: Matrix) => number; free_topological_data: (addr: number) => void; find_closest_vertex_on_face( addr: number, face_id: number, x: number, y: number, z: number ): { position: Vector3Tuple; vertex: { idx: number } }; find_closest_edge_on_face( addr: number, face_id: number, x: number, y: number, z: number ): { position: [Vector3Tuple, Vector3Tuple]; edge: { idx: number } }; find_closest_edge_on_face2( addr: number, face_id: number, x: number, y: number, z: number ): { position: [Vector3Tuple, Vector3Tuple]; edge: { idx: number } }; find_shared_edge( addr: number, vertex_id_1: number, vertex_id_2: number ): { position: [Vector3Tuple, Vector3Tuple]; edge: { idx: number } }; set_destination_refinement_level(addr: number, level: number): void; get_wireframe_data_for_base_level(addr: number): number; free_wireframe_data_for_base_level(addr: number): void; transform_vertex: TransformFunc; transform_edge: TransformFunc; transform_face: TransformFunc; move_face( addr: number, face_id: number, tx: number, ty: number, tz: number ): void; get_vertex_position: GetVectorFunc; get_face_vertex_positions(addr:number, id:Number): Vector3Tuple[]; get_edge_vertex_positions(addr:number, id:Number): Vector3Tuple[]; get_edge_midpoint: GetVectorFunc; get_face_center: GetVectorFunc; get_vertex_normal: GetVectorFunc; get_edge_normal: GetVectorFunc; get_face_normal: GetVectorFunc; set_vertex_position: SetFloat32Array; set_face_vertex_positions: SetFloat32Array; set_edge_vertex_positions: SetFloat32Array; cache_vertex: SingleOpFunc; cache_face: SingleOpFunc; cache_edge: SingleOpFunc; extrude_faces( addr: number, indices: number, count: number, ExtrusionMode: number ): cppVector<{ idx: number; position: Vector3Tuple }> inset_faces( addr: number, indices: number, count: number, ExtrusionMode: number, distance: number ): cppVector<{ idx: number; position: Vector3Tuple }> inset_apply_offset(addr: number, distance: number): void; inset_finished(addr: number): void; inset_face(addr: number, id: number): cppVector<{ idx: number }>; get_loop_cut_preview_vertices(addr: number, id: number): { positions: cppVector<[number, number, number]>; isCompletedLoop: boolean }; loop_cut(addr: number, id: number): cppVector<{ idx: number }>; get_loop(addr: number, id: number): cppVector<{ idx: number }>; get_vertex_extrude_displacements(addr: number, indices: number, count: number): cppVector<{ vertex: { idx: number }; position: Vector3Tuple }>; remove_vertices: MultiOpFunc; remove_faces: MultiOpFunc; remove_edges: MultiOpFunc; dissolve_edge: SingleOpFunc; dissolve_vertex: SingleOpFunc; dissolve_edge_loop: (addr: number, arrayPtr: number, count: number) => void; fill_hole: (addr: number, id: number, mode: number) => void; is_boundary: (addr: number, id: number) => boolean; vertex_count: CountFunc; face_count: CountFunc; edge_count: CountFunc; get_average_neighbor_position: GetVectorFunc; get_cached_vertex_position: GetVectorFunc; get_vertices_within_sphere( addr: number, center: Float32Array | Float32Array[] | number[], radius: number ): cppVector<{ vertex: { idx: number }; position: Vector3Tuple; normal: Vector3Tuple; weight: number; }>; get_ids_within_sphere( addr: number, mode: number, center: Vector3Tuple, radius: number ): cppVector; ExtrusionMode: { INDIVIDUAL: number; REGION: number; }; Level: { CONTROL: number; REFINED: number; }; SelectionMode: { FACES: number; EDGES: number; VERTICES: number; }; HoleFillingMode : { FLAT: number; CURVED: number; NGON: number; } get_edge_slide_rails(addr: number, indices: number, count: number): EdgeSlideRails; // BVH related function signatures / structs build_bvh(addr: number): number[]; free_bvh(addr: number); raycast_bvh(addr: number, origin: Float32Array | Float32Array[] | number[], direction: Float32Array | Float32Array[] | number[], zRange: number): { idx: number; position: Vector3Tuple; }; refit_bvh(addr: number): number[]; } declare const Module: EmscriptenModuleFactory; export default Module;