autocad and solidworks
werner at almesberger.net
Wed Aug 24 07:02:18 EDT 2011
Jon Phillips wrote:
> What would be the closest free software equivalents to Autocad and
> solidworks, the solid modeller?
For 2D, QCad seems to be a highly popular choice. I don't particular
like it, because it's not parametric. So if you develop a design
interactively, you'll go back and forth a lot. If you're capturing
an existing design, it may work well, though.
For parametric 2D work, I sometimes abuse fped. Or if it's something
too complicated for fped, I write a script that outputs paths in
gnuplot style. These are easy to process and the various tools I've
written for massaging CNC data use some variant of gnuplot.
For 3D, the choice is hard. Again, lots of the programs are not
parametric. A while ago, I looked at Art of Illusion, Wings 3D, and
HeeksCAD. They all have nice GUIs and are okay for some simple work,
but they don't preserve the construction process. So if you decide
to make, say, the basic shape everything else attaches to a little
larger, you have to manually play back all the construction steps.
I haven't tried FreeCAD yet. There are also some more obscure CAD
systems, including BRL-CAD.
For the Ben counterweight, I ended up using HeeksCAD with the
scripting extension HeeksPython, which then provides the ability to
model in a parametric way. HeeksCAD also has an extension called
HeeksCNC to generate machining instructions.
HeeksCAD also has some extensions that allow more advances
parametric modeling, such as an equation solver that lets you define
some goals and it then numerically adjusts a set of parameters until
these goals are met. I haven't used this yet.
I don't know of any 3D CAD that tightly integrates a programmatic
approach with a GUI, like fped does. In fped, all the dimensions
come from the keyboard and the logical structure is defined with the
mouse. That is, if you choose GUI mode. You can also use it
non-interactively, much like a compiler.
Which brings us to scripted CAD/modeling systems. There are
basically try types: the ones that have their own language, like
OpenSCAD or POV-Ray, and the ones that build upon an existing
scripting language, usually Python.
I've used POV-Ray in the past and liked it so far, but it has
licensing issues. I've also experimented with OpenSCAD and
OpenSCAD has a very nice interactive development environment. You
still do the usual edit-compile-run cycle, that is
edit-render-display. One weakness of OpenSCAD is that the CSG
engine (OpenCSG) is very unforgiving about numerical errors.
E.g., as a 2D example, if fuse a triangle (0, 0)-(1, 0)-(0, 1) with
a triangle (1, 0)-(1, 1)-(0, 1), do you get a square or still two
triangles with an infinitely small gap between them ? With OpenCSG,
both outcomes are possible. Even better, it may fuse them partially
and you get a very narrow "fjord" some distance into the
Similarly, if you subtract one of the above triangles from a unit
square, you may not get just a triangle as you'd expect, but also
two very narrow critters on the sides that should have disappeared.
If you translate this to 3D, these narrow critters would be faces,
so the result may just look like before, with a hollow inside. Or
maybe with the hollow partially covered.
Programs used for further processing, such as MeshLab or a converter
for machining may have their own misgivings about such artefacts.
In OpenSCAD, you can solve such issues by introducing small overlaps
where rounding errors may leave behind artefacts, but it's tedious
work to instrument your model this way.
Cadmium uses Open CASCADE that seems to have a better idea of what
output people expect and doesn't produce such artefacts. Its
drawback is slowness.
See also this thread for OpenSCAD vs. Cadmium details and a lot
All the scripted 3D systems (HeeksCAD, OpenCAD, Cadmium, etc.) I've
seen so far expect the user to do the math and to provide just
coordinates. They don't have concepts like calculating a tangent,
although the ones written for sufficiently powerful scripting
languages could be extended in this direction.
Alas, they also don't have things like chamfering or filleting. In
the case of HeeksPython, the HeeksCAD GUI would have such things.
When the geometry gets tricky, I often resort to just writing my own
scripts. E.g., here:
The output is this:
None of the above 3D CAD systems makes me feel confident that I'd be
able to do a real product-oriented design without tripping over some
of its limitations sooner or later. I've started to experiment with
extruding 2D polylines along 2D polyline paths in combination with
smoothing (this prouces the chamfers and fillets), as opposed to
constructing things from basic solids, but that's still in progress:
The Blender controls make me feel like being given the task of
flying the Vogon variant of a 747 while hung upside down from the
cockpit ceiling. I haven't been able to figure out how to do things
beyond a "hello world" cube with it, nor can I tell if it does any
of the basic tasks better than the others.
More information about the discussion