I recently built a printer and started to print things. OpenSCAD was the first software I reached because I’m developer and writing code felt natural for me. But it took so much time and result was kind of hard to understand and change.
Then I moved to FreeCAD, learned about parametric modelling and it was like the whole other world. I was like 10x more productive compared to OpenSCAD and result was easy to change and adapt.
Then I moved to Fusion and from that point I think that I’ve found a sweet spot, Fusion is similar to FreeCAD, but feels much more polished.
FWIW, I went through the exact opposite progression of what you described (Fusion->FreeCAD->OpenSCAD), and I liked OpenSCAD the best. I feel like I've gotten good models out of it, and have done elaborate enough stuff in the process.
I prefer the style of OpenSCAD but I’ve found that there are certain things that the software just is either really hard to achieve or incapable of doing entirely. One recent example is that I was designing a part for injection molding and I needed to add a draft angle to the part. This seemingly simple operation is rather trivial to do in FreeCAD and Fusion 360. It is not at all trivial in OpenSCAD.
Another example of OpenSCAD’s limitations is the render time for parts produced by boolean operations which this change purportedly helps a lot with. But there is also still not a guarantee that the output of those boolean operations is actually a manifold object. Slicers these days are actually quite good at repairing geometry but even with a moderately complex part produced by boolean operations (in my case it was often one that required subtraction of cylinders across multiple pieces of an object) I found OpenSCAD’s output to produce some bizarre issues with geometry that even the slicer could not repair very well.
I too like OpenSCAD the best and often find myself more productive in it than other pieces of software, especially for simple models. But for complex models it can’t really hold up to the more traditional parametric modeling software (yet)
I only experienced issues with OpenSCADs STLs if I used `difference()` with overlapping surfaces (aka when it flickers in the preview). Even then the slicer's repair feature fixed it.
For me the main limitation in OpenSCAD is the UI: distance labels along the XYZ axes are unreadable when they overlap with a surface, transparency only works with one object at a time. Also I'd love highlighted edges in the preview & split view, it would make alignment of parts so much easier.
Still I'm so much more productive in it than e.g. FreeCAD because I have most of what I need memorized and the rest can be looked up on the one-page cheatsheet.
Some tasks are extremely easy in OpenSCAD. Fusion is not that hard either, but it is a commercial tool with a free-ish version where they keep your designs hostage. It doesn't run on Linux which makes life hard for multi platform folks. Also, in past I have had issues with STL generated by Fusion.
OpenSCAD is not perfect though, for example is missing important functions such as alignment and assembly
I've actually had issues with STLs generated with OpenSCAD more than Fusion; to a point where I've had to import the OpenSCAD code into the FreeCAD OpenSCAD module and use FreeCADs STL export to get it working.
99% of the time I don't have to deal with that, but that 1% is pretty annoying.
> One thing Autodesk is truly infamous for industry-wide is being the utter worst when it comes to file formats.
While that is true, the fact remains that there is no industry standard file format for exchanging parametric CAD models.
Everything is proprietary. I.e. if you export in something you can import elsewhere you need to 'bake' parameters into geometry.
This is not a problem Autodesk created.
And while it may be true that it is also not in their best interest to solve it this is not a good excuse to bash them over adding yet another proprietary parametric format to the list for their flavor of such modeler.
It is one of the things asked ("import it into blender"), sort of (yeah of course you have to export in advance using the original software). Mesh export is of course the most basic feature everything can do.
B-rep solid export (STEP) is also very much a thing, you can exchange solid models between Fusion, SOLIDworks, FreeCAD, etc. (and import them from PCB design software and so on)
But this is just baked geometry of course. It's not parametric. There is no standard for parametric models, there is no way to exchange them between different programs.
It's a tricky problem because "parametric" is a very broad term. You'd need to agree on a full set of primitives, parameters and modifiers and further innovation would be tricky without "baking in" or converting to a less parametric form.
Vector drawing software faces a similar problem. There's some agreed primitives but often you just get bezier soup.
> There is no standard for parametric models, there is no way to exchange them between different programs.
This is apologism.
If their parametric export format was documented readable ascii text, there would be an entire ecosystem of 3rd party tool taking care of connecting it to other things.
Even better, if there was a push from them to design a standard for this, this would benefit the entire CAD/CAM/manufacturing industry.
But AutoDesk's mindset is the walled garden / captive audience business model.
The fact that creating open standards around their file format would actually benefit their business is simply something that's completely impossible to understand at the corporate culture level.
There have been licence issues where, IIRC, your subscription ends and you’re not allowed to access your files even to export them. To get access back, you need to renew your subscription.
> Then I moved to Fusion and from that point I think that I’ve found a sweet spot
Alternative viewpoint:
1) It depends on the kind of object you want to model: for simple, geometric shapes, OpenSCAD is by far the best choice. Unless you don't know how to code, in which case it's unusable.
2) When you start to need chamfers and fillets, OpenSCAD simply doesn't work and Fusion is by far the superior solution. Also, if your model starts to become really complex (lots of boolean), OpenSCAD becomes very slow and eventually unusable, even with the change described by the OP.
3) If you need to model organic shapes neither freecad, fusion or OpenSCAD are unusable. Blender is way better for this use case.
4) If you are a programmer and enjoy building truly parametric models, as in: models that you can build with scripts and Makefiles, then neither freecad nor fusion are a fit. Cadquery is slowly getting to the sweet spot OpenScad occupies, but it's not there yet.
5) Fusion is proprietary, closed-source and costs money. Worse, you are basically at the mercy of the vendor. In particular, it's a complete black box: there is exactly zero guarantees that your carefully crafted model will still work 10 years down the road.
6) Freecad's UI is basically a nightmare and the CAD engine (the terminolgy in the CAD world for some reason it is called the "kernel") is the same that cadquery uses, and it's an old and clunky NURBS engine called OpenCascade (if I'm not mistaken). It is definitely not up to par with Fusion's engine.
7) Fusion is lousy at talking to the rest of the ecosystem. Proprietary and opaque file format that no other product outside of the AutoDesk ecosystem can read, lousy at reading things created with other softwares.
True. Well, it is usable, you can model a whole 3D printer or a (BIM) house or whatever in FreeCAD, people have done big projects with it. But OpenCASCADE really likes to give up (or even crash) on fillets >_<
It's supposed to really shine with procedurally generated geometry, like fractals, where code really is a more efficient way to describe your object. Some people are also more comfortable describing things with code, so it's useful to them.
It might be best to think of it as a platypus: An interesting element of the ecosystem, but disappointing if you need a duck.
I learned OpenSCAD over the course of a few afternoons, and I'm good enough to get designs for most of the stuff I need. It's really straightforward to get started, so it's definitely worth checking out. The only complaint I've had is that there's not built-in bezier curves, so sometimes you need to spoof things with a bunch of lines or truncating circles.
I personally like the code based system, even when it's "harder" simply because it's easy to plop this into version control.
For me, it's VCS friendliness. Try checking a .fcstd file into git and see what changed between commits.
Also, it's extremely reassuring to have a description of your model that wasn't generated by a program. In earlier versions of FreeCAD, my model would often not be saved correctly and be totally broken when I opened it again. FreeCAD also crashed randomly on me quite often. In contrast, all you need for editing .scad files is a text editor, and that probably won't crash that often. :)
> FreeCAD files are nothing more than zip files containing text documents
That’s good to know. Though the fact that they’re zipped probably means they are not meant for humans to read anyway. Also, I don’t think GitHub or GitLab supports custom diff tools right now, and you would need that to do actual code reviews.
Having 3D objects described in a text based environment is the idea. That way you can version them with git. It is also focused on supporting Volumetric modeling of 3d objects, rather than simply being CSG based like most CAD software, even though it takes that approach for simple objects.
It is really a product of open source 3d printers who were seeking a way to describe complex 3d objects, reliably version them, and then spread them around the internet.
It's a cool idea, but it's toolchain has always been sub par. It is my understanding that most of the people working on it are more concerned with getting it good enough, and the bulk of their development energy on 3d printing slicing engines. But I wouldn't want to use OpenSCAD to do any traditional design work or drafting, or really even to design any object that will have to be made with subtractive manufacturing. It's a happy medium that FreeCAD has an OpenSCAD workbench - that way you can do the complicated stuff directly in OpenSCAD for 3D printed parts, and then include them in your FreeCAD assemblies.
Broom holder. You can't share an STL that will fit every possible broom diameter. But what you can do is programmatically generate one, and let the users change the variables.
I think it depends on the complexity of what you want to model. Lots of 3D printing prototyping is relatively simple shapes, in which case OpenSCAD is quite nice.
This is exciting news. And I enjoyed to learn that some investigation on adding parallelism has been done. OpenSCAD is my main design driver, so when I hit these performance corners, it'd drive me nuts.
Definitely, but I also consider that a good thing. What I really never liked about most tools for creating media is they try and do way too much. My mindset is close to that of UNIX philosophy, thus I like that out of all the 3D/CAD tools I've used, OpenSCAD pretty much does one thing out of the box... and does it adequately. I like that it doesn't pretend it can do everything I want, but when there's something I need it to do, like add threads or screws to a project, there's probably a library for that because OpenSCAD is already code-oriented rather than the code coming second.
dotSCAD looks dope! I hadn't heard of it, but now I know what I'll be playing with next time I spin up my 3D printer.
Same here. I was experimenting with 3d printing stamps (like for ink) with flexible filament from 2-color raster images, and the render time just for that was about 15 or 20 minutes per step. I will definitely need to download this.
Complete aside, but I've actually found that printing stamps in plain PLA and then flattening them off with sandpaper on a flat surface provides better results than using flexible filament (TPU in my case).
Yeah, I thought that rendering a 1000x1000 surface for a dimensional wall hanging should be no problem, but OpenSCAD gobbled up 16GB of memory and then crashed.
I would also love for it to have a variable that rounds off corners to some diameter on the cubes, cylinders, and even polyhedrons. It's possible to round off corners using the intersection operator but it is a lot of work and something that I do in almost everything I build. Nobody likes unnecessary sharp corners.
Best tool for boolean geometry I’ve personally used. I’ve had many more successful 3D prints than any of the point-and-click CAD tools in which I have also spent hundreds of hours.
But with ADHD tendencies, the rendering time of OpenSCAD often had me getting distracted and forgetting to finish whatever I was doing for a while.
1) Blender is a general purpose 3D tool, and many things that you need for CAD aren't there. Fillets, Chamfers and a robust boolean engine are missing. Also, when you do things in Blender, everything is geared towards how it will look, not towards making sure that things fit each other precisely. For example, getting blender to place an object 3.4mm off the face of a rotated cube along the normal of that face and rotated 33 degrees around that normal is possible, but really not easy.
2) It can be programmed via python, but it isn't the core use case and for programming 3D models using blender, a) the learning curve is very steep b) the resulting code is very verbose because the API wasn't really designed for this use case. c) there is almost no documentation and very little examples of parametric modeling using the blender python API available on the internets.
3) the boolean engine in blender is fast, but it is far less robust than the one in openscad (CGAL-based) and will often simply refuse to produce a model for reasons that are entirely obscure.
4) Even with the newer geometry node engine, Blender is basically centered around a destructive workflow (early steps in the construction of a model can only be changed via undo/redo), and building paramatric models is really not easy unless you get down to the python API.
But of course using a mesh modeling engine for CAD is not the best idea. You generally do want to work in B-rep, if not for precision then for exchange reasons (e.g. export electronic component models as STEP to add to PCB software, import a whole board STEP model from PCB software to build a case for the board)
Preach! (I shortened my comment to make it more pithy, had a lot of those same thoughts, and appreciate how you fleshed them out!)
5. I write my own blender plugins quite often, and they break with my next `git pull`. Blender moves fast and breaks things ;)
I do python professionally and gamedev 3D/VR stuff as a side piece. I spent 5 hours in blender tonight trying to bake an alpha channel. Something I’ve done before.
It’s a nightmare to maintain a blender plugin. Because (as you point out) blender is opensource clay, not a surgical scalpel. OpenSCAD is a precision knife.
No idea. When I multiply all $fn by 10, the render takes between 50 and 200 percent of the original render time or else the program crashes. In any case, the new flags make renders wicked fast.
Sweet. I use OpenSCAD for my models and it’s been really cool. Wish I was better after designing more organic looking shapes but lost times I need simple objects anyways so it doesn’t matter as much.
Interesting stuff! Does anyone here have recommended learning resources for openSCAD? Have used creo but minimally, as a hobbyist. Would be fun to build enclosures for some Eagle boards.
64-bit doubles are not good enough for a production cad system. Many operations, including CSG, may require much more precise numbers to resolve the question of if and how things intersect, if surfaces remain manifold or fail to be orientable, and on and on.
Those things needing (to be careful) arbitrary precision can sometimes be truncated back to 64 bit doubles, as long as necessary invariants are maintained.
A simple example: suppose you have a shape at the origin, that is designed for careful CNC, so maybe 1/10,000th of an inch or maybe even 1/100,000th of an inch accuracy. Suppose 1/10,000th accuracy is, say, ~14 bits of mantissa, then making the part 16 inches long is another 4 bits. We're up to 28 bits. Now suppose you do an operation, like intersection with another such part, or a fillet or rounding, whose computation merely needs to square numbers. Now you need 28*28 bits, anf you overflow the mantissa. Or move the part out to coordinate 64, uses another 6 bits. And god forbid you hit an algorithm that needs to cube numbers, which triples the number of bits you need in order to retain accuracy needed for the final part to meet tolerances.
113 bits will still fail on iterative processes. If you dig into probably any of the robust kernels of things like parametric modelers, they all need these methods. The above example I gave is terribly naive: things get vastly worse.
Above was only position. Now build in Bezier surfaces, or better yet, NURBs so you can do true conics as well as crazy freeform surfaces.
Now compute the intersection of such objects. These intersections require very high degree polynomial representations. Now repeat.
If you quantize points on the intersection curves too much, you'll get all sorts of pathologies, things doubling back, near singularities ..
The way to deal with this flawlessly is to allow whatever precision is needed to prove necessary constraints are met.
A good lib would use each representation as needed: double, libdouble, liquid, liboct, etc. as needed, and eventually arbitrary precision. I've written several systems that do such over my career. It's a cool space
A nice simple place to try this is to make an arbitrary precision Mandelbrot zoomer that switches underlying types as needed for precision.
It's much more fun to make these work on various AVX flavors, or on GPUs. All are doable.
> I would think that 64-bit doubles would be good enough.
Implementing robust boolean operations on polyhedral geometry is and has been known for quite a while to be very hard if you do not have arbitrary precision math, or at the very least some sort of interval arithmetic that kind winds back a calculation and increases the precision up to the point where an unambiguous decision can be made about the sign of an expression.
Here's an example: create a sphere, tesselate it to - say - a million triangle (not much these days), make a rotated copy of the original by 0.01 degrees and intersect with the original. I guarantee you the resulting calculation will either crash your floating point based implementation or it'll produce a model that will be non manifold.
I used to watch that get better in each release of Autodesk Inventor.
A useful test is to model a bolt. Make a cylinder. Make a 2D cutting tool that has one thread profile. Extrude the thread profile along a spiral. Subtract that from the cylinder. Now you have a threaded rod. Now make a 2D hexagon for the bolt head. Extrude. Union with cylinder. Now chamfer all edges of the bolt head. Also chamfer the end of the bolt.
Now take a close look at where the threads meet the bolt head, and where the threads meet the chamfer. If those are all correct, then you have a usable CSG CAD system for machined parts. Inventor started getting that right around 2012.
Admittedly, you don't usually model threads at that level of detail. Inventor has "cosmetic threads", which are just textures, which is what you use for ordinary bolts.
This is mostly an exercise for CAD operators. It's like whiteboarding for programmers. You sit the applicant down at a workstation, hand them a bolt and calipers, and say "model this". Sometimes you do need that kind of detail, because you're going to have a machine tool machine the thing.
Fusion 360 handles this perfectly. In fact it has thread creation directly built in (both textured and modelled explicitly). I recently needed to make a nut for a specific thread, and did it by subtracting the thread from a volume. If you're careful you can inspect the results and see how to offset the thread slightly to move from a too-tight fit to a simple press fit.
Fusion 360 is the same CSG engine as Inventor. It just has fewer features and is tied to "the cloud".
Inventor has pro features such as "would you like a finite element analysis of the weak points in that", and "Warning - gear tooth counts are not relatively prime and may result in uneven wear".
Bearer of bad news here: I've tried this on a model I had lying around, and ... :-\
box.scad is an old, somewhat complicated electronics enclosure where I experimented with building a non-trivial, fully filleted model with scad.
The model has quite a lot of "natural" booleans (eg holes and such), but also, the fillets are implemented either:
- with a ton of procedurally generated minkowski sums (offsets) combined with booleans.
- with hulls of far-apart spheres
TL;DR:
as far as I can tell, fast-csg does not render the model properly :-(
speedup with fast-csg is decent (~5x) only at very low $fn
speedup is entirely underwhelming when $fn gets high
minkowski offsets likely gobble up the bulk of the render time
This also made it very clear that render times aren't linear at all when $fn grows, and this is both true for traditional openscad and fast-csg.
Your mileage may get much better if you steer clear of hulls and minkowski sums, and to be fair, I'd need to run a benchmark with no minkski in it.
Benchmark:
old : time openscad -o z.stl box.scad
new : time openscad-nightly --enable fast-csg -o z.stl box.scad
$fn = 5
old = 6.8 sec
new --enable fast-csg = 1.2 sec
x 5.6
$fn = 10
old = 15 sec
new --enable fast-csg = 3 sec
x 5
$fn = 20
old = 67 sec
new --enable fast-csg = 25 sec
x 2.68
$fn = 40
old = 427 sec
new --enable fast-csg = 369 sec
x 1.15
Procedural nodes are a very welcome addition to Blender, and you can do very fun things with them, but they are absolutely no substitute for actual code.
Specifically these are hard to do with nodes:
- for loops
- if <complex condition is met> do this else do that, where <complex condition> requires to look at the evaluated output of an upstream node.
- recursion
- global variables
- self introspection
- accessing things by name rather than painfully dragging noodles from one point to the next
In general, node-based interfaces (Houdini, Blender, etc...) get absolutely impenetrable once your project gets very large.
They all have that subtle APL-like write-once-read-never feel.
In my experience large code bases are way easier to navigate, refactor, change, test, debug than large node-based models, even when you take care of organizing your node hierarchically.
With OpenSCAD your script is the model - there are no mouse-based modeling tools like you might be used to with Blender or other 3D software. The closest comparison I can think of is if each of Blender's geometry nodes were a single line of code.
You can view the source of each node in Blender, but that’s not the point. Writing a script is not fundamentally different form connecting nodes in geometry nodes and entering attributes.
What I’m asking is how do the output and performance differ.
It most definitely is fundamentally different than dragging points around with your mouse. You can use recursion and complex maths. Plus, the way you approach designing an object is very different from doing traditional 3d modeling. Professional developers who excel at architecture and code organization will have a much easier time completing complex objects than someone more green.
You should play around with it to find out. You will be disappointed though, because you're looking to compare a fish with a horse in a race.
This is incredibly accurate. Once I learned OpenSCAD my entire process of thinking about physical design via computer aided tools disappeared. Gone is the process of memorizing dozens of shortcut, hundreds of menus and painstakingly selecting items and entering values into fields or dialog boxes. Instead I can create in just minutes what would take a huge breadth of knowledge to do using conventional point-and-click interfaces.
There are some places where the point-and-click UI makes sense. For example I like how I can layout the parts on a simulated baseplate with Cura. But there is really no design or thought into that process. Just slap them onto the plate in a way they won't overlap and I'm done.
I had the same experience. I tried OpenSCAD after trying and discussing pretty much every other piece of CAD software that would run on Linux. FreeCAD's UI feels like a hot mess and Blender's UI is for power users only (plus Blender isn't really designed around creating physical objects based on specific dimensions).
The new geometry nodes aren't dragging points around with your mouse, your are procedurally constructing a mesh using blender's different nodes (i.e, functions) I've used both OpenSCAD and Blender and can say that geometry nodes feel similar to OpenSCAD.
However I prefer to use the python scripting API in blender.
Either way it is important to point out that OpenSCAD is more for CSG, while blender is for surface modeling. If you are intending to 3D print your models you will ultimately need to get them in a mesh format so I see no problem using a mesh format from the get go.
Thank you, you articulated that better than I could.
I've used a wide range of CAD software over the years, and they're often a clunky mess. OpenSCAD is something I'd like to explore but if I could achieve much the same outcome with Blender, which I know quite well then it may not be worth the effort.
I've used the python API a lot and now I'm getting excited by Geometry Nodes.
> What I’m asking is how do the output and performance differ.
From a non-technical perspective I was able to do (reasonably?) complex part design with almost no prior experience in about 3 days of work. This included debugging the model code, introducing various enhancements after realizing I would need them, completely changing the design a couple times after running real-world measurements.
In blender, based upon past experience, I would have spent a week just figuring out how to do all that. Sure there is code and the like, but how easy is it to hook that up to your external editor? How well does the refresh cycle work? (Hint - in OpenSCAD it just worked and I could use my editor of choice on a second screen monitor).
So the non-technical performance is pretty great. The technical "how fast does it go" - I'm not sure but I suspect Blender uses GMP under the hood as well, at that point it is somewhat arbitrary. I dont think the tooling is geared towards doing model designs, I get the impression FreeCAD is more the SolidWorks contender - which is next on my list to evaluate. Thanks for the tip about geometry nodes though!
awesome, I have commits in there and used it many years ago for this project: https://github.com/jtoy/sensenet
I used it to generates 10s of thousands of models for machine learning research
OpenSCAD is such a poor choice of words. You see, it's too close to something else entirely, that when people will hit a roadblock, which can happen when you learn a new application, that it just comes naturally when you swear. Perhaps the authors of this application might consider replacing the "S" with something else?
I recently built a printer and started to print things. OpenSCAD was the first software I reached because I’m developer and writing code felt natural for me. But it took so much time and result was kind of hard to understand and change.
Then I moved to FreeCAD, learned about parametric modelling and it was like the whole other world. I was like 10x more productive compared to OpenSCAD and result was easy to change and adapt.
Then I moved to Fusion and from that point I think that I’ve found a sweet spot, Fusion is similar to FreeCAD, but feels much more polished.