What is in the file
One IFC file, named schema, named model view definition. Below is what a BIM manager opens it to find: the spatial spine, the entity and the geometry carried for each of the 8 element classes, the data attached to every element, and how an element keeps its identity between versions. The counts are read from the sample package on this page, not asserted.
Schema and view definition
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [ReferenceView_V1.2]'),'2;1');
FILE_NAME('Larch Annex','2026-01-01T00:00:00',('Structura'),('Structura'),'structura-pipeline','structura-pipeline','none');
FILE_SCHEMA(('IFC4'));
ENDSEC; Read from the sample you can download on this page. The same model exported twice is the same file, byte for byte — so a re-issue diffs cleanly instead of looking like a new building.
The view definition is the part most conversions leave blank.
Structura declares one and holds to it: geometry is explicit, every element is a real IFC entity of its own class, and nothing depends on a proprietary extension to be read. A receiving tool can validate the file against the named view rather than against whatever the exporter happened to emit.
- Schema
- IFC4
- Length unit
- MILLI · METRE
- Area · volume unit
- SQUARE_METRE · CUBIC_METRE
Project, site, building, storey
- IfcProject
- └ IfcSite
- └ IfcBuilding
- └ IfcBuildingStorey
- └ elements
- └ IfcSpace
Elements hang off their storey with IfcRelContainedInSpatialStructure . Rooms cannot: an IfcSpace is itself a spatial element, so it extends the spine through IfcRelAggregates instead.
Storeys in the sample building, read from its elevation sheets
Larch Annex| Storey | Elevation | Height |
|---|---|---|
| L00 | 0 mm | 4200 mm |
| L01 | 4450 mm | 3400 mm |
| L02 | 8100 mm | 3400 mm |
| L03 | 11750 mm | 3400 mm |
| L04 | 15400 mm | 3400 mm |
| L05 | 19050 mm | 3000 mm |
6 storeys reconstructed from 8 sheets, with 75 recorded assumptions travelling beside the model.
Entity, geometry, count
| Class | PredefinedType | Geometry · what a receiving tool gets | In the sample |
|---|---|---|---|
| IfcWall | SOLIDWALL | Solid A wall you can section, measure and clash, with every door and window it hosts cut out of it as a real opening rather than painted on. | 72 |
| IfcDoor | DOOR · SINGLE_SWING_LEFT | Solid A door panel sitting in its opening and linked to the wall that holds it, so a schedule can count openings wall by wall. | 55 |
| IfcWindow | WINDOW · SINGLE_PANEL | Solid The same, at its measured sill height — the number a facade or daylight check reads first. | 48 |
| IfcColumn | COLUMN | Solid A column of the section the plan shows, standing the full storey height. Geometry and position only: nothing structural is implied. | 24 |
| IfcSlab | FLOOR or ROOF | Solid A floor or roof plate at its storey level, with its thickness — enough for an area take-off and a section, not a build-up. | 7 |
| IfcStair | STRAIGHT_RUN_STAIR | Solid A flight that lands on the storey above, so vertical circulation is present and navigable. No treads, landings or balustrade. | 5 |
| IfcRoof | GABLE_ROOF | Tessellated shell A faceted surface rather than a closed volume: it carries the shape of the pitched roof, and a tool expecting a watertight solid should treat it as a surface. | none here |
| IfcSpace | SPACE · CompositionType ELEMENT | Solid A room volume held on its storey the way the standard says spaces are held, so a space schedule or an FM import finds it where it expects to. | 54 |
Counts are instances of that entity in the sample you can download, which is a flat-roofed building: it carries no IfcRoof . Pitched roofs arrive on the 3D route — the class is in the file, just not in this building.
What else the file carries
- IfcProject 1
one, with the unit assignment
- IfcSite 1
one
- IfcBuilding 1
one
- IfcBuildingStorey 6
one per storey, Elevation from the elevation sheets
- IfcOpeningElement 103
one per hosted door and window
- IfcPropertySet 265
one property set per element
- IfcElementQuantity 54
one Qto_SpaceBaseQuantities per room
- IfcRelVoidsElement 103
opening cut into its host wall
- IfcRelFillsElement 103
door or window filling its opening
- IfcRelAggregates 9
site, building and the rooms on each storey
- IfcOwnerHistory none
omitted deliberately: it would stamp a clock into a file that has to be reproducible
The data attached to every element
Every element carries a property set with its Structura identifier, its class, and the full record of what was measured for it — dimensions, placement, the wall an opening sits in, and the sheet it was read from. It travels inside the file, so an element selected in your viewer answers those questions without anything else being sent with it.
It is a Structura property set, not one of the buildingSMART standard ones. That matters if your systems address the standard sets by name — see what is not in the file yet.
Rooms additionally carry the standard base quantity set, which an FM or space-management system reads by name without a mapping file.
- Height IfcQuantityLength
- room height in millimetres
- GrossFloorArea IfcQuantityArea
- boundary area in square metres
- NetFloorArea IfcQuantityArea
- the same polygon — omitted entirely when an interior hole was discarded, rather than overstating the room
- GrossPerimeter IfcQuantityLength
- boundary perimeter in millimetres
- GrossVolume IfcQuantityVolume
- area × height in cubic metres
An element keeps its identifier
An element nobody edited keeps the same GlobalId every time the model is exported. An element that genuinely moved gets a new one. That is the difference between a model you can re-issue and a model that breaks every downstream link each time it is regenerated.
- Correcting a dimension The identifier is unchanged. A wall whose thickness you fixed is the same wall.
- Renaming or renumbering a room Unchanged. A label is not a location, so a room that gained a name is not a new room.
- Moving an element New identifier — for that element, and nothing else in the file.
- Reclassifying an element New identifier. A window corrected to a door is a different IFC entity type, and pretending otherwise would be the lie.
Nothing about this depends on the order elements happened to be written in, or on the machine that wrote them. Convert the same sheets twice and you get the same file, identifiers included — which is what makes a re-issue a difference your model server can read rather than a new building.
- 265 identifiers for 265 elements
- In the sample below, no two elements share one — and the export refuses to write a file where they would.
- Export twice, compare
- On a trial, re-export a model you have not touched and diff the identifiers against the file you already hold. That is the demonstration, on your own building.
Open the real output
Larch Annex, converted and exported by the product — not a mock-up. Every file below is the output of a real conversion of that building, and the checksum beside each one lets you confirm your download arrived intact. The IFC and the schedule are what a client receives; there is nothing else in the envelope.
Not yet in the file
Owner-side systems ask for four things this file does not carry yet. They are named here rather than discovered during a handover. Each is roadmap: no date, no commitment, and nothing on this page counts it as shipped.
-
IFC type objects
RoadmapEvery element is authored as an occurrence. There is no type layer, so a receiving tool cannot group occurrences by a shared type definition or attach type-level properties.
IfcWallType · IfcDoorType · IfcTypeObject
-
Standard Pset_*Common property sets
RoadmapThe model data travels in one Structura property set rather than the standard common sets, so a mapping file in an asset-management system that addresses standard fields will not find them.
Pset_WallCommon and family
-
Classification references
RoadmapNo classification system is attached to any element, so a specification that requires a classified model has to add it downstream.
IfcClassification · IfcClassificationReference
-
COBie handover
RoadmapStoreys and rooms exist in the model, but there is no COBie export and no type or contact layer to build one from.
Facility and Floor exist; Space, Type and Contact do not