Wow! Thanks for detailed and beautiful write-up vocx. This certainly helps
Let me try and summarize some of what I gleaned from your post in my own words.
I'm still a bit confused. I guess my hang-up is that I want the ability to have full-fledged "assembly-like funtionality" in FreeCAD, and both of these extensions seem related to "assemblies".
First, to clarify "assembly-like functionality", I mean the ability to create parts that behave as a group, and compose them together with other parts to build more complex parts, and ultimately full-fledged machines.
Assembly on the Wiki offers a good introduction.
Now, to offer more detail on how both of these extensions seem related to me.
App::OriginGroupExtension
App::OriginGroupExtension is used with
Std Part (
App::Part). Therefore, using this extension makes your custom scripted object behave like a
Std Part?
From
Std Part:
The Std Part element was developed to be the basic building block to create mechanical assemblies. In particular, it is meant to arrange objects that have a Part TopoShape, like Part Primitives, PartDesign Bodies, and other Part Features.
From
Assembly:
The Std Part is intended to be the basic building block to create assemblies. Unlike a PartDesign Body, an assembly is meant to be a collection of separate, distinguishable elements which are connected in some way in the physical world, for example, through pressure, screws, or glue.
App::OriginGroupExtension is also used with
PartDesign::Body, which also has an Origin, and can group features.
Part::AttachExtension
Part::AttachExtension can be used with
Part::Datum, and
Part::Datum is used with
PartDesign::Body. It simply allows a part to be parameterically linked, or attached to a
PartDesign Body using
Part Attachment.
From
Datum:
datum objects were intended to be used inside PartDesign Bodies. However, since they are useful "reference" objects with different attachment methods, it has been proposed that they should be available outside of the PartDesign Workbench. In this way, they will be usable in all workbenches as supporting geometry, particularly in the context of creating assemblies.
Due to current limitations, this only works with
Part::Datum, and thus
PartDesign::Body, which groups together parts into one distinct and indistinguishable part.
However, it's been proposed to extend this idea to
Std Part (
App::Part). Thus, if we did extend this idea to
App::Part, then we could "attach" one part to a group a distinguishable parts. This is a current and known limitation.
Is my understanding of all this correct?
Ideally I want to fill in the blanks of the below statements, and capture in a sentence
why you'd want to use each extension:
For building custom scripted objects with assembly-like behavior:
- Use App::OriginGroupExtension to _______
- Use Part::AttachExtension to _______
Here's my take:
- Use App::OriginGroupExtension to compose together Part TopoShape, like Part Primitives, PartDesign Bodies, and other Part Features, seen as separate and distinguishable units, so that they can be moved together in the 3D view (see below GIF)
- Use Part::AttachExtension to give Part::Datum, and thus PartDesign::Body, seen as indistinguishable units, the ability to be "attached to" using Part Attachment (see below GIF)
Let me know if something I said is wrong, partially correct, of if you'd add or change anything.
App::OriginGroupExtension
Part::AttachExtension
