I e.g. used it to create parametric electronic parts for visualizations of printed circuit boards where modelling each slightly differently sized variant manually was too much effort.
I like OpenSCAD for what it is good for: limited, geometrically simple parts and geometry demos.
I think CadQuery/Build123D are fine tools with much better abstractions than OpenSCAD. The latter is not, IMO, really a CAD tool at all; at no point does the Computer Aid the Design, in the CAD sense, whereas you can argue that the various OpenCascade code-CAD environments can at least expose generated geometry to code.
But the post is right: parametric GUI CAD is pretty much a visual analogue of functional programming. Once you get your head around the ways sketches or their equivalents can map onto existing geometry, a lot of the ways programmers think are very applicable to CAD.
You're basically working with a directed graph, which means you can do things like drive designs from parameter sets, or spreadsheets, and e.g. in FreeCA drive some variables from configuration tables (rows in a spreadsheet with different parameter sets) so you can make variations of objects.
As much as I think code-CAD has uses, especially perhaps for analysing and post-processing STEP files for download customisers, at this point someone with parametric CAD requirements should at least try a GUI CAD package like FreeCAD or any of the free/low-cost tiers of the commercial packages. FreeCAD can do OpenSCAD, and has a (verbose) Python layer, so it's accessible to code CAD.
The tools may initially be a little frustrating for programmers used to writing code, athough IMO less frustrating than the many quirks and significant limitations of OpenSCAD. But CAD methodology is logical and scaleable, and with a little learning you will be able to do things much more quickly and much less repetitively than OpenSCAD, which admittedly is a counterintuitive claim to a programmer.
I think programmers tend to think that GUI CAD must be to code-CAD what visual programming tools are to text IDEs: unnecessary fuss keeping you from the truth. But it's really not like that.
OpenSCAD is almost akin to writing assembly. So many things you would expect like in a higher-level language (FreeCAD, Fusion) are missing (like fillets and things like that). You onle have primitives and primitive operations to work with.
Also see https://github.com/gumyr/build123d (which is closely related to CadQuery, my understanding is it's successor). I used b123d for a project this year and it turned out perfect. When I need to make a change, editing some version controlled py and watching the model update is very satisfying.
Best resources to get a feel of why programmatic parametric modeling is so interesting:
Bambu and Fusion360 sure look nice, but if you're on tighter budget, 3D printers became both cheaper and more reliable in general, and FreeCAD recently got to 1.0 and is quite capable.
I worked alongside people using early versions of Makerbot and Ultimaker, and those were a maintenance nightmare. But recently I got a Kobra 2 Pro for $200, and it's both more capable and easier to use than those old monsters. With PLA it's pretty much hassle-free, no need to tweak anything except print orientation and maybe some support options.
I'll add my voice to this. I stopped using Fusion360 when they adjusted the licensing terms a while back. FreeCAD has a ways to go to being at par with the likes of Fusion, but it is a capable piece of software - and once you get some hours with it you can design really incredible stuff.
Anyone who used Blender in the early days knows how far its come. FreeCAD is making that journey too. The 1.0 release is a big step. I use FreeCAD for all of my (admittedly amateur) CAD work. I've designed toys for my kid, props for my Christmas light setup, tool-holders, and any number of things I can't think of at the moment.
If anyone is finding FreeCAD hard to pick up, I highly recommend Mango Jelly's Youtube channel, which offers lots of really great tutorials on using it: https://www.youtube.com/@MangoJellySolutions
I haven't maintained my Ender3 since setting it up first, then tuning it. It just keeps printing good prints forblike 4 years now. I don't even think about it, pop in the file and walk away. I don't even level the bed. Sometimes it's months between prints and it still just works.
I print mostly practical parts so perfection isn't really needed but the finish has been great regardless. The only issues I have had is the bed eventually peeled up after enough PETG prints with no bed prep.
> FreeCAD recently got to 1.0 and is quite capable
FreeCAD is capable and is indeed free, but as a beginner designing something somewhat complex it really led me into building a rat's nest of a project that I found difficult to salvage. The rough edges and general flaky behavior did not help things, and I found almost none of the user interface intuitive. If I had to do it over again I'd choose F360 or Onshape.
The main problem with FreeCAD is that editing a dependency tends to break the entire rest of the model. So, if you want to edit a dimension or add geometry in a part made very early in the "stack", you're generally better off remaking the entire model with the other item as a base in another tab.
This is not a problem F360 shares, and that feature is what you pay for.
If your priority is to use open-source software, FreeCAD does the job. But I basically always recommend AGAINST it for anyone who asks me that I consider a more "normal" user. Normal in the way that they don't share my masochistic tendencies to spend all sorts of time and efforts getting open source tools to work, fighting through quirks, poor UX, bugs, etc...
It seems to put off even people who are interested in learning CAD or are already familiar with CAD. It's telling that the best description people can come up with is "capable and free" instead of "easy to use".
I’m only a dabbler in all of this but the thing that really grates on me about Fusion 360 is how its performance is awful no matter what you’re running it on. That might be a boon if your machine is very old or low spec, but if you’re running e.g. a well cooled tower with a Ryzen 5950x and RTX 3080 Ti you don’t want to be seeing issues with responsiveness, frame dropping, etc.
The Fusion360 free-tier has been getting ever more restrictive over time. At the moment it is at:
> users who generate less than $1,000 USD in annual revenue and use for home-based, non-commercial projects only.
Which already makes it unsuitable for any Open Source work. While one might still accept those restrictions for quick one-off projects, those projects are also the ones that FreeCAD can handle fine.
I do a lot in amateur rocketry and took the fusion360 route. One thing that’s nice about it is its popularity. Whenever I have questions most of the other people in my hobby are ready with answers or guidance.
Nice post, let me build up on the software engineering analogy.
I've had a 3D printer for a while, and I have to say that Bambu has completely changed my perspective on the whole experience.
Before, I treated it mostly as a time-consuming hobby - setting up my own Octopi for remote printing, tinkering with different settings and parts on my Prusa. It was all trial and error, with most prints turning out below average.
Now it feels more like a continuous integration system. It runs mostly unattended, always ready to execute my next batch of prints.
I recently traveled for a week and only needed my wife to refill the filament and remove finished prints, allowing my workflow to continue uninterrupted.
I don't regret my initial experience since I learned a lot, but I really appreciate having a more streamlined process now.
That has been my experience as well. I had a bunch of printers before the X1C, from 3 different countries, and all of them needed various amounts of tweaking and hacking to reach the print quality and ease-of-use I was expecting.
Even the Prusa MK3 (upgraded to MK3S, then MK3S+...) required a Raspberry Pi to be able to print without lugging an SD card from my PC to the printer, and a USB webcam to add print monitoring.
Now when people ask for FDM printer recommendations, I tell them that this hobby has two main paths: One path regards the printer as a tool to create things for other projects; the other path has the printer as the project itself.
An analogy I use is buying a car that's working and ready to drive vs buying a car that doesn't work and repairing it. Are you looking to drive or are you looking to fix/build a car?
Bambu printers are an easy recommendation for a printer which is a tool. The new Prusa CORE One might be a good fit as well, but it's still too early to tell what its quirks are. For printers that are projects, the Ender 3 comes to mind as a very cheap base for countless tinkering and upgrades.
> Now when people ask for FDM printer recommendations, I tell them that this hobby has two main paths: One path regards the printer as a tool to create things for other projects; the other path has the printer as the project itself.
This is undeniably true at the youtube content level.
But at the printer level I think consumers will crash into this far less if buying the latest. Creality’s three new Ender 3 V3 models are all low-tinkering models, even the cheapest. So are the Anycubics. Sovol’s latest machines like the SV06 Ace manage to be both fully open source and also highly tuned out of the box.
As much as I admire the build quality of (most of) the Bambu Lab machines, in real terms what they have actually achieved is making the closed source, closed build, hard to upgrade and repair, RFID-chipped-consumables printer acceptable to the market. They even almost succeeded in making printing dependent on the cloud, until their little distributed industrial accident happened.
Massive +1 - Bambu changed everything for me.
I've been in the hobby for 10 years, built multiple Vorons from source & kit, and heavily modified multiple Prusa machines (Full Bear). Nothing compares to how easy Bambu made everything. My wife, who has seen me print for all that time without being able to figure it out, can now print items without hassle or oversight on the X1C.
Another way I can tell that Bambu changed everything is through second-hand market prices. Before Bambu, I could sell most 3D printers for not much less than I purchased them or more, depending on the mods. I just struggled to sell a Voron 2.4 300 for $800 (near $1800 build price after extras). There is still a market for enthusiast printers, but the leap in user-friendliness is known. What they provided for the cost was a vast market leap.
Likewise, my Bambu X1C changed my 3d Printing experience. Prior to it, I was spending an insane amount of time on fixing my printer, testing my printer, trying to improve my printer. The Bambu just worked. It breaks my heart a little that the machine I use daily isn't open source, doesn't have open parts that I can just replace. But just a little. Because the printer keeps working, really well.
I just went through this journey, except I learned freecad.
You end up having to click and enter so many numbers if you need exact dimensions, so I'm planning on switching to cadquery.
It would be cool to make a framework for modifying cadquery code with natural language, for example "make box 1 and box 1 flush" or "create two concentric semi-spheres and subtract the smaller one from the larger one"
But idk, maybe once you're fast at fusion this kinda stuff is faster to hotkey than speak
Have you tried the new VarSet in 1.0? I found it more ergonomic than the old spreadsheet approach. With a formulas first approach, I find the modeling flow more controllable. Come to think about it, it starts to resemble a view/model arrangement I am used as a frontend dev.
VarSet has an incomplete GUI but you're right it's a better fit; it has fewer massive recalculation bombs than the Spreadsheet approach (and it can still AFAIK work as an interface to a configuration table sheet).
The Spreadsheet module is awesome (particularly configuration tables, which I used even in one of my first serious designs) but I still don't really know why my model has to recalculate because I changed the background colour in a cell. That seems to me to be unnecessarily deep integration.
I’ve had such a hard time with Claude and cadquery/build123d; did you do anything specific to get better results? I tried turning the examples into a markdown document to feed into sonnet as part of the prompt, and that helped a bit, but still couldn’t get it to build basic parts reliably.
Of course this title triggers me and I need to share/rant about my own programming struggles with CAD :) Sorry
Coming at the problem from another end, I have have been designing dream houses as a hobby but have been struggling and frustrated by the current CAD and 3D editors.
There are a lot of drawing-house-plans apps like SweetHome3D and Homestyler etc, and they are all really good at getting some wall lines down quickly, but quickly start to get hard to do anything advanced and all give up on real roofs and attics.
From the other end there is Sketchup, which is both good and easy yet also difficult to control.
The general advice for people wanting to see a house design in 3D is to draw the plan in some house plan software then save that as a jpg and import that into sketchup and then to build the walls on top of the drawing etc.
Of course, being a programmer, I had some ideas... and have about a dozen abandoned starts on a house drawing program that actually understands that 'this is a wall, and this is how thick walls are' etc.
The openscad approach is good and I have some routines that do sensible tricky roofing angles and things, but you can't really go and and parameterise whole houses. Its a nut that still hasn't cracked.
I've watched and talked with a lot of architects and tbh they are sketching and treating their CAD as a bunch of lines rather than the CAD knowing what walls and beams really are.
You have a few options:
Freecad with Architecture workbenches.
Rhino (used by most architects for exploratory modelling)
*BlenderBIM (its called something else now)
If you're talking to architects and they're talking about Autocad, and lines...they may be of the old guard. Most large/modern projects are Revit based. TBH any engineering drafting in 2024 using autocad is ridiculous. Something which takes 1-2 hours in a parametric modeller can take a day! Co-ordinating architecture, project management, structural engineering, facade engineering, and MEP specialties is non existent in Autocad - Revit is built for this.
Revit is built to "know" and "understand"...is more or less the de-facto standard for building information modelling. If your pockets are deep enough - i'd recommend it - they have an LT (light) version which is more affordable and may do everything you want - but it's still pretty expensive for a fun little side project.
> If you're talking to architects and they're talking about Autocad, and lines...they may be of the old guard. [...] any engineering drafting in 2024 using autocad is ridiculous.
At least in my country, there are a lot of small-project architects.
You're converting a loft into a bedroom? Building an extension to your house? You'll need to do the calculations to make sure the beam holding up the roof is strong enough, and some paperwork so the inspector can see the calculations have been performed, and enough plans that the builders know what to build. Basic requirements that AutoCAD can take care of just fine.
And of course these small-project architects are the only architects 99% of people will ever work with - far fewer people will ever work with an architect on a 100+ person building.
I used Home Designer - https://www.homedesignersoftware.com/products/home-designer-... to draw a house we purchased (built in the 1970s) and the changes we intended to make during a remodel. The person reviewing my permit application was very impressed that I showed up with proper plans and not some kind of sketch done hastily on a napkin.
It definitely tries to think about walls, rooms, windows, floors as they are meant to be modeled. You can even get a materials estimate based on the properties of the wall.
I think a bigger problem with these DIY home design apps is that you have no idea which ones are worth using or not until you've already bought them and then run into a road block they couldn't fix.
Actually, there was a start-up a while back which developed a system for just that --- parameterizing house designs completely so that end-users could customize designs to their heart's content. If you look up "Flood Editor" it should take you to information on it.
Interestingly, the company founded by the guy who developed the nailing plate which arguably made McMansions possible was an early investor in CAD, spending ~$1 million for one of the first systems.
A bit of a tangent, but on your note amount multi-material being wasteful - you can improve that a lot by thinking ahead in your design and being strategic about where you use colour.
Your benchy is almost a worst-case scenario (which is likely intentional) - because the coloured features are vertical, there will be several changes per printed layer. If you can constrain your material changes to layer boundaries you'll get a much better waste ratio.
A good example of this is printing coloured labels/features on a faceplate. So you print the whole faceplate in a single material, then switch material and print the highlight colour as raised features. That gets you a lot of result for a single material change. (On single-material printers there's a method where you strategically pause the print and swap the materials by hand. Learning lessons from that will really hammer home the mindset of optimising tool changes!)
There's a lot of lessons like this you'll pick up, where making your design sympathetic to the print process can have huge payoffs.
I agree, designing for 3D printing and more specifically designing for multi-color or multi-material can help save a lot of time and material.
Additionally, printing any number of copies of the same multicolor object will result in the same amount of waste. This doesn't reduce the absolute amount of waste, just makes it a smaller % of the total material used.
Also worth looking into the "wipe into object" setting in the slicer, which will use the color changes in an extra model instead of purging them.
I bought a Stratasys J35 and its just a bucket to dump money into... I mean it can print absolutely tiny features but maintinance and consumables are so expensive.
Meanwhile my colleague bought a Bambu Carbon for I think 2% of the price of my J35 and its such a brilliant machine. Fillament printers just seem to be getting better and better.
So if you want (need) to create parametric CAD parts and can program this might interest you: https://cadquery.readthedocs.io/en/latest/quickstart.html#qu...
I e.g. used it to create parametric electronic parts for visualizations of printed circuit boards where modelling each slightly differently sized variant manually was too much effort.
I think CadQuery/Build123D are fine tools with much better abstractions than OpenSCAD. The latter is not, IMO, really a CAD tool at all; at no point does the Computer Aid the Design, in the CAD sense, whereas you can argue that the various OpenCascade code-CAD environments can at least expose generated geometry to code.
But the post is right: parametric GUI CAD is pretty much a visual analogue of functional programming. Once you get your head around the ways sketches or their equivalents can map onto existing geometry, a lot of the ways programmers think are very applicable to CAD.
You're basically working with a directed graph, which means you can do things like drive designs from parameter sets, or spreadsheets, and e.g. in FreeCA drive some variables from configuration tables (rows in a spreadsheet with different parameter sets) so you can make variations of objects.
As much as I think code-CAD has uses, especially perhaps for analysing and post-processing STEP files for download customisers, at this point someone with parametric CAD requirements should at least try a GUI CAD package like FreeCAD or any of the free/low-cost tiers of the commercial packages. FreeCAD can do OpenSCAD, and has a (verbose) Python layer, so it's accessible to code CAD.
The tools may initially be a little frustrating for programmers used to writing code, athough IMO less frustrating than the many quirks and significant limitations of OpenSCAD. But CAD methodology is logical and scaleable, and with a little learning you will be able to do things much more quickly and much less repetitively than OpenSCAD, which admittedly is a counterintuitive claim to a programmer.
I think programmers tend to think that GUI CAD must be to code-CAD what visual programming tools are to text IDEs: unnecessary fuss keeping you from the truth. But it's really not like that.
Best resources to get a feel of why programmatic parametric modeling is so interesting:
https://cq-warehouse.readthedocs.io/en/latest/fastener.html
https://bd-warehouse.readthedocs.io/en/latest/index.html
I worked alongside people using early versions of Makerbot and Ultimaker, and those were a maintenance nightmare. But recently I got a Kobra 2 Pro for $200, and it's both more capable and easier to use than those old monsters. With PLA it's pretty much hassle-free, no need to tweak anything except print orientation and maybe some support options.
Anyone who used Blender in the early days knows how far its come. FreeCAD is making that journey too. The 1.0 release is a big step. I use FreeCAD for all of my (admittedly amateur) CAD work. I've designed toys for my kid, props for my Christmas light setup, tool-holders, and any number of things I can't think of at the moment.
If anyone is finding FreeCAD hard to pick up, I highly recommend Mango Jelly's Youtube channel, which offers lots of really great tutorials on using it: https://www.youtube.com/@MangoJellySolutions
I print mostly practical parts so perfection isn't really needed but the finish has been great regardless. The only issues I have had is the bed eventually peeled up after enough PETG prints with no bed prep.
FreeCAD is capable and is indeed free, but as a beginner designing something somewhat complex it really led me into building a rat's nest of a project that I found difficult to salvage. The rough edges and general flaky behavior did not help things, and I found almost none of the user interface intuitive. If I had to do it over again I'd choose F360 or Onshape.
This is not a problem F360 shares, and that feature is what you pay for.
It seems to put off even people who are interested in learning CAD or are already familiar with CAD. It's telling that the best description people can come up with is "capable and free" instead of "easy to use".
> users who generate less than $1,000 USD in annual revenue and use for home-based, non-commercial projects only.
Which already makes it unsuitable for any Open Source work. While one might still accept those restrictions for quick one-off projects, those projects are also the ones that FreeCAD can handle fine.
I've had a 3D printer for a while, and I have to say that Bambu has completely changed my perspective on the whole experience.
Before, I treated it mostly as a time-consuming hobby - setting up my own Octopi for remote printing, tinkering with different settings and parts on my Prusa. It was all trial and error, with most prints turning out below average.
Now it feels more like a continuous integration system. It runs mostly unattended, always ready to execute my next batch of prints.
I recently traveled for a week and only needed my wife to refill the filament and remove finished prints, allowing my workflow to continue uninterrupted.
I don't regret my initial experience since I learned a lot, but I really appreciate having a more streamlined process now.
Even the Prusa MK3 (upgraded to MK3S, then MK3S+...) required a Raspberry Pi to be able to print without lugging an SD card from my PC to the printer, and a USB webcam to add print monitoring.
Now when people ask for FDM printer recommendations, I tell them that this hobby has two main paths: One path regards the printer as a tool to create things for other projects; the other path has the printer as the project itself.
An analogy I use is buying a car that's working and ready to drive vs buying a car that doesn't work and repairing it. Are you looking to drive or are you looking to fix/build a car?
Bambu printers are an easy recommendation for a printer which is a tool. The new Prusa CORE One might be a good fit as well, but it's still too early to tell what its quirks are. For printers that are projects, the Ender 3 comes to mind as a very cheap base for countless tinkering and upgrades.
This is undeniably true at the youtube content level.
But at the printer level I think consumers will crash into this far less if buying the latest. Creality’s three new Ender 3 V3 models are all low-tinkering models, even the cheapest. So are the Anycubics. Sovol’s latest machines like the SV06 Ace manage to be both fully open source and also highly tuned out of the box.
As much as I admire the build quality of (most of) the Bambu Lab machines, in real terms what they have actually achieved is making the closed source, closed build, hard to upgrade and repair, RFID-chipped-consumables printer acceptable to the market. They even almost succeeded in making printing dependent on the cloud, until their little distributed industrial accident happened.
Another way I can tell that Bambu changed everything is through second-hand market prices. Before Bambu, I could sell most 3D printers for not much less than I purchased them or more, depending on the mods. I just struggled to sell a Voron 2.4 300 for $800 (near $1800 build price after extras). There is still a market for enthusiast printers, but the leap in user-friendliness is known. What they provided for the cost was a vast market leap.
That's some sweet workflow optimisation. :)
I'd have tons more free time if I just outsource all the little tasks that keep me busy to my significant other.
You end up having to click and enter so many numbers if you need exact dimensions, so I'm planning on switching to cadquery.
It would be cool to make a framework for modifying cadquery code with natural language, for example "make box 1 and box 1 flush" or "create two concentric semi-spheres and subtract the smaller one from the larger one"
But idk, maybe once you're fast at fusion this kinda stuff is faster to hotkey than speak
The Spreadsheet module is awesome (particularly configuration tables, which I used even in one of my first serious designs) but I still don't really know why my model has to recalculate because I changed the background colour in a cell. That seems to me to be unnecessarily deep integration.
Coming at the problem from another end, I have have been designing dream houses as a hobby but have been struggling and frustrated by the current CAD and 3D editors.
There are a lot of drawing-house-plans apps like SweetHome3D and Homestyler etc, and they are all really good at getting some wall lines down quickly, but quickly start to get hard to do anything advanced and all give up on real roofs and attics.
From the other end there is Sketchup, which is both good and easy yet also difficult to control.
The general advice for people wanting to see a house design in 3D is to draw the plan in some house plan software then save that as a jpg and import that into sketchup and then to build the walls on top of the drawing etc.
Of course, being a programmer, I had some ideas... and have about a dozen abandoned starts on a house drawing program that actually understands that 'this is a wall, and this is how thick walls are' etc.
The openscad approach is good and I have some routines that do sensible tricky roofing angles and things, but you can't really go and and parameterise whole houses. Its a nut that still hasn't cracked.
I've watched and talked with a lot of architects and tbh they are sketching and treating their CAD as a bunch of lines rather than the CAD knowing what walls and beams really are.
If you're talking to architects and they're talking about Autocad, and lines...they may be of the old guard. Most large/modern projects are Revit based. TBH any engineering drafting in 2024 using autocad is ridiculous. Something which takes 1-2 hours in a parametric modeller can take a day! Co-ordinating architecture, project management, structural engineering, facade engineering, and MEP specialties is non existent in Autocad - Revit is built for this.
Revit is built to "know" and "understand"...is more or less the de-facto standard for building information modelling. If your pockets are deep enough - i'd recommend it - they have an LT (light) version which is more affordable and may do everything you want - but it's still pretty expensive for a fun little side project.
At least in my country, there are a lot of small-project architects.
You're converting a loft into a bedroom? Building an extension to your house? You'll need to do the calculations to make sure the beam holding up the roof is strong enough, and some paperwork so the inspector can see the calculations have been performed, and enough plans that the builders know what to build. Basic requirements that AutoCAD can take care of just fine.
And of course these small-project architects are the only architects 99% of people will ever work with - far fewer people will ever work with an architect on a 100+ person building.
It definitely tries to think about walls, rooms, windows, floors as they are meant to be modeled. You can even get a materials estimate based on the properties of the wall.
Interestingly, the company founded by the guy who developed the nailing plate which arguably made McMansions possible was an early investor in CAD, spending ~$1 million for one of the first systems.
Your benchy is almost a worst-case scenario (which is likely intentional) - because the coloured features are vertical, there will be several changes per printed layer. If you can constrain your material changes to layer boundaries you'll get a much better waste ratio.
A good example of this is printing coloured labels/features on a faceplate. So you print the whole faceplate in a single material, then switch material and print the highlight colour as raised features. That gets you a lot of result for a single material change. (On single-material printers there's a method where you strategically pause the print and swap the materials by hand. Learning lessons from that will really hammer home the mindset of optimising tool changes!)
There's a lot of lessons like this you'll pick up, where making your design sympathetic to the print process can have huge payoffs.
Additionally, printing any number of copies of the same multicolor object will result in the same amount of waste. This doesn't reduce the absolute amount of waste, just makes it a smaller % of the total material used.
Also worth looking into the "wipe into object" setting in the slicer, which will use the color changes in an extra model instead of purging them.
It's a little rough but I was able to get it to do what I needed it to! Here's my code: https://github.com/freeqaz/light-coil-model
Let me know if you want one. They're pretty rad!
Notably worse at the act of 'slinking'. Would tangle like no other!
Meanwhile my colleague bought a Bambu Carbon for I think 2% of the price of my J35 and its such a brilliant machine. Fillament printers just seem to be getting better and better.