The PartOf Facet

Lesson 12 of 16 • ~6 min

Try it yourself!

Practice the concepts from this lesson in the interactive playground.

Try in 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

  1. Find Relationships: Locate all relationships involving the element
  2. Filter by Type: If Relation specified, only check that type
  3. Check Entity: Follow relationship to target entity
  4. Recursive Search: If no direct match, search up the hierarchy
  5. 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