Basics.3 Spatial Hierarchy

This example shows how to traverse the spatial and inheritance hierarchy of an IFC model.

from compas_ifc.model import Model

model = Model("data/wall-with-opening-and-window.ifc")

project = model.project

print("\n" + "*" * 53)
print("Hierarchy")
print("*" * 53 + "\n")


print("\nModel spatial hierarchy")
print("=" * 53 + "\n")

model.print_spatial_hierarchy()


print("\nClass inheritance hierarchy")
print("=" * 53 + "\n")

project = model.project
project.print_inheritance()

print("\nShortcut APIs")
print("=" * 53 + "\n")

print("Project contains:")
print(model.sites)
print(model.buildings)
print(model.building_storeys)
print(model.elements[:3])


print("\nSite contains:")
site = model.sites[0]
print(site.buildings)
print(site.geographic_elements)

print("\nBuilding contains:")
building = model.buildings[0]
print(building.building_storeys)
print(building.spaces)
print(building.building_elements[:3])


print("\nTraverse spatial hierarchy")
print("=" * 53 + "\n")

print(building)

print("\nParent")
print(building.parent)

print("\nChildren")
print(building.children)

print("\nAncestors")
for ancestor in building.traverse_ancestor():
    print(ancestor)

print("\nDescendants")
for descendant in building.traverse():
    print(descendant)

Example Output:

*****************************************************
Hierarchy
*****************************************************


Model spatial hierarchy
=====================================================

<Project:IfcProject Name: Default Project, GlobalId: 28hypXUBvBefc20SI8kfA$>
---- <Site:IfcSite Name: Default Site, GlobalId: 1cwlDi_hLEvPsClAelBNnz>
-------- <Building:IfcBuilding Name: Default Building, GlobalId: 0AqAhXVxvCy9m0OX1nxY1A>
------------ <BuildingStorey:IfcBuildingStorey Name: Default Building Storey, GlobalId: 2GNgSHJ5j9BRUjqT$7tE8w>
---------------- <Window:IfcWindow Name: Window for Test Example, GlobalId: 0tA4DSHd50le6Ov9Yu0I9X>
---------------- <Wall:IfcWallStandardCase Name: Wall for Test Example, GlobalId: 3ZYW59sxj8lei475l7EhLU>

Class inheritance hierarchy
=====================================================

- IfcRoot
-- IfcObjectDefinition
--- IfcContext
---- IfcProject

Shortcut APIs
=====================================================

Project contains:
[<Site:IfcSite Name: Default Site, GlobalId: 1cwlDi_hLEvPsClAelBNnz>]
[<Building:IfcBuilding Name: Default Building, GlobalId: 0AqAhXVxvCy9m0OX1nxY1A>]
[<BuildingStorey:IfcBuildingStorey Name: Default Building Storey, GlobalId: 2GNgSHJ5j9BRUjqT$7tE8w>]
[<Window:IfcWindow Name: Window for Test Example, GlobalId: 0tA4DSHd50le6Ov9Yu0I9X>, <Element:IfcOpeningElement Name: Opening Element for Test Example, GlobalId: 2bJiss68D6hvLKV8O1xmqJ>, <Wall:IfcWall Name: Wall for Test Example, GlobalId: 3ZYW59sxj8lei475l7EhLU>]

Site contains:
[<Building:IfcBuilding Name: Default Building, GlobalId: 0AqAhXVxvCy9m0OX1nxY1A>]
[]

Building contains:
[<BuildingStorey:IfcBuildingStorey Name: Default Building Storey, GlobalId: 2GNgSHJ5j9BRUjqT$7tE8w>]
[]
[<Window:IfcWindow Name: Window for Test Example, GlobalId: 0tA4DSHd50le6Ov9Yu0I9X>, <Wall:IfcWall Name: Wall for Test Example, GlobalId: 3ZYW59sxj8lei475l7EhLU>]

Traverse spatial hierarchy
=====================================================

<Building:IfcBuilding Name: Default Building, GlobalId: 0AqAhXVxvCy9m0OX1nxY1A>

Parent
<Site:IfcSite Name: Default Site, GlobalId: 1cwlDi_hLEvPsClAelBNnz>

Children
[<BuildingStorey:IfcBuildingStorey Name: Default Building Storey, GlobalId: 2GNgSHJ5j9BRUjqT$7tE8w>]

Ancestors
<Project:IfcProject Name: Default Project, GlobalId: 28hypXUBvBefc20SI8kfA$>
<Site:IfcSite Name: Default Site, GlobalId: 1cwlDi_hLEvPsClAelBNnz>

Descendants
<BuildingStorey:IfcBuildingStorey Name: Default Building Storey, GlobalId: 2GNgSHJ5j9BRUjqT$7tE8w>
<Window:IfcWindow Name: Window for Test Example, GlobalId: 0tA4DSHd50le6Ov9Yu0I9X>
<Wall:IfcWall Name: Wall for Test Example, GlobalId: 3ZYW59sxj8lei475l7EhLU>