- Way more functionality - STEP support - Constraint solver
Also it's much more point-and-clicky, in the same way Fusion is, so it's much less confusing for a Fusion user to transition to FreeCAD rather than OpenSCAD. That said, OpenSCAD is phenomenally powerful, it just requires you to think in a particular way. I happen to enjoy thinking that way and most of what I make ends up being OpenSCAD. I mostly use OpenSCAD to design parts, and FreeCAD to design assemblies and integrate parts into existing things.
If you're looking for an intermediate thing, check out cadquery, which uses the same geometry engine as FreeCAD but has a very OpenSCAD-like feel and language to it.
Any warnings before I invest time learning it?
(Btw what’s the best way to edit an existing stl? I want to cut out the middle of a piece and pull the two halves together.)
Openscad is the best for working with existing STLs. Say you have a centered 30x10x10 mm part and you want to remove the central 10mm. My strategy could be:
1. import the part, translate it by 5mm in positive x direction, and subtract from it a centered cube larger than the part that is moved in positive x direction so that it ends at x=0:
difference(){
translate([5,0,0])import("file.stl");
translate([16,0,0])cube([32,12,12],center=true);
}
2. import the part again, translate it by 5mm in negative x direction, and subtract from it a centered cube larger than the part that is moved in negative x direction so that it ends at x=0. Because this is so similar, you can reuse the code: for(dir=[-1,1])difference(){
translate([dir*5,0,0])import("file.stl");
translate([dir*16,0,0])cube([32,12,12],center=true);
}
3. Make a watertight join between the two - you want to make sure the two shapes overlap a tiny bit. So we change the cut cube to be out of the origin line by 0.05mm: for(dir=[-1,1])difference(){
translate([dir*5,0,0])import("file.stl");
translate([dir*(16-0.05),0,0])cube([32,12,12],center=true);
}
protip: prefix a negative shape with # to see it in the preview - like in the above replace cube with #cube // Outer box depth
boxDepth = 60;
// Lid height
lidHeight = 10;
module closeTab() {
translate([-5, boxDepth/2+1, lidHeight-5]) {
rotate(a=[180, 0, 0]) rotate(a=[0, 90, 0]) linear_extrude(height=10) polygon(points=[[10, -1], [9, 2.5], [8, 2.5], [7.5, 1], [-1, 1], [3, -1]]);
}
}
OpenSCAD itself just visualizes these and allows you to easily set parameters via a GUI. IMO this approach does not work for more complex models, makes small iterations much much slower. The difference between F360 and OpenSCAD is huge, its like comparing Paint to Photoshop.https://en.wikibooks.org/wiki/OpenSCAD_Tutorial/Chapter_1
...that seems like a low-level way to describe relations between the primitives. It reminds me of the coordinate virus:
http://geocalc.clas.asu.edu/pdf/MathViruses.pdf
...hope that doesn't seem too negative. To put it another way, openscad seems like the C of geometric modeling, lowish level, procedural. Is there a Prolog or Haskell of 3D modeling?
OpenSCAD is the Prolog of 3D. It only looks C-ish but it isn't actually imperative which burns some people thinking that variable assignments are sequential.
I learned enough of OpenScad to create simple models but if I need something complex (and especially models that move), I used Fusion 360. I knew that it would cost $60 a month to me at some point and will need to evaluate if it is worth that much to me. While it's not pleasant to get something for free and then have to pay for it, it's not the first time it's happened and won't be the last.
* Openscad is unitless (lengths are like "1", not "1mm").
* Even simple fillets (rounded edges) are so annoying in openscad people leave them out. In Freecad you click the edge and click fillet, and it works even in complicated cases (e.g. multiple fillets overlapping).
* Freecad's constraint solving based approach tends to make your models easier to change than Openscad's scripting approach. In theory, openscad's approach is superior. But you would have to derive and write down the formulas for every parameter of every part, and so in practice you'll end up with too many hardcoded numbers, and your model won't be that easy to change. Changing where the constraints are (e.g. tube inner/outer diameter vs inner & thickness) is also easier in Freecad - especially when parts depend on each other.
* Freecad makes it easy to go back and forth between 2D and 3D drawings. Super useful.
It's like comparing Notepad++ to VS Code. They're both quality text editors. That's missing the point.
For hobby 3d printing (realistically that's 90% of why hobbyists are interested in CAD now, right?) I would recommend to learn both. OpenScad is very very fast to learn (like 1 hour for the concepts for someone who is already a programmer in any language, then you are good with the official cheatsheet) and nothing beats it for simple geometric one off models that you can write down in a few minutes. Freecad for anything beyond.
Also, if you need a simple but nice, easy and free 2D only CAD (e.g. for CNC milling or laser cutting - the type of work people abuse Inkscape for), check out Librecad. (Also check out qcad, the now commercial again product it's forked from. Credit where it's due and such.)
Freecad also aims to eventually become a complete suite. Qcad and Openscad only handle the CAD part. Freecad for example has a finite element method simulation that can be used to analyze stress. Freecad also has a CAM module (CAD is how the finished part should be, CAM is how you machine it. Like when you CNC mill, which tools, at what RPM, feed rate and turn direction, along which paths. Obviously for 3D printing it doesn't matter what Freecad has because you'll use a specialized tool like Cura (free) or Simplify3D (commercial) anyway.)
OpenSCAD is constructive solid geometry and you write a script then render it. You can essentially only create STL geometries with OpenSCAD, if you just plan to model and 3D print single parts OpenSCAD might be sufficient, anything more complex, particularly assemblies with multiple parts and you'll need a different CAD platform.
In general parametric modeling is far more popular it's how solidworks, onshape, fusion360, etc. work.
Initially I watched a couple youtube videos and since then have created a few dozen things in fusion360 with little effort, rarely bumping into problems I couldn't solve without reading forums/etc to find other peoples solutions.
So, IMHO I _REALLY_ want an opensource solidworks/fusion360/etc competitor but at the moment its just not there yet. From the video's it looks like it should be, but once you start using it, its an endless ball of frustration.