Intermediate - Multi-storey building

This tutorial shows how to paramtrically create a multi-storey building from scratch using COMPAS geometry types, as well adding custom properties to each relevant IFC entity.

Model Template

Valid IFC files need to follow a regulated spatial hierarchy like this:

IfcProject -> IfcSite -> IfcBuilding -> IfcBuildingStorey -> IfcBuildingElement.

COMPAS IFC provide a convenient way to create setup this hierarchy in a single function call.

>>> from compas_ifc.model import Model
>>> model = Model.template(building_count=1, storey_count=3, unit="m", schema="IFC4")
IFC file created in schema: IFC4
>>> model.print_spatial_hierarchy()
================================================================================
Spatial hierarchy of <#1 IfcProject "Default Project">
================================================================================
└── <#1 IfcProject "Default Project">
    └── <#17 IfcSite "Default Site">
        └── <#19 IfcBuilding "Default Building 1">
            ├── <#21 IfcBuildingStorey "Default Storey 1">
            ├── <#23 IfcBuildingStorey "Default Storey 2">
            └── <#25 IfcBuildingStorey "Default Storey 3">

The created entities can be easily updated:

>>> model.project.Name = "My Custom Project Name"
>>> model.sites[0].Name = "My Custom Site Name"
>>> model.buildings[0].Name = "My Custom Building Name"
>>> model.building_storeys[0].Name = "UnderGroundFloor"
>>> model.building_storeys[1].Name = "GroundFloor"
>>> model.building_storeys[2].Name = "FirstFloor"
>>> model.print_spatial_hierarchy()
================================================================================
Spatial hierarchy of <#1 IfcProject "My Custom Project Name">
================================================================================
└── <#1 IfcProject "My Custom Project Name">
    └── <#17 IfcSite "My Custom Site Name">
        └── <#19 IfcBuilding "My Custom Building Name">
            ├── <#21 IfcBuildingStorey "UnderGroundFloor">
            ├── <#23 IfcBuildingStorey "GroundFloor">
            └── <#25 IfcBuildingStorey "FirstFloor">

Creating Entities

Model.create() can be used to create entities in the model.

>>> model.create(IfcWall, Name="My Custom slab", parent=model.building_storeys[0])