Here are my thoughts on the most important things that FreeCAD needs if it is to become my ideal CAD system.
I first used FreeCAD in 2015 to record the detailed dimensions of some rooms in my house and in 2016 to model a boot rack I was building out of wood. The ideas in this article are about fundamental aspects of FreeCAD’s scope and goals, and are based on a background of thinking about CAD as a software developer and hobbyist, as well as my experience using FreeCAD.
I am not talking here about the kinds of user interface features or specific modelling capabilities that are usually entered in a bug tracker as enhancement requests. I mention some ideas of that kind in FreeCAD Usability Improvements.
- an explanation of the overall ethos, paradigms, capabilities and limits of modelling in FreeCAD
- a “structured programming” style of modelling (separate main article)
Every good piece of software that supports complex editing should have:
- a good Undo system (separate article)
Interesting bonus capabilities:
- shared editing
Ethos, paradigms, capabilities and limits of modelling in FreeCAD
In trying to understand how best to use FreeCAD for what I want to do — recording some dimensions and details of rooms in my house; modelling a wooden boot rack that I was making — I was unable to find a lot of the information I wanted. In trying to understand where the developers of FreeCAD are planning to get to eventually, and to decide whether I could hope to contribute to making FreeCAD into my ideal CAD system, I wanted to know more or less the same things. A discussion of the following topics would greatly help.
- compare with other modelling systems, especially Blender and AutoCAD
- what can a FC file contain? a single 3D scene? with a single view (camera position and type)? with lighting, background, and other scene rendering metadata? plus zero or more 2D drawings?
- a scene is composed of what classes of object — CSG objects and mesh objects? can plug-in modules define new types of object?
- what kinds of object can be combined with or converted to other kinds? what groups of operation can be used on what kinds of object? is there a group of operations that work on every kind of object?
- to what extent are surface or solid properties supported (colour, texture, stiffness, …)? can arbitrary additional properties be attached to the model even though FreeCAD does not know how to interpret them unless a plug-in extension is loaded?
- is there any kind of animation support or are we always building a static model?
It is important to describe the goals and aspirations as well as what has already been developed.
A “structured programming” style of modelling
I want my CAD software to remember how my model is constructed. If a shape is repeated in three places, I want to be able to modify that shape in one place and have the change propagated to all three places at once. If a face is rectangular, I want to know that its edges will remain parallel when I adjust its width. If each shelf in my boot rack is 18 mm thick, I want its thickness to stay at 18 mm and not reduce by 10% when I decrease the overall height of the rack from 1000 to 900 mm.
For me the ability to use structured design techniques is a key requirement for computer-aided design.
Some important structural modelling requirements are:
- compound objects
- parametric templates
- extrusion: 2D sketches and 1D profiles
Main article: FreeCAD: Structured CAD
FreeCAD would be much more powerful with shared editing: the ability to edit and display a model that’s simultaneously being edited and/or displayed by another application. Examples:
- using Blender to edit a mesh-based subset of the model, while using FreeCAD to display the whole model and edit the rest of it
- two people simultaneously editing the same shared model, both using FreeCAD
It’s not so much that shared editing is the killer feature, but rather I think that supporting the capability would open the way for some interesting developments such as using an external editor for some tasks (e.g. Blender for editing a mesh) and so freeing FreeCAD from the unattainable goal of having to be a good at everything. Blender will always be better for mesh editing so instead of forever trying to catch up and yet forever remaining a poor substitute, why not harness the power of Blender itself for that task and concentrate more of the FreeCAD development effort on doing the fundamental CAD tasks well?
Shared editing would require a particular kind of software architecture which, if FreeCAD isn’t already designed in the right sort of way, would probably require such major changes that it wouldn’t be feasible. However, from what I’ve seen so far, it looks like FreeCAD’s architecture might be not too far off what’s needed.