Link (internally App::Link
) is an important new feature introduced in FreeCAD 0.19 assemblies.
This repository aims to layout one pattern for complex assemblies involving dynamic linked objects which aims to reduce duplication of assembly related logic such as orientation, positioning, or number of instances.
To illustrate the dynamic linked object concept, consider a table with four legs.
Each leg has two different variants:
- Round
- and Square
The variants can be controlled by a parameter in a spreadsheet.
For our table model, we'll create five separate documents:
TableTop.FCStd
- containing the top of the table.RoundTableLeg.FCStd
- containing a ''round'' table leg.SquareTableLeg.FCStd
- containing a ''square'' table leg.Table.FCStd
- containing the assembly of the table top and legs.Spreadsheet.FCStd
- containing a spreadsheet to drive the model.
Our simple table model will define the following parameters in Spreadsheet.FCStd
:
TableTopSize
- Dimension of the square table top.TableTopThickness
- Thickness of the table top.TableLegSize
- Size of each table leg. For Square leg, this is the dimension. For Round leg, this is the diameter.TableLegHeight
- Height of each table leg.TableLegVariant
- Controls the style of table leg. Possible values include "Square
" and "Round
".
Table.FCStd
is where the dynamic linked object concept is illustrated.
The goal is to not duplicate the following assembly logic for each table leg variant:
- Each table leg must appear four times underneath each corner of the table top.
How this is accomplished:
- The
TableTop
and one of the TableLeg objects (Round or Square) are linked into theTable
document. - The TableLeg link is renamed to
TableLeg
and the "Linked Object" property is changed to the following conditional expression:<<Spreadsheet>>#Spreadsheet.TableLegVariant == <<Square>> ? <<SquareTableLeg>>#<<SquareTableLeg>>._self : <<RoundTableLeg>>#<<RoundTableLeg>>._self
- Each table leg must appear four times underneath each corner of the table top so an orthogonal array is created using the parametric
TableLeg
link as a base object.