Files
create/docs/src/architecture/ondsel-solver.md
forbes 87a0af0b0f phase 1: copy Kindred-only files onto upstream/main (FreeCAD 1.2.0-dev)
Wholesale copy of all Kindred Create additions that don't conflict with
upstream FreeCAD code:

- kindred-icons/ (1444 Catppuccin Mocha SVG icon overrides)
- src/Mod/Create/ (Kindred Create workbench)
- src/Gui/ Kindred source files (FileOrigin, OriginManager,
  OriginSelectorWidget, CommandOrigin, BreadcrumbToolBar, EditingContext)
- src/Gui/Icons/ (Kindred branding and silo icons)
- src/Gui/PreferencePacks/KindredCreate/
- src/Gui/Stylesheets/ (KindredCreate.qss, images_dark-light/)
- package/ (rattler-build recipe)
- docs/ (architecture, guides, specifications)
- .gitea/ (CI workflows, issue templates)
- mods/silo, mods/ztools submodules
- .gitmodules (Kindred submodule URLs)
- resources/ (kindred-create.desktop, kindred-create.xml)
- banner-logo-light.png, CONTRIBUTING.md
2026-02-13 14:03:58 -06:00

1.5 KiB

OndselSolver

OndselSolver is the assembly constraint solver used by FreeCAD's Assembly workbench. Kindred Create vendors a fork of the solver as a git submodule.

  • Path: src/3rdParty/OndselSolver/
  • Source: git.kindred-systems.com/kindred/solver (Kindred fork)

How it works

The solver uses a Lagrangian constraint formulation to resolve assembly constraints (mates, joints, fixed positions). Given a set of parts with geometric constraints between them, it computes positions and orientations that satisfy all constraints simultaneously.

The Assembly workbench (src/Mod/Assembly/) calls the solver whenever constraints are added or modified. Kindred Create has patches to Assembly/ that extend findPlacement() for better datum and origin handling.

Why a fork

The solver is forked from the upstream Ondsel project for:

  • Pinned stability — the submodule is pinned to a known-good commit
  • Potential modifications — the fork allows Kindred-specific patches if needed
  • Availability — hosted on Kindred's Gitea instance for reliable access

Future: GNN solver

There are plans to explore a Graph Neural Network (GNN) approach to constraint solving that could complement or supplement the Lagrangian solver for specific use cases. This is not yet implemented.

The src/3rdParty/GSL/ submodule is Microsoft's Guidelines Support Library (github.com/microsoft/GSL), providing C++ core guidelines utilities like gsl::span and gsl::not_null. It is a build dependency, not related to the constraint solver.