Ask HN: How does modern FreeCAD compare with Solidworks?
Its been a while since I have touched Freecad, and would like to go open source for my Cad projects, but the last time I used it it was severely lacking in features compared to Solidworks.
The main thing Im looking for is parametric modeling. The use case is basically sketches with constraints -> parts -> assembly with constraints -> drawings that show driven dimentions.
I have the time to learn it, but I don't want to be writing custom python scripts to do the above.
70 comments
[ 2.6 ms ] story [ 139 ms ] threadFillets, chamfers, "shelling" things, just one method away. Plus, it is able to run in a jupyter notebook.
I've since started on my own project. I'm a big believer in the idea that language is the most versatile way of working, so it's one of those editors where you describe the model in a programming language (TypeScript in my case). It's not ready for use yet though.
It uses C++ on the backend in order to use GCAL (and its fast 3D boolean operations). The visual editor is in Electron, with Three.js for the 3D rendering.
In theory it can do a lot. In practice its interface is 'unique', its cognitive model is a dog's breakfast, its CAM offering is weak, its command line automation is brittle and poorly documented, and you are going to spend more time solving problems for the code than for yourself.
I have directly managed teams of CAD people for most of the last decade. Mostly they use Solidworks, which has its own problems (exceptionally broken namespacing, poor performance especially for cables/fasteners, horrific RCS/VCS offering, ridiculous electronics offering, weak command line support, etc.). Personally, I often use OpenSCAD for simple models. I virtually never use FreeCAD, with few exceptions.
IMHO: (1) Blender is better modeler than FreeCAD in many cases, especially with some modern extensions such as https://www.cadsketcher.com/ https://blenderbim.org/ https://github.com/kevancress/MeasureIt_ARCH (2) It is far more useful to learn Blender than to learn FreeCAD, since that will allow you to achieve animation, parametric models, point clouds, geospatial modeling, etc. where FreeCAD is basically functionally limited to working with solids and the output of conventional artifacts such as STEP files and drawings. (3) Drawings themselves are becoming largely outdated as the leading edge of industry seeks to move from "CAD->drawing->CAM-based production" to "CAD->CAM-based production" to finally rid itself of human errors of interpretation. This is of course a long term goal, and will never wholly succeed, but the migration has begun and the writing is on the wall.
However, despite the recent improvements, I still cannot recommend it for new users compared to commercial solutions for the sole reason of the Topological Naming Issues: https://wiki.freecad.org/Topological_naming_problem
This issue has been probably the #1 problem I've had with FreeCAD since I started using it. And though I've learned how to design parts to get around the problem in most situations, it's a huge hurdle for newcomers to understand and get around. Luckily there's a fork that fixes a significant number of the issues: https://github.com/realthunder/FreeCAD_assembly3 and https://github.com/realthunder/FreeCAD
I've also heard of Ondsel, which is supposedly a much more user friendly version of FreeCAD that also includes some fixes to the issue: https://ondsel.com/
EDIT: Here's actually a better read of the topological naming issue, what's being done about it, and why it's difficult to fix: https://ondsel.com/blog/freecad-topological-naming/
https://github.com/realthunder/FreeCAD/releases
I highly recommend Link Branch, it's full of all sorts of usability improvements.
The fix is still being worked on for the next mainstream FreeCAD release.
- Realthunder’s branch contains unique, forked changes that will cause file incompatibility with core freecad if you use them unknowingly
- Core freecad is ahead in many, many ways and improving quickly
- the Realthunder branch is likely a dead end
The TNP mitigation from the Realthunder branch is very close to being enabled in 0.22, and the feature freeze for 1.0 is weeks away. 1.0 is currently targeted for early August.
My feeling is that it would be much better to learn what the topological naming problem is, and how it can be worked around, and then use Ondsel 2024.2 or a 0.22 weekly release until the TNP mitigation is mainstream. (It’s likely to be in 0.22 very soon indeed)
My thinking is straightforward: there are and will be more tutorials and more support for this route, and learning about how to mitigate TNP is not wasted info: it will teach you useful skills for making generally robust designs, TNP or not.
Among others, Mango Jelly Solutions has a recent video about TNP, and Brodie Fairhall’s video on the topic is worth seeing.
Which is not to say that Ondsel 2024.2 is a bad way to experience those things, or that the Ondsel Lens (cloud collaboration suite) is not interesting, because it surely is.
It’s just to say it is only much more user-friendly if you’re not already using the 0.22 dev releases (that are considered to be generally as stable as 0.21 and are in wide use)
(I upvoted you for the rest: I too am waiting for the TNP mitigations before I recommend it to less technically-focussed people)
[0] https://news.ycombinator.com/item?id=40430893
Or wait till v1?
The main issues with FreeCAD are those common to most open-source software applications like GIMP. You can accomplish almost anything that you can with professional software, but the UI is obtuse, at times buggy, and the process is going to involve way more steps, plugins, and hidden menus.
I use it because it's one of the few CAD packages that runs on MacOS and has a viable free tier. Most other CAD free tiers are crippled or have bizarre licensing agreements.
If you decide to give it a shot, I highly recommend using realthunder's branch, which massively improves the topological naming problem issue that the main branch struggles with. It also includes the plugin that adds the "assembly with constraints" feature. https://github.com/realthunder/FreeCAD
This YouTube channel has some great FreeCAD tutorialss. FreeCAD operates very much under a TIMTWOTDI philsophy. https://www.youtube.com/@MangoJellySolutions
I now think of most open source projects as just as good as closed-source at 1) building the functionality and MVP UI/UX, but that there is more friction to communication overhead to do 2), as well as less incentives (smaller carrot, smaller stick). To decide on specific priorities, bring in a designer (who might be non-technical) that can fully understand the context, and then potentially change or move around a bunch of code, is not something that "just happens organically by people scratching their own itch"
I think projects that are high profile like blender have done better here over time, often when there are well resourced and governed foundations or companies backing them. Or occasionally an OSS author will do this. Though I think that's the exception rather than the rule, and certainly requires a larger breadth of skills that extend beyond pure technical ability.
https://solvespace.com/index.pl
https://github.com/solvespace/solvespace
- adding a chamfer (such as when you need to add a 1 degree slope in an injection mold
- more complex spatial Boolean operations
- simple operations for manipulating entire models by pushing or pulling subsets of them
My use case was designing simple parts for injection molding (rudimentary electronics enclosure for outdoor use). Not in any way what someone would consider pushing the limits of what modeling software can do.
Overall, I cannot unfortunately recommend the software to others at this time unless you are 100% sure that it will satisfy your use cases. Or else you will end up in the same situation as me, someone who wasted hours and hours learning this tool and wanting it to be the tool I could use, only to find out it’s just straight up insufficient for my use case.
I've been using freecad fairly heavily (hobbiest level heavily, so nights/weekends) for the past year and a half.
I can't recommend freecad for any project you'll put more than 10 hours, or 3 iterations into.
References suck in freecad. Sketches/constrains are okay, as long as all your references are in the sketch. If they're in another sketch or body, forget it.
Lets say you want to create two parts where a polar pattern of bolts align between the two. Top has a hole and counterbore, bottom is threaded. The most efficient way of doing that is drawing a copy on a piece of paper and write down the dimensions. then create two sketches on the two bodies and enter those dimensions. Which is dumb. Wouldn't it be nice to reference a constraint/dimension in another sketch? or use a master-sketch like fusion360? not in freecad.
freecad does have a reference system, but they're named references that are a pain in the ass to remember. And, there's no point since sketches lose their faces way too often. Modifying a sketch in the middle of the body history means risking all the other sketches just coming off the body and leaving you with a mess.
That said, i've used freecad to design fairly complicated assemblies that have electronics, gears, motors, bearings, and moving parts. iterating on the design just requires a lot of rework.
There are master sketch workflows. Youtube videos are out there for those (Mango Jelly Solutions has at least one).
The “losing faces” issue is the Topological Naming Problem. This is very soon to be mitigated and it can be worked around in the meantime (offset your sketches from a base plane rather than attaching them to a face). Though it is I gather still murderous in one of the assembly workbenches. The fix is coming soon.
Many of your other concerns would be addressed by doubling down on the parametric stuff, I think. The Spreadsheet module can help solve a lot of problems that are otherwise solved by the methods above and may be easier to keep track of. You can do calculations in there more or less as you would in a typical spreadsheet, and then give cells of the spreadsheets aliases that you can refer to in expressions anywhere in your design.
FreeCAD is really fundamentally parametric, and once you get into that, you have a bunch of options.
Solidworks will take you perhaps only one quarter of the time to produce parts of similar complexity.
In both you can get quicker with experience. Both have far more features than you need, yet are missing the ability to make some shapes you can imagine yet cannot find a way to model.
Use Freecad if you care about opensource software. Use solidworks if you just want an STL file without hassle.
https://www.tootalltoby.com/Leaderboard/
Two tips:
(1) use RealThunder's Link Branch (https://github.com/realthunder/FreeCAD/releases). This fixes one of FreeCAD's fundamental problems.
(2) use the "Part Design" workbench. That's the one that is built around the SolidWorks workflow: sketches with constraints -> parts, etc. There are other workbenches for other workflows; you might need to hop over to them sometimes but you'll want Part Design for the most part.
FreeCAD still hasn't settled on "one correct way" to do assemblies of parts. There are various plugins that each offer their own take on how to do it. You'll have to pick the one that you like most.
You don't need to use Python. You can use spreadsheets, equation-driven dimensions, and so on, just like SolidWorks. You can make dimensioned drawings using the TechDraw workbench, which gets better all the time. (Also useful for making DXFs to export to a waterjet or laser cutter).
The documentation is sparse, so youtube demonstrations are the clearest way to learn. I like JokoEngineering's channel.
Also UX of Ondsel is much better and close to the Link Branch version by Real Thunder.
It's important to mention that Freecad doesn't support master sketches at the moment. So you'll need to create many smaller sketches based on geometry or parameters to make a complex part
At least in Link branch, my workflow is to name the first part in my document "Layout", and fill it with master assembly sketches, drawing cross-sections of an entire assembled product. Then I create subsequent parts which all import and reference the geometry in those sketches, and never reference other parts. This lets me do a top-down assembly-driven design, which is very fast and easy to modify later on, and freely delete and replace parts without breaking references. FreeCAD supports this workflow via shape binders, and Link Branch speeds it up greatly by automatically creating shape binders as needed.
Great to hear that mainstream FreeCAD will soon support those improvements, but I'll keep pointing people to Link Branch until those improvements actually get released.
These features greatly simplify and speedup design of parts and they are the part of missing experience for users coming from other CAD. I also eagerly looking forward to getting them in the main branch.
But there are no easy and intuitive ways of doing that. Compare it to the Realthunder’s Link Branch version which has `export single geometry` and `export multiple geometries` tools as well as automatic SubShapeBinder generated when edges forming a closed loop which are selected from the sketch before padding.
Though I think the sketcher improvements that have gone into 0.22 (and aren't in RealThunder's work) are absolutely more valuable, and I'd rather see the facilities you mention reimplemented on top of those.
I'm not convinced by the automatic subshape binder bit; I think that is better handled explicitly.
Maybe we will see something that formalises the master sketch workflow, but I don't think it is particularly universal as a design technique. To me it seems it would maybe be better to see some kind of improvement to the selection mechanism for importing geometry from other sketches. I find that a little opaque.
I would like the built-in part design wrapper facility. And I think there are improvements in the cross-section view; I think Persistent Section Cut is often more hassle than it is worth.
As interesting as the RealThunder branch is, it's one guy's fork of experiments, and he didn't have to get agreement from anyone else or follow anyone's coding standards but his own. And for better or worse that fork is now (edit: likely) a dead end, and all the energy (edit: and money) is elsewhere.
Some great stuff has come from that branch but I don't think there's any reason why it should just be automatically blessed.
I don't know if that is impossible but it would be an incredible amount of work for one person to manage. He last merged a year ago, AFAIK.
I'm sure some people will stick with it over 1.0 for a good while.
(ETA: For clarity, I think he basically saved FreeCAD.)
It looks like mult solid bodies have been merged to main, but I'm not sure yet about the ability to do patterns on arbitrary objects, like other patterns.
If that makes it to mainline, I'll probably switch right away.
Something like Fusion360 or onshape is a pleasure to work with, with a well designed interface, great stability and comprehensive features. In my experience using FreeCAD meant significant amounts of pain and wasted time, even if it stable. If you are working with multiple parts FreeCAD becomes quite experimental.
You can definitely achieve what you want with it. But it's up to you whether the investment in time, effort and frustration is worth the license.
Freecad has too much legacy and quite verbose.
The things may change a bit this/next year when a solution to the topological naming issue is released. But UX is still a mess.
There is also an Ondsel, freecad based but opinionated. I find it ATM more user friendly.
Also keep in mind that freecad doesn't support master sketch. So you can't pick sketch lines for an extrusion or other operation. I found this quite confusing in the beginning. But this is also a subject to change this or next year.
If Freecad doesn't fit you now I'd recommend to check it a year later after v1 release.
It’s always worth doing your fillets last, but the other thing I would say is, where a fillet or chamfer is more than presentational as it were, build it into a sketch. Or cut it with a groove. Those operations are more reliable in OCC.
In my experience, a lot of what I used to think were limitations of FreeCAD turned out to be me just not knowing the FreeCAD way of doing things. More importantly, that FreeCAD almost always has more than one way of doing things, so if something seems too hard, you need to go digging for an alternative workflow.
The videos start kinda slow for folks who already know how to do parametric modeling, but it helps to put yourself in a beginners' mindset and pretend you're learning CAD for the first time. I found them a lot more useful than the documentation.
I should note that FreeCAD as of 0.21 is a lot more stable than previous versions. The last time I tried to switch (2-3 years back), I gave up and just paid for my annual SolidWorks renewal after the third time I lost several hours' work due to a crash. With the latest version, I don't think it's crashed on me once.
Where I still miss SolidWorks is when doing complicated assemblies, but I'm still getting to know the various assembly workbenches to figure out which one works best for me. For basic part modeling, I think I'm coming around to actually preferring FreeCAD now. (It's also a huge plus not having to reboot my Linux desktop into Windows, although I'm still keeping the Windows partition around for gaming.)
It does require some patience. Not everything is obvious or intuitive, but I think this is a matter of time. I think FreeCAD is going to experience the same kind of growing up that Blender did, quite shortly.