Rust + WASM — 47+ constraints, 10 entities, 4 solvers, sparse CG, propagation, multi-start, diagnostics, drag mode
Two APIs: solve_sketch(systemJson) (simple) &
solve_sketch_v2(requestJson) (full config + DOF + diagnostics)
// Click an example button, then Solve to see JSON I/O here.
{ Distance: { p1, p2, d } }{ Horizontal: { p1, p2 } }{ Vertical: { p1, p2 } }{ Coincident: { p1, p2 } }{ FixedPoint: { point, x, y } }{ AngleBetweenPoints: { a, b, c, deg } }{ Midpoint: { m, p1, p2 } }{ Symmetry: { p_out, p_in, line } }{ PointLineDistance: { point, line, d } }{ PointOnLineAt: { point, line, t } }{ PointOnLine: { point, line } }{ Parallel: { l1, l2 } }{ Perpendicular: { l1, l2 } }{ Angle: { l1, l2, deg } }{ EqualLength: { l1, l2 } }{ LineLineIntersection: { point, l1, l2 } }{ EqualLineLength: { l1, l2 } }{ PointOnCircle: { point, circle } }{ LineCircleTangent: { line, circle } }{ CircleCircleTangent: { c1, c2 } }{ CircleCircleTangentInternal: { c1, c2 } }{ EqualRadius: { c1, c2 } }{ Concentric: { c1, c2 } }{ CircleRadius: { circle, r } }{ C2CDistance: { c1, c2, d } }{ P2CDistance: { point, circle, d } }{ PointOnArc: { point, arc } }{ LineArcTangent: { line, arc } }{ ArcArcTangent: { a1, a2 } }{ ArcArcTangentInternal: { a1, a2 } }{ ArcCircleTangent: { arc, circle } }{ ArcCircleTangentInternal: { arc, circle } }{ ArcRadius: { arc, r } }{ ArcSweepAngle: { arc, deg } }{ ArcLength: { arc, len } }{ LineArcStartTangent: { line, arc } }{ LineArcEndTangent: { line, arc } }{ PointOnEllipse: { point, ellipse } }{ EllipseTangentLine: { line, ellipse } }{ EqualMajorAxes: { e1, e2 } }{ EqualMinorAxes: { e1, e2 } }{ EllipseRadmin: { ellipse, r } }{ EllipseFocusDistance: { ellipse, d } }{ PointOnArcOfEllipse: { point, arc_of_ellipse } }{ PointOnHyperbola: { point, hyperbola } }{ HyperbolaTangentLine: { line, hyperbola } }{ HyperbolaRadmin: { hyperbola, r } }{ EqualHyperbolaRadmins: { h1, h2 } }{ PointOnParabola: { point, parabola } }{ ParabolaTangentLine: { line, parabola } }{ ParabolaFocalLength: { parabola, f } }{ EqualLineLength: { l1, l2 } }{ ArcLength: { arc, len } }{ EllipseFocusDistance: { ellipse, d } }{ PointOnArcOfHyperbola: { point, arc_of_hyperbola } }{ PointOnArcOfParabola: { point, arc_of_parabola } }