The PartOf Facet
Lesson 12 of 16 • ~6 min
Try it yourself!
Practice the concepts from this lesson in the interactive playground.
Overview
The PartOf Facet handles relationships and containment between elements, checking if an element is part of or contained within another element or assembly. This is crucial for ensuring proper model organization and completeness.
Why Relationships Matter
Relationships enable:
- Model Organization - Proper hierarchical structure
- System Integration - Elements assigned to appropriate systems
- Spatial Context - Elements located in correct spaces/floors
- Assembly Integrity - Components properly grouped
- Quality Assurance - No orphaned or misplaced elements
IFC Relationship Types
IDS supports six relationship types for "part-of" checking:
| Relationship | Purpose | Example |
|---|---|---|
| IFCRELAGGREGATES | Larger element aggregates smaller ones | Building → Building Storeys |
| IFCRELNESTS | Element physically nested/attached | Window nested in Wall |
| IFCRELCONTAINEDINSPATIALSTRUCTURE | Spatial containment | Column contained in Storey |
| IFCRELASSIGNSTOGROUP | Assignment to logical groups | HVAC components → System |
| IFCRELVOIDSELEMENT | Void cutting element | Opening voids Wall |
| IFCRELFILLSELEMENT | Element fills void | Window fills Opening |
Relationship Categories
Spatial Relationships:
- Elements contained in buildings, storeys, spaces
- Establishes location context
System Relationships:
- Elements assigned to functional groups
- HVAC, electrical, plumbing systems
Assembly Relationships:
- Components aggregated into larger assemblies
- Curtain wall panels, structural assemblies
Nesting Relationships:
- Elements hosted by other elements
- Windows in walls, equipment in spaces
Parameters
Entity (Required)
Purpose: Specifies the IFC class of the "container" or "whole" element
Function: Defines what larger entity should contain this element
Examples:
Entity: "IFCSPACE" ← Element must be in a space
Entity: "IFCDISTRIBUTIONSYSTEM" ← Element must be in a system
Entity: "IFCBUILDINGSTOREY" ← Element must be on a floor
Relation (Optional)
Purpose: Specifies which relationship type to check
Options:
- Specific relation: Only check via specified relationship
- Omitted: Check via any of the six relationship types
- Recursive checking: Searches multiple levels up the hierarchy
Valid Values:
"IFCRELAGGREGATES" ← Assembly/aggregation
"IFCRELNESTS" ← Nesting/hosting
"IFCRELCONTAINEDINSPATIALSTRUCTURE" ← Spatial containment
"IFCRELASSIGNSTOGROUP" ← Group/system assignment
"IFCRELVOIDSELEMENT" ← Void relationships
"IFCRELFILLSELEMENT" ← Fill relationships
How PartOf Checking Works
Specific Relationship Checking
Entity: "IFCSPACE"
Relation: "IFCRELCONTAINEDINSPATIALSTRUCTURE"
→ Element must be spatially contained in a space
Entity: "IFCDISTRIBUTIONSYSTEM"
Relation: "IFCRELASSIGNSTOGROUP"
→ Element must be assigned to a distribution system
General Relationship Checking
Entity: "IFCCURTAINWALL"
(no Relation specified)
→ Element must be part of curtain wall via ANY relationship type
Recursive Checking
When Relation is omitted, IDS searches recursively through multiple levels:
Bolt → nested in → Bracket → nested in → Curtain Wall
Result: Bolt is considered part of Curtain Wall (2 levels up)
Matching Logic
- Find Relationships: Locate all relationships involving the element
- Filter by Type: If Relation specified, only check that type
- Check Entity: Follow relationship to target entity
- Recursive Search: If no direct match, search up the hierarchy
- Pass/Fail: At least one match = pass
In simple terms, the PartOf facet says: Element must (or applies if) be part of an X. Optionally specifying how it’s part of X (via containing, grouping, etc.).
Common Use Cases
1. System Assignment
Requirement: "Every duct must be part of an HVAC system"
Entity: "IFCDISTRIBUTIONSYSTEM"
Relation: "IFCRELASSIGNSTOGROUP"
Result: Ducts must be assigned to a distribution system
2. Spatial Location
Requirement: "Every equipment must be located in a space"
Entity: "IFCSPACE"
Relation: "IFCRELCONTAINEDINSPATIALSTRUCTURE"
Result: Equipment must be spatially contained in spaces
3. Assembly Membership
Requirement: "Mullions must be part of a curtain wall assembly"
Entity: "IFCCURTAINWALL"
Relation: "IFCRELAGGREGATES"
Result: Mullions must be aggregated into curtain wall assemblies
4. General Containment
Requirement: "Components must belong to curtain wall (any relationship)"
Entity: "IFCCURTAINWALL"
(no Relation specified)
Result: Components can be related via aggregation, nesting, etc.
5. Context Filtering
Applicability: "Elements that are part of specific zones"
Entity: "IFCZONE"
Relation: "IFCRELASSIGNSTOGROUP"
Result: Filters to elements assigned to zones
PartOf Facet parameters summary:
- Entity: Required. The IFC class name of the container/whole to check for. Must be given as a valid entity type (e.g. IFCSpace, IFCSystem, IFCWall, etc.). This facet is nested in XML under PartOf; in authoring tools you’d just choose the class. Meaning: the related “parent” object must be of this class for the facet to pass.
- Relation: Optional. A string identifying which relationship type to use. Must be one of: "IFCRELAGGREGATES", "IFCRELASSIGNSTOGROUP", "IFCRELCONTAINEDINSPATIALSTRUCTURE", "IFCRELNESTS", "IFCRELVOIDSELEMENT", or "IFCRELFILLSELEMENT" . (It might not be case-sensitive in actual use, but typically uppercase is used as shown.) If omitted, all these are considered. If provided, only that one (recursively) is considered . Meaning: the facet will specifically check via that relationship type.
Practical Examples
1. Direct Assembly Composition
Applicability: "Elements directly composing a curtain wall"
Entity: "IFCCURTAINWALL"
Relation: "IFCRELAGGREGATES"
Result: Finds panels/members aggregated into curtain walls
2. Indirect Assembly Membership
Applicability: "Any element part of curtain wall (any level)"
Entity: "IFCCURTAINWALL"
(no Relation specified)
Result: Finds elements related at any hierarchy level
3. System Components
Applicability: "All HVAC system components"
Entity: "IFCDISTRIBUTIONSYSTEM"
Relation: "IFCRELASSIGNSTOGROUP"
Result: Elements assigned to distribution systems
4. Spatial Containment
Applicability: "Elements located in spaces"
Entity: "IFCSPACE"
Relation: "IFCRELCONTAINEDINSPATIALSTRUCTURE"
Result: Elements with spatial containment in spaces
5. Element Hosting
Applicability: "Elements hosted by walls"
Entity: "IFCWALL"
Relation: "IFCRELNESTS"
Result: Windows, doors, other elements nested in walls
6. Void Relationships
Applicability: "Voids that cut elements"
Entity: "IFCELEMENT"
Relation: "IFCRELVOIDSELEMENT"
Result: Openings that void building elements
Usage Summary
| Use Case | Entity | Relation | Result |
|---|---|---|---|
| System assignment | IFCDISTRIBUTIONSYSTEM | IFCRELASSIGNSTOGROUP | In system |
| Spatial location | IFCSPACE | IFCRELCONTAINEDINSPATIALSTRUCTURE | In space |
| Assembly parts | IFCCURTAINWALL | IFCRELAGGREGATES | Part of assembly |
| Hosted elements | IFCWALL | IFCRELNESTS | Nested in wall |
| General containment | IFCBUILDING | (none) | Related via any type |
Best Practices
Specify Relation When Possible
Problem: Omitting Relation can cause unintended matches
❌ Ambiguous: Entity="IFCBUILDING" (no Relation)
✅ Clear: Entity="IFCBUILDING", Relation="IFCRELCONTAINEDINSPATIALSTRUCTURE"
Choose Appropriate Relations
| Scenario | Recommended Relation |
|---|---|
| Spatial containment | IFCRELCONTAINEDINSPATIALSTRUCTURE |
| System assignment | IFCRELASSIGNSTOGROUP |
| Assembly composition | IFCRELAGGREGATES |
| Element hosting | IFCRELNESTS |
| Void relationships | IFCRELVOIDSELEMENT / IFCRELFILLSELEMENT |
When to Omit Relation
- When you truly mean "related in any way"
- For flexible requirements across multiple relationship types
- When checking general containment concepts
Key Benefits
The PartOf facet is essential for:
Model Completeness:
- Ensures no orphaned elements
- Verifies proper spatial assignment
- Confirms system membership
Quality Assurance:
- Validates model hierarchy
- Checks assembly integrity
- Ensures proper organization
Project Requirements:
- Enforces modeling standards
- Validates deliverable completeness
- Supports automated checking
Facet Summary
With all six facets covered, here's how they work together:
| Facet | Focus | Purpose | Example |
|---|---|---|---|
| Entity | Object type | What type of object | IfcWall, IfcDoor |
| Attribute | Built-in properties | Intrinsic attributes | Name, Description |
| Classification | External codes | Standardized tags | OmniClass, Uniclass |
| Property | Custom data | Extended information | FireRating, LoadBearing |
| Material | Physical composition | Material assignments | Concrete, Steel |
| PartOf | Relationships | Containment/grouping | In space, Part of system |
Combining Facets
Facets work together to create precise requirements:
Applicability:
- **Entity**: "IFCWALL"
- **Material**: "concrete"
- **PartOf**: Entity="IFCBUILDINGSTOREY"
Requirements:
- **Property**: PropertySet="Pset_WallCommon", Name="FireRating"
- **Classification**: System="Uniclass 2015", Value="EF_25_10.*"
Result: Concrete walls on building storeys must have fire ratings and Uniclass classification