I’d really like to see something like blender come for the 3D CAD industry, at the moment it feels like the only people who would lose out are AutoDesk. The amount of money that flows in and out of 3D cad (as subscription and then value created) having a first class open source kernel and tooling, would be giving big industrial players freedom to modify and tailor to their needs as well as smaller / hobbyists get started for free!
Probably requires something that is almost there then a sponsor(s) to throw in developers or funding to get the rest of the way. On the EDA side CERN did a lot to lift Kicad to the point of being a credible alternative that could breakthrough like Blender. Both those projects are over 30 years old and for a lot of that time were dismissed as too difficult to use or lacking in features. FreeCAD is only 23 years old. I don't know what the code base is like but if a large org put a couple of good devs into it for a few years who knows.
It must be difficult when so much management is short sighted and focused on delivering short term profits for shareholders. Even academia is run like a business now.
Unless a privately held rogue company like Valve got interested its probably going to have to wait for a government/ngo/scientific. Industry, particularly the tech industry, is notorious for leaching of free and open source software and in some cases building entire businesses on it and not giving back.
> It must be difficult when so much management is short sighted and focused on delivering short term profits for shareholders. Even academia is run like a business now.
Management just reacts to environments created by governments. When ZIRP was around money was very easy to get hold of - too easy. Now it's really hard because businesses have to beat government bond interest rates, which are guaranteed, to get debt/investment.
> Unless a privately held rogue company like Valve
Valve is not a rogue company.
> Industry, particularly the tech industry, is notorious for leaching of free and open source software and in some cases building entire businesses on it and not giving back
Your premise is wrong. It's impossible to leach off something that is freely given. This is like being angry because people don't all tip a street performer. The deal is it's free.
And your facts are wrong. Businesses fund a giant amount of OSS work.
Valve is rogue as in it does whatever its founder-owner wants it to do. It's neither beholden to what public shareholders want nor to what private investors want. Founder-CEOs are laughably powerless in comparison. When the company is publicly traded, even founder-CEOs who are still majority owners are powerless in comparison, because when their minority co-owners want out their net worth goes down considerably and they tend to really not want that.
IMO the primary limiting factor in FreeCAD at this point is OpenCascade, the CAD kernel, and that is owned by a large org: CapGemini, which has 350,000 employees.
OCC is the domain where FreeCAD's biggest limitations (fillets, chamfers, draft, thickness) are found, and the design of its API is part of why the topological naming problem was so difficult to mitigate.
You need more than a couple of good devs to solve this, or CapGemini would have. CAD kernels are one of the hardest possible things to write in a way that is bug-free, which is why there are so few of them.
I think it is possible that OpenCascade will get more attention because of EDF (french multinational power company) and the French atomic energy commission's involvement in SALOME. Things do seem to be slightly improving.
Speaking with over a decade of experience as a developer in industrial CAD (but still just one random guys point of view only). The question _isn't_ about the availability of a 3D kernel.
3D kernel is not the "moat".
You can cross that with money.
You can purchase a ACIS or Parasolid and you are off to the races. Or even use OpenCascade if you know what you are doing.
The more interesting question is: Ok hotshot, you have a 3D kernel, 10M of investor money (or equivalent resources).
What's your next move? What industry are you going to conquer? What are the problems you are going to solve better than the current tools do?
What's the value you provide to the users except price?
What are you going to do better than the incumbent softwares in relevant specific design industries?
Which industry is your go-to-market?
Etc etc.
The programmer's view is "I will build a CAD". The industrial user on the other hand does _NOT_ want a "general CAD software".
They want a tool with a specific, trainable workflow for their specific industrial use case.
So "if you build it and they will come" will require speaking to a specific engineering/designer audience.
You can of course build a generic tool (it's all watertight manifolds in the end) but the success in the market depends on the usual story about market forces. What's your go to market/beached. Does it enable you to move to other markets?
And the answer usually is - NO. You need to build the market share in _each_ domain separately.
The problem is that the industry doesn't really know what it wants.
The further you get from a "general purpose" tool toward a highly specialized yet "trainable" one, there's a very perceptible drop in quality. We're talking about god-awful software here, where if you click the wrong button, the whole thing crashes, or you finish clicking the 30 different things in 4 different "wizards" and it still doesn't work. And all for the low-low cost of about 0.25-1.25x the engineer's salary/seat (subject to audit)!
Just having a solid, open-source framework to build upon would have many positive externalities across the supply chain, similar to how open-source systems software allows innovation across the computing supply chain. There would be no AWS without GNU/Linux.
” The problem is that the industry doesn't really know what it wants.
”
I would argue they do. What we call ’CAD’ today - digital design of surfaces for manufacturing - originated in aerospace and automotive industries.
What they _want_ is to manufacture.
To manufacture they need designs as input.
The designs ultimately end up as
a) drawings
b) surface models for toolpath programming
c) 3D models for project coordination, validation, etc
They don’t actually care how many buttons you need to press as long as the final design is fit for purpose.
I agree CAD software is stereotypically not fun to use.
Also - there is a non-trivial population of CAD users who actually take pride in their skill to use these more or less broken tools. It’s some sort of weird masochistic/macho badge of honor.
My guess is optimizing the cost of design is not that interesting to anyone as long as a,b and c from above are fullfilled.
The engineers labour who needs to use the CAD tools is an insignificant percentage of the total cost in any case.
To understand why you need to dive into to the cost structures and value creation mechanisms as well as the culture in hardware.
To start with, in many fields the overall culture in hadrware is ”we sell the same junk as everyone else”.
”Just having a solid, open-source framework to build upon”
What’s missing from OpenCascade?
” There would be no AWS without GNU/Linux.”
Sure there would. Open source more or less copypasted existing industrial/academic patterns. But open source probably makes it cheaper and better.
There would no AWS without internet. Both as the protocol but also as the billions invested to the fiberoptic cables crisscrossing the worlds oceans.
The world is built on hardware. Hardaware is not _stupid_. But it’s _different_ than software.
To revolutionize CAD you first need to have deep understanding of the _hardware_ value chains and industrial methods. I think what makes it hard is _not_ having a kernel but having this cross discipline knowledge inside single org.
The existence of CAD/CAM/engineering software cartels like Dassault and Hexagon suggests that more rent-seeking than innovation is occurring, actively stifling innovation.
It would be like if Oracle, Broadcom, and Computing Associates owned 99.9999% of the software market.
Give good open-source tools to the people who are actually making the hardware, and there will be supply-chain-wide positive externalities.
Weeelll … it’s a 70 year old field if you start counting from NC. It’s also possible most of the low hanging innovation fruits were picked long ago. Also innovation required decades of _really hard work_ in applied maths (see nurbs or catmull-clarke surfaces*).
I’m not saying there isn’t room for innovation!
But we also have the examples of several other types of applications clearly reaching maximum utility. Photo editing around Photoshop 6.0 or so, word processing like decades ago, spreadsheet like decades ago.
Sometimes things _do_ seem to have their optimum form.
I’m not saying FOSS CAD would not have a value! But it’s not obvious to me it would be a vehicle for innovation.
I guess better, more easier to edit and robust surface presentation would be valuable if someone came up with them. But that’s a field that requires generally decades of applied research to first find a better model and then a decade of productizing the innovation.
So since you need to keep industrial mathematicians on board without certain outcomes it’s a bit same as medical research - need continuous investment, careers, etc. For this reason it’s not obvious to me there would be an open source framework that would work here predictably.
Again, I’m not saying you are wrong. Maybe there are simple low hanging fruit just waiting to be picked. But I’m not sure you are exactly right either.
* Catmull-Clarke surfaces are a great example. Ed Catmull founded Pixar decades after inventing the surface, but it took a decade of industrial research inside Pixar before they became a usefull tool (Geri’s Game). Toy story was still NURBs, somewhat ironically.
Could you share your thoughts on interesting and worthy development paths or vision for a universal FOSS CAD tool/framework? If you were leading a funded team, what goals would you set for the project and how would you achieve them?
To start with it can’t be universal. Models that you can edit (unless they are really dumb like DWG) are almost always domain specific.
You can - and should be able - to export to a universal format though.
But having a universal format is different than having a universal design space.
The requirments of a mechanical engineer are quite different from that of a structural engineer/and/or detailer for houses. And again different from those of a doctor planning a surgery based on CT model. For example you need rebars only in one of these. You need delicate fillet control only in one of these. You absolutely need support for import and visualization of volumetric data in only one of these.
What I’m getting at that while all design softwares have some common min set of features which _can_ be universal, the number of features in each stereotypical domain are surprisingly disjoint even if only comparing AEC and mech eng. Hence ”universal” design software would be a union of a very, very large set of totally unrelated features. Which suggests it would be hard to develeop, hard to use and hard to maintain.
So it’s better to have a collection of applications that aspire for ”universal scope” as a collection rather than ”one app to rule them all” which you will never get done in any case.
If we presume a hypothetical FOSS mission to enable computer design for all major fields benefitting from digital design for physical outcomes, it should then focus on this ”common min” core, interoperability (strongly linked to the common min core but separate concern - ie import and export) as well as domain specific projects of producing the domain specific UI and tooling.
I see your point about the scope, which is why I led with "framework" as a fallback in my question.
With that in mind, I'd be interested to hear your thoughts on what a practical FOSS implementation of such a framework might look like. Or at least a FOSS alternative to Fusion 360. Would you use ready-made geometric kernels, improve on existing ones (OpenCASCADE?), or start from scratch? Would you adapt to existing standard formats (import/export), or go with a new one? Would you build on FreeCAD, use another suite as a basis (source code if FOSS, or inspired UX/workflow if not), or do you see no point in that and think it would be better to start fresh? I was rather expecting a discussion along these practical lines.
I think the first question to tackle is _to whom_ is the program targeted at.
Who is the expert user? What are they building? What are the upstream and downstream application?
See, this is why this area is hard from software pov. It _looks_ like well specified engineering space - something like a network protocol - but actually what you have the engineering happens _in the engineers heads_ and in the organizations that use these tools and the tools that facilitate parts of the process and automate things that are practical to automate. All cad tools are closer to an excel sheet than a single well formed abstract syntax tree like a language grammar.
Now, Fusion 360 narrows down the audience quite a bit but also goes outside of my core expertise (which was in AEC). So I don't have good, detailed off-the cuff opinions here.
I can tell you what the _outputs_ are though. CAM (toolhead planning for CNC or slicing for AM), drawings, and 3D models for project coordination.
So, the question becomes - which of these workflows are we talking about. All of them? And for whom?
I know you specified "Fusion 360" but that is a product that is designed from the point of view of being a vendor-lockable commercial offering. It's really great there. I'm not sure the same package makes sense in FOSS sense.
"Would you use ready-made geometric kernels, improve on existing ones (OpenCASCADE?), or start from scratch?"
If one wants to export STEP then definetly use OpenCASCADE. If additive manufacturing is the target then STL or 3MF suffices and I would use Manifold library there as much as possible. 3D kernel is not the hardest part or even the most important (even thought it's hard and important).
If working in AEC then IFC export/import is a must (it's a schema extension on top of STEP).
"Would you adapt to existing standard formats (import/export)"
Standard formats if you want anyone to use the software for anything, ever.
"Would you build on FreeCAD, ... or do you see no point in that and think it would be better to start fresh?"
I would figure out first what the target user needs. Since CAD programs live in living, breathing industrial design ecosystems you can't really design one in isolation. Without knowing what the user needs and does you really can't answer that question!
If the aim is to offer a credible alternative to Fusion 360, then what you need to do is to make contact with an engineering office. Then you find their CAD manager, and figure out what their organizational parameters are for the CAD workflow. Does FreeCAD work for them? Why not?
If it turns out FreeCAD is perfect for their workflow then it's very likely there are other offices like that, and the FOSS project becomes just about FreeCAD support, education and evangelism.
And actually the key thing might be to design a process how to move the years and years of ongoing project data and models to this new platform. Industrial CAD is super sticky because you have decades of project data, billions of dollars of investment, and hundreds of peoples daily processes being supported by the specific quirks and features of these software.
Personally I'm _skeptical_ FreeCAD would be a drop-in replacememt but if my industry years taught anything is you need to _see what the user does_, analyze their workflow to first principles, then understand how to serve them.
Of course it would be _more fun_ to start from scratch. But the concept is not positioned as expression of personal creativity but pragmatic allocation of hypothetical FOSS investment with the intent of increasing industrial FOSS use and that's a _different_ thing than having a fun personal project.
Now, the above was from the point of view of "offering a credible industrial platform".
If the idea is not to offer a commercially credible alternative, but just to support something like hobbyists workflows for 3D printing, that is a totally different problem to solve, much more simpler, and likely much more fun.
Thank You. I think a lot of what you wrote can equally be applied in other industry as well. Software dev thinks from the outside they are all the same but in reality they have near nothing in common.
There are common parts and stuff that is totally different.
For example the core parts in graphics and geometry are always familiar wether you work in games, vfx or what ever CAD industry.
But then all the wrapping around those core concepts vary quite a lot, and in terms of mass of complexity and code are drowned by all the domain specific stuff.
I guess what I mean is that if the likes of huge defence contractors / automotive industry etc put weight into developing a open kernel and tooling at a volume similar to that of paying for licenses to Autodesk, then they could build their own hyper focussed CAD solution, and the rest of us could be "off to the races" without the upfront cost ACIS or Parasolid.
A huge contractor in the defence and automotive industries does control an open kernel and CAD tooling: OpenCascade is owned by CapGemini. And they do build focussed CAD solutions in it (e.g. SALOME and other tools.)
Several open source CAD packages use it(FreeCAD, Cadseer, Dune3D, SALOME Shaper, KiCAD, CadQuery/Build123D, DeclaraCAD etc.)
There are firms using it for bespoke naval and aerospace applications.
The reality is CAD kernels are incredibly difficult, multi-decade projects, and part of the issue is a lot of the domain expertise in them is literally dying off or retiring.
” The reality is CAD kernels are incredibly difficult, multi-decade projects, and part of the issue is a lot of the domain expertise in them is literally dying off or retiring.”
Well, they are complex but not impossible. I understand for example zoo.dev just wrote their own.
I also understand tinkercad and womp wrote their own geometry solvers.
Not sure how to compare the above with OpenCascade (since, like you said, it’s pretty complex & public and the others are not public) but at least one can accurately say ”you can absolutely write a 3d modeler from scratch”.
” rest of us could be "off to the races" without the upfront cost ACIS or Parasolid.”
Just start coding your CAD tool dude if you want to! You can totally start with OpenCascade.
All these kernels do is they
1) define tensor product surfaces (usually NURBs) with trimming curves
2) join these surface patches to watertight solids
3) export STEP (non-AM) or STL (AM)
The question is which hardware manufacturing path is the one you know so well you know what the important things are?
And the dirty secret here is that the 3D is _not_ the hardest part (it’s hard sure). You soon end up with schema management and database management as well as domain model challenges that are quite complicated. The main problem here will be that you can’t just start coding without knowing where you end up. You need to know _every step_ or you will end up in a quagmire that is no better than existing tools (slow, buggy). It’s totally doable but the total complexity will be non-trivial and the decisions you make year 1 will come haunt you and bite you in the ass year 5. Be prepared!
And for those coming outside to this - I’m not being glib! A 3D design tool totally can be a one man show to start with (see NomadSculpt, Plasticity or MagicaVoxel for example).
” I guess what I mean is that if the likes of huge defence contractors / automotive industry etc…”
I’m not sure what you are getting at.
These companies created what we call CAD starting from the 1950’s or so (research Parson’s NC work at MIT, Bezier’s work later at Renault if you want a wikipedia tour of the early years).
The current industry isn’t shaped like this because Dassault, Siemens and Autodesk decided to go all incumbent. They were more or less pushed to do so by market forces and industrial history (and if it was not them some other company would be the incumbents).
Yes. This better explains on the one hand Plasticity (Parasolid-based CAD largely for graphic designers, games designers, filmmakers) and on the other SALOME (OpenCascade-based CAD for numerical simulation/FEM/multi-physics etc., being developed for/by energy-related organisations.)
The problem with FreeCAD and every other free/open source MCAD project of note is the Open Cascade kernel they are built on. While Open Cascade is fairly mature, it has dealbreaker issues in a few key areas: fillets cannot consume connected faces and may fail for a number of other reasons, cylindrical and spherical faces require seams which often cause issues with boolean operations, and shapes like helixes are also often troublesome.
It would probably fall somewhere between "substantial architectural overhaul" and "partial rewrite" because it’d require redesigning the topological representation to eliminate seam edges.
Some of these issues are long standing and really hard to solve. Someone could probably defend an entire PhD thesis on “redesigning the topological representation to eliminate seam edges” without making much practical progress
It’s not about seams in 2d but 3d curved surfaces.
OpenCascade’s kernel forces you to deal with periodicity in topology (the shape structure), while Parasolid handles it in geometry (the math). A cylinder is mathematically continuous because there's no actual "seam" where it starts and ends. But in OpenCascade there’s a seam from 0 to 2π and this seam edge becomes a real topological entity that every algorithm has to deal with.
In Parasolid the cylinder is periodic so when you query a point at U=2.1π, the kernel just knows that's equivalent to U=0.1π. The periodicity is a property of the surface math, not the shape structure. It’s not using polygons/edges/vertexes but a system of equations to calculate the surfaces.
This is why boolean ops fail so often in FreeCAD: it’s asking the kernel to intersect with an artificial edge that shouldn't exist. The seam creates edge cases in intersection calculations, makes filleting near seams a nightmare, and complicates things. Parasolid's implicit handling requires smarter surface evaluation code upfront, but then everything else just works.
Originally open-source, but since taken back in-house. As I understand, which should not be construed as an accurate accounting, Sandia wants to flesh out the basics further before (potentially) open-sourcing it again.
Same, but I don't think it's possible without a large and sustained investment into a free geometric modelling kernel, which can probably be only done by a government.
Parasolid is powering practically every major CAD system. Its development started in 1986 and it's still actively developed. The amount of effort that goes into those things is immense (39 years of commercial development!) and I don't believe it can be done pro-bono in someone's spare time. What's worse, with this kind of software there is no "graceful degradation": while something like a MIP solver can be useful even if it's quite a bit slower than Gurobi, a kernel that can't model complex lofts and fillets is not particularly useful.
3D CAD is much harder than Blender and less amenable to open source development.
> Same, but I don't think it's possible without a large and sustained investment into a free geometric modelling kernel, which can probably be only done by a government.
It's going to be years or decades before it's competitive though. Also, it looks like they switched to keeping progress updates private except to sponsors, which means I don't actually have any easily-accessible information about it anymore which is sad.
I'm very skeptical that one person can make a dent. Paging through the releases, they seem to focus on constructive solid geometry and code-driven shape generation, which I believe is a dead end.
The tricky bit is having a G2 (or even G3) fillet that intersects a complex shape built from surface patches and thickened, with both projected into a new sketch, and keeping the workflow sane if I go and adjust the original fillet. I hope one day we'll see a free (as in speech) kernel that can enable that, until then it's just Parasolid, sadly.
> Same, but I don't think it's possible without a large and sustained investment into a free geometric modelling kernel, which can probably be only done by a government.
Can you help me understand why this problem is so hard?
The way modern CAD systems work is by having a tree of features/actions that is then used to construct an analytical representation of a 3D object. The features/actions can rely on "sketches" (2D drawings that are coupled with a real time geometric constraint solver) and can be "projected" into sketches, creating new reference lines, that can then be used by the sketch constrain solver, generating a sketch that can be used for more 3D features.
This is already complex and fiddly enough. Just having a stable 2D drawing environment that uses a constraint solver but also behaves predictably and doesn't run into numerical instability issues is already an achievement. You don't want a spline blowing up while the user is applying constraints one by one! And yet it's trivial compared to the rest of the problem.
Having 3D features analytically (not numerically!) interacting with each other means someone needs to write code that handles the interactions. When I click on a corner and apply a G2 fillet to it, it means that there's now a new 3D surface where every section is a spline with at least 4 control points. When I then intersect that corner with a sphere, the geometric kernel must be able to analytically represent the resulting surface (intersecting that spline-profiled surface with a sphere). If I project that surface into a sketch, the kernel needs to represent its outline from an arbitrary angle — again, analytically. Naturally, there is an explosion of special cases: that sphere might either intersect the fillet, just touch it (with a single contact point), or not touch it at all, maybe after I made some edits to the earlier features.
Blender at its core is comparatively trivial. Polygons are just clumps of points, they can be operated on numerically. CAD is hell.
The other reply is really good. To add to that, the intersection of two bi-cubic Bezier patches (each being but one part of a cubic B-spline surface) is an implicit equation of degree 18^2=324. This simply cannot be implemented exactly in a geometry kernel and thus must be approximated. How do you want to approximate this? If you choose trimming (the industry standard) now you have to handle gaps in your geometry. If you choose remapping into an unstructured watertight spline, you need to solve a constraint system that is NP-hard. If you choose reparameterizing… well, see nVariate’s watertight Boolean technique (disclaimer: I once sponsored a project with nVariate).
Now, generally speaking, in a CAD model most surfaces will be “analytic” (plane, torus, conical, arc, line, etc). But whenever some complex surface that joins these surfaces is required, (NUR)B-splines are the principal technique for “covering” the gap.
Geometric modelling tends to need a lot of detailed work for two main reasons.
Firstly, you probably have a variety of analytic shapes to represent — things like lines and circles in 2D or cubes and spheres in 3D. Even seemingly simple questions, like whether two such shapes intersect or not, can require a significant amount of logic to calculate the answer. That logic will often be specific to the exact combination of shapes you have, because the number of freedoms and nature of any symmetries in the shapes you’re working with can mean you would use completely different algorithms for superficially similar situations.
Secondly, while you’re probably going to implement a lot of analytic calculations, in realistic models you’re probably going to end up using numerical methods as well. That can be because you need to work with geometry like Bézier curves or NURBS surfaces that has many freedoms. It can be because even if you start with convenient analytic shapes, new geometry that you derive from those shapes, for example by offsetting a single shape or by combining details from multiple shapes as in constructive solid geometry, won’t in general have an analytic shape itself.
By the time you allow for the numerous different types of constraint that you might want to enforce between different types of geometry and the numerous different ways you can construct new geometry from geometry you already have, the scale of the problem explodes. And on top of that, almost everything you do is going to have numerical sensitivity issues, and all but the simplest algorithms are going to need detailed, careful analysis to make sure you really have covered all the possibilities. In this field, “edge case” and “corner case” are literal terms and not just figures of speech!
To give a practical example, without looking up how to do it, could you confidently calculate whether two arbitrary cuboids are completely separate or they touch or intersect somewhere? As another example, given an arbitrary parametric surface, a sphere in a position just resting on that surface, and the constraint that the surface of the sphere must remain tangent to the parametric surface without intersecting it anywhere, how would you calculate the path the centre of the sphere will follow if you introduce gravity to start the sphere rolling in a certain direction along the surface?
These are relatively simple problems in the field, but each already has some subtlety that leaves the “obvious” solutions incomplete. Solve a few thousand problems like that, each unique and with its own calculation strategy, and now you’re starting to get a practically useful geometric modelling system. (You’ve also probably had a team of dozens of mathematicians and developers working on it for decades.)
Something that I've daydreamed of in the past is making a new constructive solid geometry "kernel" around which a CAD application could be wrapped based on projective geometric algebra (PGA).
The algorithms it enables are fundamentally more capable and robust than traditional kernels based on linear algebra (vectors and matrices). You can do really fancy things like interpolating in space and time robustly, find extrema in high-dimensional phase spaces, etc...
This could potentially allow straightforward and robust solvers for kinematics, optimal shape finding, etc...
Every few decades there's a "step change" where some new algorithm or programming paradigm sweeps away the old approach because suddenly a hobbyist can do the same thing solo that took dozens of developers a decade in the past. I suspect (but cannot prove) that PGA is one of those things.
I haven't heard of fornjot, but that's not a surprise because I haven't been involved in the CAD field for a very long time (decades).
My thinking is to approach the problem from a fundamentally different angle. There's already constructive solid geometry (CSG) kernels, triangle mesh kernels, and NURBS-based kernels. Their mathematical foundations are very different, which results in wildly different behaviour and capabilities.
I came across PGA while studying physics, saw some vaguely CAD-like CSG demos and I realised that it could be yet another mathematical foundation on top of which CAD applications could be built.
Notably, variants of GA and PGA are already used in robotics, inverse kinematics, etc... including 5-axis milling, so it's not unheard of in industry. However, it's always used as a "spot" solution to work around a problem such as gimbal lock, or interpolating transformations. Typically by converting back-and-forth between linear algebra representations and some variant of GA temporarily. I'm thinking of using PGA throughout as the foundational geometric elements.
I've been working on a quite simplistic tool which currently just supports writing out DXFs and moving tools in lines and arcs for a 3D preview in OpenPythonSCAD --- I _think_ I can envision what you are describing, and it sounds very interesting, and might be an approach I'd want to look into for 4th and 5th axis work --- do you have any texts/references which you could share/point to?
In general, GA and its variants like PGA are good at calculating tangents and offsets for points, lines, planes, spheres, and other parametric surfaces. The key benefit is that the exact same algorithm will work in 2D, 3D, 4D, or any higher number of dimensions. This could in principle allow very elegant formulas for tasks such as "find the biggest thing that won't hit this other thing at any point in time" or the same thing but with a 0.1 mm gap. Similarly, it's possible to reuse the same code and "human intuition" in very high dimensional spaces, such phase space used in more complex motion planning or engineering simulation scenarios.
I actually have that book in my "to be read" pile, underneath some math texts which I believe will make it accessible to me --- will have to get to studying....
If you are looking for a tool that handles constraint based CAD for mostly like 3d printing your stuff, give Dune3D a try (on github), it's currently my go-to to keep a workflow similar to what I used to have on Fusion360, it's lightweight, open source and pretty damn good. The author also develops a EDA/circuit board designer called Horizon EDA.
There's also the https://www.cadsketcher.com/ addon for Blender, which is constraint-based. I tried it a few years ago and it was decent, but still lacking a few things. I haven't tried it recently, but I'd be surprised if it wasn't much improved from the already-pretty-good state it was in when I tried it.
I was going to suggest solvespace. It is very barebones, but was much easier to use than FreeCad for me. It also has constraints in 3D space, which I use a lot: https://solvespace.com/index.pl
IDK how they compare to professional CAD tools, but I've heard good things about FreeCAD and OpenSCAD. I know that some people use Blender for CAD work, and there are even some extensions to make it easier, but I'm dubious that the representation of meshes that Blender uses are well-suited for CAD applications.
I just tried FreeCAD last week. I uninstalled it after about 10 minutes. The most basic actions to just get started were throwing errors. Maybe it was user error, but it was a very bad first impression.
Approached it with the same attitude at the same time, after 10 minutes decided to view some basic tutorial (for an earlier release) that made things clear and I could continue basic tinkering on my own.
But of course built-in intro of Solidworks was a way better UX.
Sorry about the bad experience. If you decide to give it another try, it's worth spending a few hours on some intro tutorials first. I recommend MangoJelly on youtube.
FC is not a program you can just open and start using, especially if you have zero experience with parametric modeling.
If you're serious about design, modeling, engineering, etc., and want to own your own data, it's worth investing the hours to learn it starting from the very basics.
I actually did the same thing so that I could figure out how to lay out my workshop!
What I'd do is:
- Spreadsheet workbench --> Create spreadsheet (name it "measurements"). (This is optional)
- Switch to Part design workbench --> Create body (name it "layout") --> select XY plane --> Create sketch --> Create Polyline
- Zoom out, start drawing the rooms in your house, approximately to scale.
- Before going into too much detail, add a dimension (select line --> "Constrain Distance") to the first line you draw, so that you can do the rest of your drawing approximately to scale. Then the general shape won't get messed up when you add dimensions to everything else.
- (If you have a photo or picture, you can import that to sketch over).
- Add constraints to match your room measurements, mostly vertical or horizontal distance constraints. Be careful not to overconstrain the sketch. (You can put the measurements directly into the sketch constraints, or you can put them into the top-level spreadsheet, create an alias for each cells, and then set the dimensions to reference those cells).
- Once the rooms are drawn, close the sketch and create a new sketch on the xy plane called "furniture".
- Draw some rectangles for your sofas / tables / etc, delete any horizontal and vertical constraints that get automatically added (they look like little | and _ icons), and instead apply perpendicularity constraints. Dimension your rectangles using only the "constrain distance" tool. Now you can drag them around the room and rotate them freely.
- If you want to make 3D models for these too, create new Part Design bodies for each room and each piece of furniture, create a shape binder referencing the master sketches in the Layout body, and then extrude the sketches using the "Pad" operation.
That's about as much tutorial as it makes sense to pack into a HN comment. If you give it a try, I hope it works out for you!
There are excellent tutorials on youtube. Spending a couple of hours doing these will allow you to hit the ground running.
FreeCad is rapidly evolving and quite a few tutorials are already using the v1.1 dev builds. Pay attention to the version used in tutorials as you can run into trouble following them if you are on an older release.
I’ll take a look. I’ve used some of those purpose built tools before and I was never much of a fan. Usually due to how the furniture was handled.
Back in high school I had extensive experience with AutoCAD R14 (3 years with it, after 2 years of board drafting), and then in college I had some more experience with a couple other packages. But this was all a couple decades ago now.
Your CAD experience level sounds like it is similar, but a bit higher than mine (2 years hand drawing, 2 years CAD, some more hobbyistic CAD & 3D modelling over the years for personal projects), so yeah SweetHome3D might not be that much help for you over using some CAD software directly.
I found furniture handling OK, but certainly has its rough edges. Good thing is that one can just import 3d models and so create the relevant pieces of furniture themselves; or use the generic boxes that SH3D has, if it's just for 2d space usage.
I did a few office space modellings with it, i.e. to get a feeling of how the space could be used best, and for that I found it quite OK. The result I got compared to the time invested was pretty good for my taste.
I like using paper and cardboard for this, dollhouse style, much easier to move things around and visualize that way and more fun than clicking a mouse to boot :^)
Inkscape is good for typing dimensions into rectangles tho
This was my plan B. I do have a scale I can use for it.
I’ll check out Inkscape as well. I’ve tried using some raster graphics in the past, but I couldn’t type dimensions and had to use the rules and guides with snapping. It mostly worked, but was a bit annoying.
I tried FreeCAD and the user interface is so unintuitive and things just have constraints that block you from doing the most basic things from the get-go that I just gave up in 10m, like sibling. SCAD is scripted/programmer CAD, I like the concept and have used for a few things but it's quite a learning curve to do anything more than a cube with some funny edges! Dune3D is currently my go-to for 3d-printer related parts!
Have you tried since the 1.0 release? There were quite a few improvements that were locked behind weekly builds for a long time. AstoCAD[1] might be another option for you. It's basically FreeCAD with a streamlined UI.
OpenSCAD is great, I’ve made some very complex stuff in it that would be hard to make even in professional tools like Fusion. For some reason the main OpenSCAD releases don’t seem to get updated (the current version on the site is 2021.x). The nightly builds are great though, and I recommend getting one and turning on the Manifold backend since it is MUCH faster than the default CGAL one.
I will phrase my response in an alternative form which, I mean not in a flippant way, but because I think it will clarify this, in complement to the other replies:
> Mom, may we have SolidWorks?
> We have SolidWorks at Home.
> <SolidWorks at Home>
This is in contrasti to the example the parent comment brought up, and the one I added: Blender and KiCad do not have this concern; there are free (Or you could say inexpensive) high quality tools in their spaces. This is notably not the case for traditional CAD.
I did a lot of parametric 3D CAD work in college as a MechE student, and switched to webdev after graduating. Recently, I had a hobby project that would have involved dusting off my CAD skills, and was bummed to find that there wasn't any software readily available that allowed me to lean on muscle memory I had built up using Inventor/Creo/SolidWorks/Unigraphics.
A viable OSS alternative, particularly one that prioritizes simplicity and being a gentle on-ramp for hobbyists, would be fantastic.
It wouldn't need (and I would argue shouldn't attempt) to compete with the big for-profit outfits to be useful either. Offering a simplified UX for the most-used features of the pro software would have a ton of utility, while also being a great place to build the foundational skills you need in order to master the more complex stuff.
Furthermore, a project with the mission of complementing the pro tools rather than replacing them would probably be far more likely to succeed, IMO. As long as projects could be exported to variety of formats and brought into some other software when a specific use-case arises, you'd have all your bases covered.
I tried Onshape and the first thing that made me drop it was how slow it is. It feels extremely sluggish, probably because it's running on the browser. I have a really good computer though, so I dont want to deal with that.
I really didn't like how they both require a phone number and make all of your files public. I've stuck with Fusion which seems a lot more privacy respecting while also being basically free for home users.
OnShape is just another skin over Parasolid (closed-source geometry kernel sold by Siemens) like SolidWorks, VectorWorks, and others I forget.
So it doesn't really represent meaningful progress towards FOSS CAD because ultimately it uses the same proprietary, expensive library to do the heavy lifting as most of its competitors.
You're on point that there's a tremendous amount of money captures by Autodesk for CAD software that could be better directed at the open source community instead.
Software like OpenSCAD and FreeCAD are obviously not suitable for much commercial work, and have very irritating limitations for hobbyist work, in my mind a big part of that is the UI and Blender has a good and established UI at this point so I'd love to see the open source CAD that provides an alternative to vendor lock in come from a Blender add-on instead of a separate program.
I am no expert but as I understand it the primary difficulty with developing good alternatives to commercial CAD software lie in the development of an effective geometric kernel.
It seems to me that if a developer of an opensource CAD program develops it as a Blender add-on they can effectively outsource the remainder of the development efforts to the Blender community while focus can be made on the CAD kernel itself.
take a look at https://Plasticity.xyz. It's not open-source, but it's got a small, highly dedicated team behind it. It's built on Solidworks' kernel, so it's quite robust.
Also take a look at solverspace, caligula, FreeCAD, ...
Reading the FAQ it doesn't seem to bad. The Indie license allows you to run it simultaneously on 2 machines and the Studio license increases that to 4. You can transfer installations to new computers (or the same computer if doing a reinstall) up to 10 times per year, so you're not locked in to those 2 specific computers for eternity.
Restrictions are always annoying but I think they're striking a reasonable balance.
But a permanent license… that more than makes up for the node locked. I don’t have more than two machines I want to edit things like this on anyway. And even if I did I think it’s like 200$, which is like 1/6th of a month of Onshape.
FreeCAD is still in active development and there was a major release (1.0) recently. There will be a feature freeze soon where the devs will focus primarily on stability and eliminating bugs.
That said, I use FC as my main CAD driver and, not only tolerate it, but enjoy using it. I had to watch several hours of introductory videos to get the hang of things initially, but now I'm quite fast and proficient.
The initial pains and common complaints about UI and such, are basically non-issues for me now and when I model, my cognitive energy is basically devoted to the design problem itself rather than issues with UI or the behavior of the software.
It's necessary to put the time into learning it, but it's worth it.
As an addition, KiCad is also an example of exquisite Blender-like software for designing things. It solves a simpler problem of note. Both are paragons, and to your point, it would be lovely to have traditional CAD software on its level that's not expensive.
KiCAD was also a meh ECAD FOSS alternative 7-8 years ago, now it is by far the tool of choice for regular ECAD designs. I can see FreeCad getting there by 2030.
FreeCAD is probably the single most frustrating and unintuitive pieces of software I have ever used. I almost drafted hate mail to the devs after 15 minutes of crash coursing fusion360 got me further than 2 days of trying to use FreeCAD.
It seems like it has lots of capability but still "punch your monitor" levels of difficulty just trying to do the most basic stuff.
Productive FreeCAD user chiming in here. I understand the frustration. It has a moderate learning curve, but the editing model forms an intuitive picture once you learn the basics and start using it.
Also second the MangoJelly tutorials. You will have a much better time if you walk through a few lessons first as opposed to just winging it and expecting to understand how everything works immediately.
While it's a pain to learn and requires some plugins (addons) for basic ergonomics, FreeCAD absolutely works for parametric CAD modeling. YMMV depending on the project and complexity, it does the trick for laser cutting, bending and 3D printing.
Deltahedra is a great YouTube channel for getting the basics.
It suffers from too many "workbenches," some of which appear to be redundant or dated. You never know whether structures created by one are "compatible" with the M.O. of another (like "Part" vs. "Part Design").
And it presents nonsensical problems, like offering to create a sketch on the face of an object and then complaining that the sketch doesn't belong to any object. So you have to manually drag it under the object in the treeview. So gallingly DUMB.
Despite all that, I will wrestle with its ineptitude before giving Autodesk a penny. I get stuff done with it and respect those who give their time to develop it.
Some of the basics aren't immediately obvious or even hinted at very well for new users, but the "problems" that come up are consistent with its own editing model.
> complaining that the sketch doesn't belong to any object
The sketch is by default attached to the "active body". Active Body is a simple, but important concept to understand. Any operation you do, including adding a sketch, is applied to what is designated as the active body. You designate the active body by right-clicking on the desired body in the object pane.
> It suffers from too many "workbenches"
Another understandably common source of confusion. There's the ever-confusing Part and Part Design workbenches.
I think it's best to just ignore Part and use Part Design whenever possible. Part lets you do operations at a more granular level, but Part Design provides a lot more QOL enhancements and is more intuitive. For the vast majority of things, Part Design is more than capable. I would only use Part workbench when absolutely necessary.
You probably understand all of this already. It's directed more towards the reader. I feel the need to defend FC when certain accusations are brought up. It's immensely powerful, capable, and usable. In my case, I can work very rapidly with it - though it's taken some time to arrive here. The project deserves more than just aspersions.
Thanks for the reply. I like FC a lot and use it frequently! And yes, I pretty much use Part Design exclusively... except when I'm importing a shape from an SVG. Then I have to use a combination of workbenches.
The combo of tracing a bitmap (from a scanned drawing) with Inkscape and then saving the result as SVG to bring into FreeCAD has been a frequent workflow for me. It generally works very well.
To clarify about the "active body" though: This problem occurs even when there's only one active body and the shape upon which you've supposedly draw the sketch is part of it. So why is FC complaining?
I can't tell for sure without knowing exactly what's happening, but one reason is that if you create a sketch from the Sketcher workbench, it will not be added to the active body.
If you create the sketch from the Part Design workbench, then it will be added to the active body.
A Body is specifically a Part Design concept, and FC doesn't presume you'll be working in PD, so this makes sense in a way - it works on the presumption that the Sketcher workbench works with other workbenches and not just PD specifically.
One thing to note is that creating sketches from Sketcher and PD is different. Sketcher offers attachment options to faces, edges, etc., while PD only offers to attach the sketch to base plane (XY, XZ, or YZ).
There is a good reason for this also. The reason is that in designing parts, especially complex parts, it is highly discouraged to use faces or edges (i.e., features) as attachment points because it makes your model very brittle against changes.
This is more of a general CAD philosophy than a FC thing. It's better to set where a sketch attaches based on variable values. For example, if you have a cylinder with a height 20 and you want to attach a box to the top of the cylinder - rather than attaching to the top face of the cylinder, it's better to create a variable h=20, and set the cylinder to height h, and set the box's z-value also to h.
In FC, I use VarSets for this. I used to use the Spreadsheet workbench, but found it clumsy.
Thanks, that's useful info and something I've wondered about.
Your comment also serves as an excellent illustration of what's "wrong" with FreeCAD, though.
"One thing to note is that creating sketches from Sketcher and PD is different. Sketcher offers attachment options to faces, edges, etc., while PD only offers to attach the sketch to base plane (XY, XZ, or YZ)."
OK, but I would argue that sketching functionality should still be centralized. So if you have a body or some appropriate object selected and invoke the sketcher (or vice versa), attachment to faces, edges, etc. will be enabled. Otherwise it's disabled.
That's standard GUI, and it's well-understood that greying something out tells the user that some condition isn't met. But he still learns that the option exists and where it resides.
"In FC, I use VarSets for this. I used to use the Spreadsheet workbench, but found it clumsy."
Thanks for the tip. I've been meaning to tackle spreadsheets as a means to resize stuff (another pain point with seemingly many "solutions" in FreeCAD).
Not OP, but I've been using FreeCAD for hobby projects for 8 years and even though I usually do achieve the results I want, the "monitor punching UX issues" are absolutely real. I'd love for FreeCAD to succeed the way Blender did, but the project either lacks people with UX expertise or funds to sponsor such people.
I tried it this year. Not in too much depth, but I tried Fusion and FreeCAD for the first time this year for 3D printing and found I was getting much further much faster on Fusion.
I'm sure I could grind harder and learn more and make FreeCAD work, but I'm not sure why I'd bother.
If all you're looking to do is produce a design the quickest way possible, then sure Fusion often wins. Just as there was a time where buying Maya made more sense than using Blender. But, FreeCAD offers other niceties, like being able to work offline, using an open file format, performant non-web UI, generally avoiding vendor lock-in. And Autodesk already did a major rug pull with Fusion360 licensing once.
I mostly design functional 3D prints. I've found FreeCAD 1.0 fixed most of the annoyances I ran into and I'm pretty productive with it. But, I didn't come into it with an expectation of a SolidWorks or Fusion clone. I learned the tool with its own idioms and it seems pretty straightforward to me. It's not perfect by any means and I've run into the occasional bug. To that end, I've found reporting bugs with reproducible steps goes a long way to getting things fixed.
I'm not sure what it is about CAD in particular, but I find everyone wants the "Blender of the CAD world" while skipping over the decade of investment it took to get Blender where it is. For a long time, discussions about Blender were dominated by complaints about the UX. If we didn't have folks willing to work past a hit to productivity in order to make an investment into Blender, we wouldn't have the amazing open source tool we have today. FreeCAD has all the expectations of a high quality open source CAD tool with hardly any of the investment. Just getting people on /r/freecad to file issues is surprisingly challenging.
By all means, if you're happy with Fusion and don't mind the licensing, have at it. I'm sure there's functionality in there without an equivalent in FreeCAD. I'd personally rather not have my designs locked up in Fusion and see FreeCAD as the best option for me, even if it suffers from the challenges of open source UI design.
No arguement that fusion isn’t better and easier to learn. Their licensing and changes to their hobbyist offering were no longer tenable for me which prompted my change. I was pleasantly surprised at how well I was able to work in freecad after a few youtube videos.
Depends if your goal is artistic or functional. Blender is good if you are trying to make character models, etc. It's not great when you are trying to make a part that has to fit something in the real world and after printing you discover one step half way through needs to be 1mm shorter.
You can make a part in a way where you are sure of the tolerance, and you can do the opposite in blender. They have measuring tools and you can be pretty precise.
It does take a different set of skills to regular CAD, but I haven't found it that bad for simple 3D printed models that need to be dimensionally accurate.
I have used it to make quite a few functional prints, with the help of making sure my scene units are correct and a CAD plugin.
I haven't tried any of the cad plugins for blender, but I'm not sure how you would retroactively change dimensions in blender. It's usually simple enough to create features to a certain size, but if you need to change them later it becomes significantly difficult.
If I put some holes in something that are 1mm from the edge, but then I print it and see it doesn't line up and needs to be 1.5mm, in Fusion I can just change one number and it all updates. Doing the same thing in blender would likely be very difficult.
thats still pretty easy in blender, just takes a different approach!
Goto edit mode in the part, goto vertex mode, wireframe view, select all of the vertexs for the hole on both sides of the solid part, then move then (in the right selection mode) in the proper direction using your keyboard to move the exact amount needed. Depending on the specifics needed, you can setup custom axis and such to move them anywhere needed (lets say you needed the hole .5mm but 45deg from the current one ref'd from a specific edge).
The same thing can be said for resizing whole faces, moving parts, etc...
Its all possible and usually pretty easy to do, just takes a different mentality from that of a parametric modeller.
During COVID I learnt Blender for 3D modelling. It is still my go to.
Many people complain about it being a mesh editor but it works for me. The sheer variety of tooling and flexibility in Blender is insane, and that's before you get to the world of add-ons.
I want to learn Geometry nodes and object generation as I think they will address a lot of the "parametric" crowd concerns. This v5 is meant to be a big step in ease of use of this.
Also, I'm not sure if the different tooling lets me see all the flaws of online "parametric" models, or whether I'm being pedantic. They get frustrating. I have Gordon-Ramsay-screamed "How can you fuck up a circle!".
In MCAD, “parametric” does not mean a high level part or feature is driven by editable parameters or procedurally generated features. Parametric refers to the underlying storage format representing part features in a parametric way rather than as a mesh. Mesh formats like stl cannot represent a circle by its position and radius, while a parametric format like step can. This distinction is more akin to raster (bmp) vs vector (svg) graphics. Both can be generated procedurally by “parameters”, but only with svg can sub-features be faithfully extracted or transformed.
I have some understanding of "parametric" vs "mesh". I looked it up when I saw so many people going on about it.
Maybe it is the export or something. I run the 3D toolbox and often models are not manifold.
I see things like two circles in slightly different positions but both are connected in different ways to the surrounding "single" instance model. Things like this mean you end up with "infinitely small volumes". There is no fully enclosed "volume" and so mathematically there is "nothing to 3D print".
As a model this makes no sense to do, and so it irks me.
But clearly the slicer software doesn't care or autocorrects and people make their 3D print happen just fine.
>Mesh formats like stl cannot represent a circle by its position and radius, while a parametric format like step can.
This is where I think the Geometry nodes can help. A node (function) can be used to represent the circle with inputs and outputs set or changed as required.[0]
I have not fully explored this space though and so my "hopes and dreams" may well be as useful as thoughts and prayers...
Alibre does not have a free option. They have a 30 day free trial and the low cost Atom3d package. I bought Atom3d and never use it because it's too painful. If I'm going to endure that much pain I might as well use FreeCAD which at least runs on Linux.
Does Blender have NURBS? I don't even use NURBS in Plasticity, because curves are already essentially vectors. I don't have to worry about polygons at all, and then I choose the tolerances when I export.