Hi!
I don’t know why, I felt a desire to post an overview of changes to PartDesign, highlighting the most important differences from user perspective.
First of all, why old PartDesign is rubbish, and why I stopped using it:
parametric solid-to-solid relations are prohibited. I find it very natural to have parts in an assembly depend on each other, because they need to mate each other.
linear dependency graph is the best way to make parametric links broken
Sketches that must be attached to faces (faces are highly specific links prone to breakage), which adds to link instability problem. Yet, it is very often that a sketch is to lie on one of the base planes (XY, XZ, YZ; especially true when designing bodies of revolution).
(consequence of 2, 3, and the lack of topo naming) is it very hard to delete or substantially alter a feature in the middle of the history
Some pads or pockets can take long time to compute, because of the Boolean operations that are happening in the process. There’s no way to postpone these operations (this is a limitation of FreeCAD as a whole, but it is especially a problem of PartDesign, because in Part, one can first design the individual features, and once happy with them, start the fusing process).
Pieces can’t be moved without a long recomputation of all geometry (clones aside)
What’s been changed:
Linear dependency graph is no longer enforced, because:
1.1 sketches can be attached to anything, including base planes, and other solids. Same applies to links to external geometry: anything that does not create a loop in dependency graph is allowed.
1.2 individual solids can depend on each other
1.3 Parts can have as many solids as needed
This can solve many link instability problems, by linking cleverly (generally, by linking to the earliest possible state, or by having special skeleton pieces and linking just to them)
Part and Body containers have been introduced. Part keeps together all the stuff related to a part (a set of objects that are to be moved together during assembly). Part can contain PartDesign Bodies, Part-workbench objects, and other stuff. Bodies keep chains of PartDesign features together. That is, a Body contains a chain of operations to build a single solid shape. As of now, Bodies are not moveable.
Parts and Bodies are made to:
2.1 keep the tree view nice and organized
2.2 features can be easily added into Bodies, and Body will present it’s most recent state to the outside (this should solve the situations like “I have made a pocket in my part, why wasn’t it’s clone updated accordingly?”)
2.3 Part can be placed. Everything contained in the Part is translated/rotated, without causing a recompute. The links to outside of Part will be as if the Part is at the origin, so even a forced recompute will not alter the geometry of the Part. (As far as I understand, this is the fundamental difference that was required to make Assembly work.)
The new dependent copy creation mechanism should keep the model tree nice and clean, as well as provide some possibility to rip parts off a complex design into a new document. (This is how I understand it, it is about the dialog when linking outside of Part, where there are three options)
Lots of new stuff was added to PartDesign:
4.1 Datum planes, lines and points, for use as sketch attachment, mirror planes, revolution axes, and otherwise help construct models.
4.2 Loft, Sweep and Thickness are now in PartDesign. Lofts and Sweeps in PartDesign support creation of pipes in one operation, unlike their Part wb versions.
4.3 Some geometric primitives are now in PartDesign
4.4 Mirrored , Polar Pattern, Linear Pattern and Multitransform now can transform multiple features at once.
4.5 Involute Gear is now attachable, like sketches. This also applies to a multitude of stuff from Draft workbench (to everything that is derived from Part::Part2DObject; it needs some attention).
Now, summarize how the “rubbish” points were improved
1.parametric solid-to-solid relations are prohibited. Allowed!
2. linear dependency graph is the best way to make parametric links broken. Linear dependency graph is no longer enforced!
3. Sketches that must be attached to faces (faces are highly specific links prone to breakage), which adds to link instability problem. Fixed!
4. (consequence of 2, 3, and the lack of topo naming) is it very hard to delete or substantially alter a feature in the middle of the history Still a problem, but much better now, because linear dependency graph is not enforced, and links between solids are allowed
5. Some pads or pockets can take long time to compute, because of the Boolean operations that are happening in the process. Not much improvement here, although now it is possible to split the model into simpler pieces and later merge them with Booleans, just like in Part wb.
6. Pieces can’t be moved without a long recomputation of all geometry (clones aside) Fixed!
Nice summary! I think you pretty much nailed it, I only have two additions which are not that user relevant, but may be nice for the overall context:
The main PartDesign changes you have listed as point 1 don’t live “next” to the body/part introduction, but are a direct consequence. Only the introduction of a body container allowed to lift the restrictions you mentioned. This is IMHO an important fact to show that the original implementation was not super bad and overly restricted, it was for the most part just unfinished.
What was also new, at least to my knowledge, was the joint effort on this outside of the core team. Initiaded by and code from tanderson, a few rough implementations by me, large important pieces by deepsoic and now the cleanup, detailing and migration by Fat-Zer with all the ongoing discussions and decisions. This is a huge combined workload done by many non-core developpers together, I like this very much and hope for more of this
Part keeps together […] a set of objects that are to be moved together during assembly
In Solid Edge (my preferred CAD) assembly works in that way. Multi-body part, by default is inserted into assembly as one piece (yes, I know that there is export of multi-body part into single, but linked files).
I, personally prefer OnShape’s approach. You can directly put into assembly single bodies from multi-body part.
Nice summary but i wouldn’t say current PartDesign is rubbish. You started using PartDesign NEXT mainly because new features where added allowing you to do more advanced stuff in PartDesign NEXT. Luckily you know how to code and you where able to add some of the features yourself. If you wouldn’t code some of them there is a good chance it would not yet be implemented as there where some second thoughts if user should be allowed to do something or not. Once it was coded and observed it was easier to make conclusions stuff like that will happen anyway and it makes sense to happen.
As for the “breaking design” part rest assure nothing changed much in PartDesign NEXT. Users will still break their body/part/assembly if they will go back and change geometry instead of parameters of existing geometry. And you can’t stay in “horizontal DAG design” forever because as soon as you add relation between two features you are already in “vertical DAG design” and for that the same things apply as for current PartDesign. Solutions on how to overcome that and to localize the issues when they happen are still lacking and will need to be implemented in the future.
Like with expressions where sketcher constraints are uniquely identified and if one is removed only that part in expression needs to be repaired. Once every face in the design tree will have unique identifier it could become easier to remove that face and only repair that sketch loosing support instead of loosing all the faces from that point on.
Anyway good job in making PartDesign Next and a big thank you to all the people involved. What is the plan to merge it in master?
As a bore I have to notice that It was possible in the old partDesign as well, but the implementation was a bit broken… To be honest it was one of the reason why I’ve got interest so much in this branch because of
Also should be noted that Parts have nothing to do with PartDesign (At least I suppose they won’t in the nearest future)… It’s a general object.
I was about to post a question of how people are supposed to use PartDesign, until I decided to search first and found this post. I started using FreeCAD at around version 0.13, and started with PartDesign, and got burned pretty quickly. You know, when you are about ten or twenty steps into a part design and decided to change the constraint on the first few steps, and suddenly all hell break loose. I’ve since switched to Part and developed the habit of always clear Sketch support when possible. I always wondering why would any one want to use PartDesign in the first place ( also, why there is no dedicated button to clear sketch support . But now, it seems it’s time to give it a second try, especially with the emerging assembly capability.
You found a post that is 1 1/2 year old - and still top news! Well, sort of. You may rather have a look at one of the pinned topics in the help section. There are great examples linked: http://forum.freecadweb.org/viewtopic.php?f=3&t=15432
Thanks for the tip. Almost missed it, since you didn’t quote and I didn’t get the notification. I wasn’t actively looking because I have this massive model built in span of more than two years, all using Part. I just can’t afford to turn into PartDesign, yet. Besides, I am busy on other aspect of this project. But there will be time for my venture into this new world. I’ve browsed a few pages of that post, and it is so tempting. Err… if only I was in this forum earlier!
Sorry about not quoting, there was nothing special to refer to and I didn’t have the notification mechanism in mind.
And yes, this forum is great. I see it as a vital part of the whole FreeCAD project where you get individual support for all kind of problems or questions concerning FreeCAD.
Is there a document somewhere telling the entire concept of partdesign? What is the difference between a part and a body? What goes inside what? Does it have to go, etc.
Body. A body is a single solid created from multiple individual PartDesign features. It does group all features used for its creation beneath it in the tree. It does provide an Origin (Planes and axis) which can be used in the features as references. Furthermore it can be freely moved without making it nesseccary to move the individual features.
Part. A part is not related to PartDesign but is a new general FreeCAD element. It provides a local coordinate system and can be used to group any kind of FreeCAD stuff and move it as one unit. This will be the future basis for assemblies.
So, is that saying that a when assemblies are implemented, bodies will be the equivalent of parts in, for eg, autodesk inventor, and parts can be used as assemblies? Are bodies also subclasses of parts?
Well, kind of. Grouping functionality is added as an extension, by multiple inheritance. So if you test body for isDerivedFrom(“App::Part”), it will return “No”. But it almost is.
Excited to see the developments in PartDesign Next. So what else needs to be completed in PartDesign Next before Assembly can be implemented on top of it?