When you see a Building Information Model (BIM), it’s easy to think of it as just a fancy 3D picture of a building. But the real power isn’t in the picture; it’s in the information.
A foundational concept of BIM is that it is not the 3D model.
The 3D model you see is just one visual report that the computer generates by reading a smart database. This database is the single source of truth. The 3D view, 2D floor plans, sections, and cost schedules are all just different interpretations of that same central data.
In this database, the computer doesn’t just see shapes—it understands what a Wall (like #30), a Window (like #70), and a Storey (like #15) actually are.
But how does this work? Let’s look “under the hood” using the open data standard called IFC (Industry Foundation Classes).
1. Every Object Has a “Digital ID Tag” (The GUID)
Every single object in an IFC file—from the IfcProject (#10) down to the smallest IfcWall (#30)—is assigned a Globally Unique ID (GUID). Think of it as a permanent “digital ID number” for that specific wall.
You can see it in the code snippet: #30= IFCWALL('3FV9p1T4X3fBqgE$sU7soV',...);
Why is this so important? Even if you change the wall’s length, material, or location in a new version of the file, its GlobalId ('3FV9p1T4X3fBqgE$sU7soV') must stay the same. This is how change-detection software knows it’s the same wall that was modified, not a new wall that was added.
This permanent ID is what makes traceability possible. It’s the unique “name” that the “digital footprint” (the OwnerHistory, which we’ll see next) is attached to.
2. Every Object Has a “Spatial Address”
You can’t just have a wall floating in digital space. Every physical element in an IFC model must “live” somewhere. The model uses a clear hierarchy, like a set of nesting dolls or folders on your computer, to give every object an “address.”
This relationship is managed by an object called IfcRelContainedInSpatialStructure (like #100).
The typical hierarchy looks like this:
IfcProject(#10) (The entire project)IfcSite(#11) (The physical site/land)IfcBuilding(#13) (The building itself)IfcBuildingStorey(#15) (e.g., “Ground Floor”)IfcWall(#30),IfcWindow(#70),IfcSlab(The actual elements)
Because of this, the computer knows that the IfcWall (#30) isn’t just “a wall”—it’s the wall with Tag-W01 on the “Ground Floor” (#15) in the “Main Building” (#13) on the “Main Site” (#11).
3. Every Object Has a “Digital Footprint”
Nearly every object in an IFC file also has an OwnerHistory. This is the model’s “audit trail” or “digital footprint.” This is what the GlobalId makes traceable. It’s a small log book (like #5) attached to every element that tracks key information.
This IfcOwnerHistory object (#5) answers the crucial questions:
IfcWall(#30) (The Object)OwnerHistory(The “Log Book” Attribute, pointing to#5)- Who: The user and organization (defined in
#2and#3). - What: The software used (defined in
#4). - When: The timestamp of when it was created or modified.
- How: The action taken (e.g., “ADDED”, “MODIFIED”).
- Who: The user and organization (defined in
4. How Objects Connect: The Wall & Window Example
This is the most clever part. In the real world, a window is in a wall. But in an IFC file, they are three separate, independent objects:
IfcWall(#30)IfcOpeningElement(#50): The “hole” or “void” in the wall.IfcWindow(#70): The window frame, glass, and hardware.
They are then connected by specific “relationship” objects.
This hierarchy shows the logic:
IfcWall(#30) (The “Host” Element)- is linked by
IfcRelVoidsElement(#101) (Relationship: “Has a Hole”)- to the
IfcOpeningElement(#50) (The “Void” Object)- which is linked by
IfcRelFillsElement(#102) (Relationship: “Is Filled By”)- to the
IfcWindow(#70) (The “Filling” Element)
- to the
- which is linked by
- to the
- is linked by
Because of this, a computer can understand the full story: “The Wall (#30) has an Opening (#50), and that Opening (#50) is filled by this specific Window (#70).”
But Wait… That’s Not How I Model!
This is a common point of confusion: if you use a tool like Revit or ArchiCAD, you don’t model a separate “hole.” You just click the “Window” tool and place a window into a wall.
This is the key difference between a user-friendly modeling tool and a transparent data-exchange file.
- In Revit/ArchiCAD (Native Model): You use a “Host-Hosted” relationship. The
Wallis the “Host,” and theWindowis its “Guest.” The window object is programmed to automatically cut its own hole for speed and convenience. It’s fast for the designer, but the relationship is hidden inside the software’s code. - In IFC (Open Data File): When you export, the software translates this. It sees your window, reads its width and height, and automatically generates the
IfcOpeningElement(#50) (the hole) for you. It then creates the two relationship objects (#101,#102) to link all three items separately.
Why? For interoperability. This is the core reason. A cost-estimating tool (for 5D) or a scheduling tool (for 4D) doesn’t understand ArchiCAD’s or Revit’s special, internal “hosting” code. That code is a proprietary “black box.”
Instead, that 5D tool needs to ask simple questions, and the IFC structure provides simple, open answers:
- 5D Tool asks: “How many windows do I need to buy?”
- IFC answers: “I have 50
IfcWindowobjects (like#70). Here is a list.”
- IFC answers: “I have 50
- 5D Tool asks: “What is the structural cost for the openings?”
- IFC answers: “I have 50
IfcOpeningElementobjects (like#50). Here are their dimensions for your lintel and formwork calculations.”
- IFC answers: “I have 50
By separating the objects, IFC makes the data transparent and “readable” for any software, not just the one that created it. It ensures that the simple, universal logic of “This opening is filled by this window” is preserved for everyone.
A Peek at the Code
Here is a simplified snippet of an IFC file. You can see the hierarchies in action, with comments /* ... */ explaining each part.
ISO-10303-21;
HEADER;
/* ... File header information ... */
FILE_NAME('AEColution-Project-Sample.ifc','2025-10-29T11:15:00',('Suranga Jayasena'),('AEColution'),'ArchiCAD 28','IFC-Engine 1.0','S. Jayasena');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
/* PART 1: The "Owner History" (Who & What) */
/* This defines the 'who' and 'what' that will be stamped on all objects */
#1= IFCORGANIZATION('AEColution','AEColution',...);
#2= IFCPERSON('SJ','Jayasena','Suranga',...);
#3= IFCPERSONANDORGANIZATION(#2,#1,$);
#4= IFCAPPLICATION(#1,'28.0','ArchiCAD 28','ArchiCAD');
/* This "Log Book" (#5) will be stamped on our objects */
#5= IFCOWNERHISTORY(#3,#4,$,.ADDED.,1761745500,$,$,1761745500);
/* PART 2: The "Spatial Hierarchy" (Where) */
#10= IFCPROJECT('3aV$c50LP4xP$870JqGv9E',#5,'AEColution Project',...);
#11= IFCSITE('1bA$c50LP4xP$870JqGv9F',#5,'Main Site',...);
#12= IFCRELAGGREGATES('3jF$c50LP4xP$870JqGv9I',#5,$,$,#10,(#11));
#13= IFCBUILDING('2cV$c50LP4xP$870JqGv9G',#5,'Main Building',...);
#14= IFCRELAGGREGATES('2kG$c50LP4xP$870JqGv9J',#5,$,$,#11,(#13));
#15= IFCBUILDINGSTOREY('0dV$c50LP4xP$870JqGv9H',#5,'Ground Floor',...);
#16= IFCRELAGGGREGATES('1lH$c50LP4xP$870JqGv9K',#5,$,$,#13,(#15));
/* PART 3: The "Physical Elements" (What) */
/* The Wall, note its GlobalId '3FV9p1T4X3fBqgE$sU7soV' and owner history #5 */
#30= IFCWALL('3FV9p1T4X3fBqgE$sU7soV',#5,'Basic Wall',$,'W-1',...);
/* The Opening, with its own GlobalId '2eA4g1T4X3fBqgE$sU7soW' */
#50= IFCOPENINGELEMENT('2eA4g1T4X3fBqgE$sU7soW',#5,'Window Opening',...);
/* The Window, with its own GlobalId '1fB3j1T4X3fBqgE$sU7soX' */
#70= IFCWINDOW('1fB3j1T4X3fBqgE$sU7soX',#5,'Standard Window',$,'WIN-1',...);
/* PART 4: The "Relationships" (How they connect) */
/* 1. Spatial: Puts Wall (#30) and Window (#70) in Storey (#15) */
#100= IFCRELCONTAINEDINSPATIALSTRUCTURE('3gC2k1T4X3fBqgE$sU7soY',#5,$,$,(#30,#70),#15);
/* 2. Assembly (Void): Connects Wall (#30) to Opening (#50) */
#101= IFCRELVOIDSELEMENT('2hD1l1T4X3fBqgE$sU7soZ',#5,$,$,#30,#50);
/* 3. Assembly (Fill): Connects Opening (#50) to Window (#70) */
#102= IFCRELFILLSELEMENT('1iE0m1T4X3fBqgE$sU7s10',#5,$,$,#50,#70);
ENDSEC;
END-ISO-10303-21;
So, the next time you look at a BIM model, remember: you’re not just seeing a 3D object. You’re seeing a node in a rich, intelligent database, connected by a web of relationships that tell the complete story of your project.






