The Entity Facet

Lesson 7 of 16 • ~5 min

Try it yourself!

Practice the concepts from this lesson in the interactive playground.

Try in Playground

Overview

The Entity Facet is the most fundamental facet because it deals with IFC entity types (classes). Every object in an IFC model belongs to an IFC class.

Why Entity Facet Matters

Class Determines Capabilities:

  • Object class determines available properties and relationships
  • Example: IfcWall can have FireRating property, IfcGrid cannot
  • Almost every Specification starts with Entity facet to target correct elements

Common IFC Classes:

  • IfcWall - Wall instances
  • IfcDoor - Door instances
  • IfcProject - Project container
  • IfcWallType - Wall type definitions

Parameters

Name (Required)

Purpose: Specifies the IFC class name to match

Format: IFC schema notation (e.g., "IFCWALL" for IfcWall)

Features:

  • Must specify a class
  • Supports complex restrictions (lists of classes)

Examples:

Name: "IFCWALL"              ← Matches all walls
Name: ["IFCWALL", "IFCSLAB"]  ← Matches walls OR slabs

Predefined Type (Optional)

Purpose: Further qualifies entities with subtypes

Function:

  • Many IFC classes have PredefinedType attribute
  • Categorizes entities more specifically
  • Not all entities have predefined types

Features:

  • Optional parameter
  • Supports restrictions (lists of types)

Examples:

Name: "IFCWALL"
PredefinedType: "PARTITIONING"  ← Only partition walls

Name: "IFCWALL"  
PredefinedType: ["SHEAR", "BEARING"]  ← Structural walls only

Allowed values: The Name must be a valid IFC entity name from the relevant schema (IFC2X3, IFC4, etc.), and Predefined Type must be one of the valid predefined type values for that entity (or a custom value, since IFC allows custom predefined types as free text) . For instance, valid Name could be “IFCSLAB” and PredefinedType “FLOOR” for floor slabs . It’s recommended to use standard predefined types when possible (each IFC schema’s documentation lists them for the entity) , but you can also use custom text if needed.

Usage Examples

Applicability Examples

Use Case Configuration Result
Partition walls Name="IFCWALL"
PredefinedType="PARTITIONING"
Targets only partition walls
All door types Name="IFCDOORTYPE" All door type definitions
Building storeys Name="IFCBUILDINGSTOREY" All floor/level elements
Project documents Name="IFCDOCUMENTINFORMATION" Drawings, specs, etc.
Distribution systems Name=["IFCDISTRIBUTIONSYSTEM",
"IFCDISTRIBUTIONCIRCUIT"]
HVAC, electrical systems
Construction tasks Name="IFCTASK"
PredefinedType="CONSTRUCTION"
Construction-related tasks

Requirement Examples

Entity facets can also be used in Requirements to enforce element types:

Applicability: All elements with "door" in name
Requirement: Must be Entity Name="IFCDOOR"

Result: Ensures elements named as doors are actually IFC door entities

These examples illustrate filtering by class. In an IDS, you might use an Entity facet in Applicability to say “this spec applies to all X” and possibly use another Entity facet in Requirements to say “must be of class Y” if you are enforcing a class (though it’s more common to use Entity facet in Applicability).

Guidance for finding class names and types: If you are not sure about the exact IFC class name or available predefined types, the IFC documentation is your friend. For any IFC version:
1. Go to the online IFC documentation and find the entity’s page (for IFC4X3, there’s an alphabetical list of entities ; for older versions, similar lists exist).
2. On the entity’s page, scroll to the Attributes section to see if PredefinedType is listed. If yes, it usually links to an enumeration of allowed values for that type.
3. Click that link to see the list of allowed PredefinedType values for that entity (e.g. clicking IfcWall’s PredefinedType leads to the IfcWallTypeEnum listing values like SHEAR, PARTITIONING, etc.) .
4. Use those exact names in your IDS if you want to filter by predefined type.

Most IDS authoring tools will provide a dropdown or autocomplete for class names and predefined types to help you. If not, use the documentation links above. Choosing the correct class is crucial; typically if a requirement is about walls, you use IfcWall (or possibly IfcWallStandardCase in older IFC2X3 if needed, though IFC4 unified walls under IfcWall).

Also note, if you want to include sub-types: in IFC4+, many specific element types (like IfcAirTerminal) are distinct classes. In IFC2X3, some specific elements were represented by a combination of a generic class plus a type object. For example, an air terminal in IFC2X3 appears as an IfcFlowTerminal with an associated IfcAirTerminalType. The IDS Entity facet doesn’t directly allow specifying “AirTerminalType” in IFC2X3 because that’s not an occurrence class. The recommended approach (and the one IDS uses) is to specify the occurrence class as if using the IFC4 paradigm. In this example, you’d use IfcAirTerminal in the IDS even for IFC2X3, and the checking software will internally map that to checking an IfcFlowTerminal with an IfcAirTerminalType . This nuance is mostly relevant to implementers, but as an author just be aware that some IFC2X3 entities have this mapping to IFC4 classes (the IDS standard provides a mapping table for these cases ). The bottom line: use the more specific entity name (IfcAirTerminal rather than IfcFlowTerminal) and IDS will handle it for older schemas.

Entity Facet Parameters Summary:

  • Name (IFC Class name) – Required. Restrictions allowed (you can list multiple classes or use patterns, though listing classes is more common). The IFC entity must match this class exactly.
  • Predefined Type – Optional. Restrictions allowed. Must be a valid predefined type value for that class (or a custom value). The IFC element’s PredefinedType attribute must match this if provided.

Entity Facet Example Use Cases:

  • Applicability: “All partition walls” – Facet: Name=“IFCWALL”, PredefinedType=“PARTITIONING” (includes only walls of type partitioning) .
  • Applicability: “All floor slabs” – Facet: Name=“IFCSLAB”, PredefinedType=“FLOOR” (floor slabs) .
  • Applicability: “All door types (for door schedule)” – Facet: Name=“IFCDOORTYPE” (any door type, no predefined type needed) .
  • Applicability: “All building storeys” – Facet: Name=“IFCBUILDINGSTOREY” .
  • Applicability: “All related documents (drawings, manuals)” – Facet: Name=“IFCDOCUMENTINFORMATION” .
  • Applicability: “All distribution systems (hot water, electrical, etc.)” – Facet: Name=[“IFCDISTRIBUTIONSYSTEM”, “IFCDISTRIBUTIONCIRCUIT”] (allows either class) .
  • Applicability: “All construction tasks” – Facet: Name=“IFCTASK”, PredefinedType=“CONSTRUCTION” (tasks marked as construction tasks) .

Each of these could also be used as a requirement facet if you needed to enforce that an element is of a certain class or type. But typically, you use Entity facet in Applicability to select elements of interest.