Hi FreeCAD dev team!

I like your project! Finally a very promising open-source CAD software project!

And development-wise I think you have made all the right choices so far: Qt, Coin3D, OpenCascade, cmake, etc.

I've been developing and using a multi-body dynamics library (well, that's just a part of it) in C++. However, I have no visualization software for this library and I have been looking for a good platform on which to create that visualization. I eventually narrowed it down to Qt and some open-inventor-like library. So, it seems natural to create my visualization software as a workbench / module / plugin for your FreeCAD project.

First, a little information about me. I'm a PhD candidate at McGill University in Mechanical Engineering. I've also been a programmer for many years (since mid-high-school), mostly in C++. I did many hobby projects in the past, mostly started out doing simple 3D computer games and related tools (height-map editors, particle system editors, 3D model importers, etc.), when I got to college, my projects moved a bit more professional and I started to write more high-fidelity multi-body dynamics simulators as well as a number of related math utilities (lin-alg, num. integrators, optimizers, etc.). Now, my work mostly involves motion-planning (probabilistic algorithms) and state-estimation (non-linear Kalman filtering). But during my Masters, I developed a lot of code for doing both multi-body dynamics simulations and model-reference (or model-based) control for a humanoid robot. So, that code has been pretty thoroughly tested and validated.

This code is now fairly feature-rich and it is mostly object-oriented (as opposed to much of the rest of my library that mostly uses generic programming and template meta-programming techniques). I rarely add much to it these days because it has reached a fairly mature and stable point and all the features that I need for simulation, model-based control, and motion-planning are already in place, but it lacks any kind of visualization (which wasn't much of a problem before, but it is starting to feel like something I should add to it). You can find my overall library under my github public repository here:


But, the part of the library that does multi-body dynamics is found under this folder:


The only real external dependency of my library are some of the Boost libraries (Thread, MPL, Concept-Check, and a few basic things). The other external dependencies are for test programs that aren't core elements of the library by any means. I also have my own RTTI system and serialization library (xml or binary). But overall, the library is light-weight and most other parts of it are header-only (but not the multi-body dynamics part, because it's a simple OOP architecture).

I think it would be mutually beneficial to have a module of FreeCAD that uses my multi-body dynamics library, not to mention that I also see that you have an "Assembly" module under development which could also benefit from the type of setup that I have to assemble multi-body systems (based on a KTE framework, where KTE stands for Kinetostatic Transmission Elements, which is an abstraction for any kind of joint or link or any other dynamic or kinematic element). Overall, the potential for an editor for my MBD library would get close to the kind of functionality that MSC.ADAMS provides (its basic functionalities, of course).

What do you think?

The only little problem for me is that I have almost no experience with Python, but I hear it is a breeze to learn (especially after 12-13 years of doing C++!).

I would be planning to start digging into this project in about a month or so (I'm a bit busy at the moment), and I would love to collaborate if anybody is interested in getting involved in this new module for FreeCAD.

Cheers, looking forward to hearing from you guys,


Sven Mikael Persson, M.Sc.(Tech.)
PhD Candidate and Vanier CGS Scholar,

Department of Mechanical Engineering,
McGill University,
McConnell Eng. Bldg., Room 429
3480 University Street
Montreal, Quebec
H3A 2A7 Canada

Work: +1-514-398-8202 ext. 429
Cell: +1-514-476-2773