After having read in the forums for a while, I finally registered just to be able to post in this thread. I recently reached a point in my projects where a need for proper assembly functionality was starting to emerge, and having investigated the options, I wanted to put in my thanks for the Assembly 4 workbench.
My technical and professional background is primarily as a self-taught software developer (for many years, within a lot of different domains including some 3D graphics), with some additional experience of doing graphical design work. I have very little experience of CAD software, though I have been dabbling with FreeCAD, BRL-CAD and OpenSCAD on a hobby basis over the past few years, finding each has its own merits and drawbacks. My dabbling has eventually converged on FreeCAD as the software that clearly has the highest potential, and I'm happily seeing that development really seems to be making strides recently (especially with realthunder's brilliant branch which seems to address a lot of annoyances I didn't even know I had, sometimes in ways I could never have thought of!). Between my background and the three main assembly workbenches on offer, Assembly 4 was the one that I found to be the most intuitive to work with. Let me elaborate on my thinking, in two points:
(These are just my immediate observations as an amateur with limited experience; I may very well be wrong about some things, feel free to inform me if so.)
- Simplicity. Not to be confused with "it's easy to click around and apparently make things happen the way I think I want them", but as in, I immediately understand the model, and can start constructing things in a structured manner. With Assembly 3, which is the other workbench I've given a proper try, I found the geometry-constraint-solver approach to require much more deliberation, since it works by subtracting DoF from an initially completely unbound system. This results in the actual attachment of parts to each other almost emerging as a pure side effect of constraining the model, instead of being the starting point like in Assembly 4. Transcribed to programming concepts, based on my understanding I would say that the Assembly 3 model roughly corresponds to a declarative paradigm, where you describe the relationship of objects, and the functionality is then emergent from the relationships described. It can be a powerful and elegant approach to certain problems (it is notably prevalent in build systems, like make), but it is sometimes very hard to understand and debug, because the flow is implicit rather than explicit.
- Austerity. Assembly 4 seems to add little to the existing data model in FreeCAD, instead implementing assembly functionality by tying together existing FreeCAD features in new ways. That means there is little new one has to learn as a new user, if one is already familiar with the features in question. As a software developer I also think this is great, because it makes it a rather minor addition from a programming point of view, meaning it will likely be easier to maintain and adapt than would be a large system with lots of code. I also like that it doesn't add any dependencies on a solver for example, since external dependencies can be a real pain from both maintenance and distribution points of view.
And finally, I found the origin story to be a really inspiring read! It was a pleasure to be able to follow Zolko's initial suggestion, into him learning to implement it himself, and then finally to the release of a new workbench.
As for problems, I've managed to run into a few so far, the biggest being that changing the file and folder structure of an assembly will break it and require lots of manual fixing. It's not a complaint, given how there are currently no facilities in FreeCAD for separating the logical and physical aspects of different documents. It does make me think, however: What if documents themselves could be expressed symbolically as "links", and not be equivalent to actual physical files? Then restructuring a project would require only updating the document "links", after which everything else would continue working as before. It would require the introduction of some sort of "meta-document" concept though; or what I would think of as more in line with a "project" (which seems(?) to be a term that's used interchangably with "document" in FreeCAD today). An additional benefit to that approach would be that it could introduce the possibility to add grouping of documents to the tree view, which seems like it would be highly beneficial in a project with a few hundred documents or more. Any thoughts on this?