Organize FreeCAD Assemblies with Part Containers
Managing complex assemblies in FreeCAD requires a disciplined structural approach to prevent dependency loops, model breakage, and visual clutter. This guide provides an efficient strategy for using FreeCAD containers—specifically the standard Part container and PartDesign Body—to create clean, modular, and hierarchical assemblies that are easy to modify and scale.
Distinguish
Between PartDesign::Body and App::Part
A common source of confusion in FreeCAD is the distinction between a Body and a Part container:
PartDesign::Body(Blue Icon): Represents a single, contiguous solid piece of material. Every feature inside a Body (pads, pockets, fillets) merges sequentially. Never place multiple distinct parts inside a single Body.App::Part(Yellow Gear/Part Icon): Represents a mechanical component or an entire assembly. AnApp::Partcan hold multiple Bodies, other Parts, sketches, and datum tools. Crucially, it possesses its own spatial coordinate system (Placement), allowing you to position and rotate grouped objects together.
Build a Hierarchical Tree Structure
To keep a complex assembly organized, avoid flat trees where dozens of bodies sit at the root level. Instead, build a nested hierarchy:
- Top-Level Assembly (
App::Part): Create a master Part container to encompass the entire design. - Sub-Assemblies (
App::Part): Inside the master container, create nestedApp::Partcontainers representing distinct mechanical sub-systems (e.g., "DriveTrain", "Chassis", "Gantry"). - Individual Components
(
PartDesign::Body): Inside each sub-assembly container, create individual Bodies for each separate manufactured component.
Manage Positions Using Local Coordinate Systems
Do not alter the Placement property of individual
features (like sketches or pads) to move a component into place.
Instead:
- Design each
PartDesign::Bodyaround its own logical origin (e.g., centered on its primary mounting hole or symmetry plane). - Move the parent
App::Partcontainer or the top-levelPartDesign::Bodyby modifying itsPlacementproperty in the Data tab. - Moving an
App::Partmoves all of its nested child Parts, Bodies, and reference geometries simultaneously without breaking internal sketch references.
Connect Components with SubShapeBinders
When geometry from one Body depends on another (such as aligning bolt holes between two separate parts):
- Activate the target Body where the new feature will be built.
- Select the reference face or edge on the external component.
- Use the SubShapeBinder tool from the Part Design workbench.
- Reference the binder within your sketches rather than referencing external geometry directly.
This ensures references remain stable, avoids cyclic dependencies, and keeps cross-part links explicit in the tree view.
Standard Parts vs. Visual Groups
Do not rely on standard document folders
(App::DocumentObjectGroup) to manage spatial assemblies.
Document groups only visually hide or show objects in the tree view and
lack a shared coordinate system. Always use the App::Part
container when organizing components that share physical or spatial
relationships.
Assembly Best Practices
- Explicit Naming: Rename every Body and Part
container immediately upon creation (e.g.,
Part_XAxis_MotorMountinstead ofBody004). - Color-Code Sub-Assemblies: Apply distinct colors at
the
App::PartorBodylevel to quickly identify different sub-assemblies in the 3D viewport. - Limit Dependency Depth: Keep inter-part references shallow. Design components around shared master sketches (skeleton modeling) placed at the sub-assembly root rather than chaining references through multiple individual parts.