Links : This is just an Object Reference Link. You need to check manually if any changes of properties are occured (Manual “Refresh”)
Bind : By using events, any changes from a linked object properties will throw an update of all properties which depends of this linked object. (Auto “Refresh”)
Clone : Duplicate an Object. All properties are the same as the source. You modify the source properties and all clones will have these same properties. (Create a new object with a link of the source object to get all properties, except position and rotation values)
Copy : Duplicate an Element. Each Element properties can be then modified individually. (Create a new object instance with the same properties)
Links and Clones have both their own Placement and attachment and they have a scale.
I don’t think you are right here. It is even the other way round: The link denotes the same object, and thus the link has the same properties as its source. When you change a property in the link, it is in fact changed in the source object.
Clones show a special behaviour when applied to a compound: They can fuse the compound as if a union was made.
A ShapeBinder or a SubShapeBinder is rather a proxy of an object than a real object.
but isn’t that already the behavior? when you make a clone it takes the placement of the original object, but then doesn’t follow further modifications and can be independently modified.
The Goal of the Binding Feature : Avoid to manually add via formula the position and rotation params for all axis of the source each time we need to create a new clone relative to source properties.
By having just a CheckBox to click, it could be more usefull
About links, I was speaking in general about a POO object link which means for me an object pointer.
But you’re right, the Link object in FreeCAD is not ONLY a simple pointer.
After reading the documentation, I can say I feel I’m not totally wrong :
Instead a clone who seems duplicate an object instance with the same properties (and loads each object in memory), a Link object should store only the object reference.
Then if you want several “clones” it should stores in an array several objects with only the properties of the linked object. By this way you can modify position, rotation, etc. for each “clone” and allow or not to keep some properties as the colors.
So in memory you should store only an array of clones’ properties lists and a pointer of the “linked” object.
It is efficient because when you want to display the object, you just need to load the 3D features of the linked objet from the same place in memory by the object pointer (only one instance in memory) and send the custom properties for each “clone” stored in the array.
Moreover, combined with some Duplicate feature as the Draft Array you just duplicate the object pointer several times, not object instance.
It should look like an advanced array of pointer instead an advanced array of object instance.
I can see there are also some additional features for a usage between several documents.
I don’t know how it is coded, This is just my feeling, so if I’m wrong don’t hesitate to reply me.