///
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;