# Sketcher helper constraint

## Overview

Helper constraint is a regular sketcher constraint that is needed as a part of a more complex constraint, but is exposed in user interface to assist dealing with redundancy. For example, for Snell's Law constraint, the two lines that represent rays of light need to be connected (Coincident constraint), and the joint must lie on the interface (Point on object constraint).

Helper constraints are added automatically when they are needed. The decision for if they are needed is currently made by evaluating the helper constraint error for current state of geometry (this may change in future versions). If the error is small enough, the constraint is considered to be unnecessary, and is not added. In some cases, this logic can lead to errors (the constraint can be satisfied by accident, which can easily happen when Sketcher Grid Snapping is on).

If this happens (a helper constraint is missing, and the required conditions is not satisfied otherwise), the complex constraint will be broken. It will do something, but the actual behavior is undefined. Such a broken constraint can be repaired by adding the missing helper constraint manually.

Helper constraints are currently required for:

- Constrain tangent or collinear (in tangent-via-point mode two Point on object constraints are needed)
- Constrain perpendicular (in perpendicular-via-point mode two Point on object constraints are needed)
- Constrain angle (in angle-via-point mode two Point on object constraints are needed)
- Constrain refraction (Snell's law) (Coincident constraint and Point on object constraint are needed)

## Scripting

When constraints requiring helpers are added from Python, no helper constraints are automatically added. One can replicate the automatic decision-making of the UI commands in a script by testing the following functions, specifically added for the purpose and used in the UI routines:

```
Sketch.isPointOnCurve(icurve,x,y)
```

`isPointOnCurve`

tests if a virtual point, given by sketch coordinates `x,y`

(float values), happens to satisfy a virtual point-on-object constraint - i.e. lies on curve specified by curve index `icurve`

. Returns True if the point is on curve, and False if it doesn't.

```
Sketch.calculateConstraintError(iconstr)
```

`calculateConstraintError`

evaluates an error function of a constraint specified by its index `iconstr`

in the sketch. If there is only one error function in the constraint, the return value is the signed return value of the error function. If there is more than one error function associated with the constraint (i.e. the constraint removes more than one degree of freedom), the return value is the RMS of all the error functions (always positive).

**General:**Create sketch, Edit sketch, Attach sketch, Reorient sketch, Validate sketch, Merge sketches, Mirror sketch, Leave sketch, View sketch, View section, Toggle grid, Toggle snap, Configure rendering order, Stop operation

**Sketcher geometries:**Point, Polyline, Line, Arc, Arc by 3 points, Arc of ellipse, Arc of hyperbola, Arc of parabola, Circle, Circle by 3 points, Ellipse, Ellipse by 3 points, Rectangle, Centered rectangle, Rounded rectangle, Triangle, Square, Pentagon, Hexagon, Heptagon, Octagon, Regular polygon, Slot, Arc slot, B-spline by control points, Periodic B-spline by control points, B-spline by knots, Periodic B-spline by knots, Toggle construction geometry

**Sketcher constraints:****Dimensional constraints:**Dimension, Horizontal distance, Vertical distance, Distance, Auto radius/diameter, Radius, Diameter, Angle, Lock**Geometric constraints:**Coincident (unified), Coincident, Point on object, Horizontal/vertical, Horizontal, Vertical, Parallel, Perpendicular, Tangent or collinear, Equal, Symmetric, Block**Other constraints:**Refraction (Snell's law)**Constraint tools:**Toggle driving/reference constraint, Activate/deactivate constraint

**Sketcher tools:**Fillet, Chamfer, Trim, Split, Extend, External geometry, Carbon copy, Select origin, Select horizontal axis, Select vertical axis, Array transform, Polar transform, Scale transform, Offset geometry, Symmetry, Remove axes alignment, Delete all geometry, Delete all constraints

**Sketcher B-spline tools:**Convert geometry to B-spline, Increase B-spline degree, Decrease B-spline degree, Increase knot multiplicity, Decrease knot multiplicity, Insert knot, Join curves

**Sketcher visual:**Select unconstrained DoF, Select associated constraints, Select associated geometry, Select redundant constraints, Select conflicting constraints, Show/hide circular helper for arcs, Show/hide B-spline degree, Show/hide B-spline control polygon, Show/hide B-spline curvature comb, Show/hide B-spline knot multiplicity, Show/hide B-spline control point weight, Show/hide internal geometry, Switch virtual space

**Additional:**Sketcher Dialog, Preferences, Sketcher scripting

**Getting started****Installation:**Download, Windows, Linux, Mac, Additional components, Docker, AppImage, Ubuntu Snap**Basics:**About FreeCAD, Interface, Mouse navigation, Selection methods, Object name, Preferences, Workbenches, Document structure, Properties, Help FreeCAD, Donate

**Help:**Tutorials, Video tutorials**Workbenches:**Std Base, Assembly, BIM, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework

**Hubs:**User hub, Power users hub, Developer hub