@salusoft89/planegcs
Version:
A wasm build and a simple wrapper of the FreeCAD PlaneGCS (2D geometric constraint solver)
160 lines (159 loc) • 15 kB
TypeScript
import { InternalAlignmentType, Constraint_Alignment } from "./enums";
export interface DoubleVector {
get: (i: number) => number;
size: () => number;
delete: () => void;
push_back: (val: number) => void;
}
export interface IntVector {
get: (i: number) => number;
size: () => number;
delete: () => void;
push_back: (val: number) => void;
}
export interface Point {
delete: () => void;
}
export interface Curve {
delete: () => void;
}
export type Line = Curve;
export type Circle = Curve;
export type Ellipse = Curve;
export type Hyperbola = Curve;
export type Parabola = Curve;
export type Arc = Circle;
export type ArcOfHyperbola = Hyperbola;
export type ArcOfEllipse = Ellipse;
export type ArcOfParabola = Parabola;
export type BSpline = Curve;
export type GcsGeometry = Point | Curve | Line | Circle | Ellipse | Hyperbola | Parabola | Arc | ArcOfHyperbola | ArcOfEllipse | ArcOfParabola | BSpline;
export interface GcsSystem {
params_size: () => number;
get_p_param: (i: number) => number;
set_p_param: (i: number, value: number, fixed: boolean) => void;
push_p_param: (value: number, fixed: boolean) => number;
get_is_fixed: (i: number) => boolean;
set_max_iterations: (n: number) => void;
get_max_iterations: () => number;
set_covergence_threshold: (threshold: number) => void;
get_convergence_threshold: () => number;
solve_system: (algorithm: number) => number;
get_p_params: () => DoubleVector;
clear_data: () => void;
apply_solution: () => void;
dof: () => number;
has_conflicting: () => boolean;
has_redundant: () => boolean;
has_partially_redundant: () => boolean;
get_conflicting: () => IntVector;
get_redundant: () => IntVector;
get_partially_redundant: () => IntVector;
clear_by_id: (id: number) => void;
set_debug_mode: (debug_mode: number) => void;
get_debug_mode: () => number;
make_point: (px_i: number, py_i: number) => Point;
make_line: (p1x_i: number, p1y_i: number, p2x_i: number, p2y_i: number) => Line;
make_circle: (cx_i: number, cy_i: number, rad_i: number) => Circle;
make_ellipse: (cx_i: number, cy_i: number, focus1x_i: number, focus1y_i: number, radmin_i: number) => Ellipse;
make_hyperbola: (cx_i: number, cy_i: number, focus1x_i: number, focus1y_i: number, radmin_i: number) => Hyperbola;
make_parabola: (vertexx_i: number, vertexy_i: number, focus1x_i: number, focus1y_i: number) => Parabola;
make_arc: (cx_i: number, cy_i: number, startx_i: number, starty_i: number, endx_i: number, endy_i: number, startangle_i: number, endangle_i: number, rad_i: number) => Arc;
make_arc_of_ellipse: (cx_i: number, cy_i: number, focus1x_i: number, focus1y_i: number, startx_i: number, starty_i: number, endx_i: number, endy_i: number, startangle_i: number, endangle_i: number, radmin_i: number) => ArcOfEllipse;
make_arc_of_parabola: (vertexx_i: number, vertexy_i: number, focusx_i: number, focusy_i: number, startx_i: number, starty_i: number, endx_i: number, endy_i: number, startangle_i: number, endangle_i: number) => ArcOfParabola;
make_arc_of_hyperbola: (cx_i: number, cy_i: number, focus1x_i: number, focus1y_i: number, startx_i: number, starty_i: number, endx_i: number, endy_i: number, startangle_i: number, endangle_i: number, radmin_i: number) => ArcOfHyperbola;
make_bspline: (startx_i: number, starty_i: number, endx_i: number, endy_i: number, poles_xy_i: IntVector, weights_i: IntVector, knots_i: IntVector, mult: IntVector, degree: number, periodic: boolean) => BSpline;
add_constraint_equal: (param1_param_i: number, param2_param_i: number, tagId: number, driving: boolean, internalalignment: Constraint_Alignment, scale: number) => void;
add_constraint_proportional: (param1_param_i: number, param2_param_i: number, ratio: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_difference: (param1_param_i: number, param2_param_i: number, difference_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_p2p_distance: (p1: Point, p2: Point, distance_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_p2p_angle_incr_angle: (p1: Point, p2: Point, angle_param_i: number, incrAngle: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_p2p_angle: (p1: Point, p2: Point, angle_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_p2l_distance: (p: Point, l: Line, distance_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_line_pl: (p: Point, l: Line, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_line_ppp: (p: Point, lp1: Point, lp2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_perp_bisector_pl: (p: Point, l: Line, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_perp_bisector_ppp: (p: Point, lp1: Point, lp2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_parallel: (l1: Line, l2: Line, tagId: number, driving: boolean, scale: number) => void;
add_constraint_perpendicular_ll: (l1: Line, l2: Line, tagId: number, driving: boolean, scale: number) => void;
add_constraint_perpendicular_pppp: (l1p1: Point, l1p2: Point, l2p1: Point, l2p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_l2l_angle_ll: (l1: Line, l2: Line, angle_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_l2l_angle_pppp: (l1p1: Point, l1p2: Point, l2p1: Point, l2p2: Point, angle_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_angle_via_point: (crv1: Curve, crv2: Curve, p: Point, angle_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_angle_via_two_points: (crv1: Curve, crv2: Curve, p1: Point, p2: Point, angle_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_angle_via_point_and_param: (crv1: Curve, crv2: Curve, p: Point, cparam_param_i: number, angle_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_angle_via_point_and_two_params: (crv1: Curve, crv2: Curve, p: Point, cparam1_param_i: number, cparam2_param_i: number, angle_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_midpoint_on_line_ll: (l1: Line, l2: Line, tagId: number, driving: boolean, scale: number) => void;
add_constraint_midpoint_on_line_pppp: (l1p1: Point, l1p2: Point, l2p1: Point, l2p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_tangent_circumf: (p1: Point, p2: Point, rd1_param_i: number, rd2_param_i: number, internal: boolean, tagId: number, driving: boolean, scale: number) => void;
add_constraint_tangent_at_bspline_knot: (b: BSpline, l: Line, knotindex: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_p2p_coincident: (p1: Point, p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_horizontal_l: (l: Line, tagId: number, driving: boolean, scale: number) => void;
add_constraint_horizontal_pp: (p1: Point, p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_vertical_l: (l: Line, tagId: number, driving: boolean, scale: number) => void;
add_constraint_vertical_pp: (p1: Point, p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_coordinate_x: (p: Point, x_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_coordinate_y: (p: Point, y_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_arc_rules: (a: Arc, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_circle: (p: Point, c: Circle, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_ellipse: (p: Point, e: Ellipse, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_hyperbolic_arc: (p: Point, e: ArcOfHyperbola, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_parabolic_arc: (p: Point, e: ArcOfParabola, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_bspline: (p: Point, b: BSpline, pointparam_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_arc_of_ellipse_rules: (a: ArcOfEllipse, tagId: number, driving: boolean, scale: number) => void;
add_constraint_curve_value: (p: Point, a: Curve, u_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_arc_of_hyperbola_rules: (a: ArcOfHyperbola, tagId: number, driving: boolean, scale: number) => void;
add_constraint_arc_of_parabola_rules: (a: ArcOfParabola, tagId: number, driving: boolean, scale: number) => void;
add_constraint_point_on_arc: (p: Point, a: Arc, tagId: number, driving: boolean, scale: number) => void;
add_constraint_perpendicular_line2arc: (p1: Point, p2: Point, a: Arc, tagId: number, driving: boolean, scale: number) => void;
add_constraint_perpendicular_arc2line: (a: Arc, p1: Point, p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_perpendicular_circle2arc: (center: Point, radius_param_i: number, a: Arc, tagId: number, driving: boolean, scale: number) => void;
add_constraint_perpendicular_arc2circle: (a: Arc, center: Point, radius_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_perpendicular_arc2arc: (a1: Arc, reverse1: boolean, a2: Arc, reverse2: boolean, tagId: number, driving: boolean, scale: number) => void;
add_constraint_tangent_lc: (l: Line, c: Circle, tagId: number, driving: boolean, scale: number) => void;
add_constraint_tangent_le: (l: Line, e: Ellipse, tagId: number, driving: boolean, scale: number) => void;
add_constraint_tangent_la: (l: Line, a: Arc, tagId: number, driving: boolean, scale: number) => void;
add_constraint_tangent_cc: (c1: Circle, c2: Circle, tagId: number, driving: boolean, scale: number) => void;
add_constraint_tangent_aa: (a1: Arc, a2: Arc, tagId: number, driving: boolean, scale: number) => void;
add_constraint_tangent_ca: (c: Circle, a: Arc, tagId: number, driving: boolean, scale: number) => void;
add_constraint_circle_radius: (c: Circle, radius_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_arc_radius: (a: Arc, radius_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_circle_diameter: (c: Circle, diameter_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_arc_diameter: (a: Arc, diameter_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_equal_length: (l1: Line, l2: Line, tagId: number, driving: boolean, scale: number) => void;
add_constraint_equal_radius_cc: (c1: Circle, c2: Circle, tagId: number, driving: boolean, scale: number) => void;
add_constraint_equal_radii_ee: (e1: Ellipse, e2: Ellipse, tagId: number, driving: boolean, scale: number) => void;
add_constraint_equal_radii_ahah: (a1: ArcOfHyperbola, a2: ArcOfHyperbola, tagId: number, driving: boolean, scale: number) => void;
add_constraint_equal_radius_ca: (c1: Circle, a2: Arc, tagId: number, driving: boolean, scale: number) => void;
add_constraint_equal_radius_aa: (a1: Arc, a2: Arc, tagId: number, driving: boolean, scale: number) => void;
add_constraint_equal_focus: (a1: ArcOfParabola, a2: ArcOfParabola, tagId: number, driving: boolean, scale: number) => void;
add_constraint_p2p_symmetric_ppl: (p1: Point, p2: Point, l: Line, tagId: number, driving: boolean, scale: number) => void;
add_constraint_p2p_symmetric_ppp: (p1: Point, p2: Point, p: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_snells_law: (ray1: Curve, ray2: Curve, boundary: Curve, p: Point, n1_param_i: number, n2_param_i: number, flipn1: boolean, flipn2: boolean, tagId: number, driving: boolean, scale: number) => void;
add_constraint_c2cdistance: (c1: Circle, c2: Circle, dist_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_c2ldistance: (c: Circle, l: Line, dist_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_p2cdistance: (p: Point, c: Circle, distance_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_arc_length: (a: Arc, dist_param_i: number, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_point2ellipse: (e: Ellipse, p1: Point, alignmentType: InternalAlignmentType, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_ellipse_major_diameter: (e: Ellipse, p1: Point, p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_ellipse_minor_diameter: (e: Ellipse, p1: Point, p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_ellipse_focus1: (e: Ellipse, p1: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_ellipse_focus2: (e: Ellipse, p1: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_point2hyperbola: (e: Hyperbola, p1: Point, alignmentType: InternalAlignmentType, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_hyperbola_major_diameter: (e: Hyperbola, p1: Point, p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_hyperbola_minor_diameter: (e: Hyperbola, p1: Point, p2: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_hyperbola_focus: (e: Hyperbola, p1: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_parabola_focus: (e: Parabola, p1: Point, tagId: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_bspline_control_point: (b: BSpline, c: Circle, poleindex: number, tag: number, driving: boolean, scale: number) => void;
add_constraint_internal_alignment_knot_point: (b: BSpline, p: Point, knotindex: number, tagId: number, driving: boolean, scale: number) => void;
delete: () => void;
}
export interface GcsSystemConstructor {
new (): GcsSystem;
}
export interface DoubleVectorConstructor {
new (): DoubleVector;
}
export interface IntVectorConstructor {
new (): IntVector;
}