Expand description
ifc-spatial — containment and objectified relationship traversal.
§The problem
IFC stores no parent pointers. A wall does not name its storey; a separate
IfcRelContainedInSpatialStructure entity names both ends. Asking “which
elements are on this storey” therefore means finding relationship entities
and reading the right attribute slot — and the two relationships that build
the tree disagree about which slot is which:
IfcRelAggregates 4 = RelatingObject 5 = RelatedObjects
IfcRelContainedInSpatialStructure 4 = RelatedElements 5 = RelatingStructureAssuming a uniform layout inverts containment silently: elements become the parents of their storey, and every downstream answer is wrong in a way no type error catches.
§Example
use ifc_spatial::{SpatialKind, SpatialTree};
let tree = SpatialTree::build(&model);
for storey in tree.of_kind(SpatialKind::Storey) {
let elements = tree.elements_of(storey.id);
println!("storey {:?} holds {} elements", storey.id, elements.len());
}§Tolerating real files
The canonical hierarchy is project → site → building → storey → element, and
real exports deviate: omitted sites, elements hung directly off a building,
duplicate storeys, relationships naming entities that are not in the file.
The tree records what the file says and reports anomalies through
SpatialTree::orphans and SpatialTree::dangling rather than asserting
the ideal shape or panicking.
§Boundaries
This crate reads containment. It does not validate it — ifc-validate owns
WHERE rules and cardinality — and it does not interpret geometry or
properties of the elements it groups.
§Releases
The release features (ifc2x3, ifc4, ifc4x1, ifc4x2, ifc4x3, all
on by default) choose which schema tables are linked. Classification needs
one of the three it is verified against – IFC2X3, IFC4 or IFC4X3 –
because without a table nothing would classify as a container and every
tree would be silently empty; a build naming none of them is refused at
compile time.
Re-exports§
pub use relation::BoundaryExposure;pub use relation::BoundaryPhysicality;pub use relation::ConnectionGeometryAnomaly;pub use relation::Relationship;pub use relation::RelationshipIndex;pub use relation::RelationshipKind;pub use relation::SpaceBoundary;pub use facility::create_facility;pub use facility::create_facility_with_owner_history;pub use facility::Facility;pub use facility::FacilityDraft;pub use facility::FacilityError;pub use facility::FacilityResult;pub use authoring::aggregate;pub use authoring::aggregate_with_owner_history;pub use authoring::connect_path_elements;pub use authoring::connect_path_elements_with_owner_history;pub use authoring::contain;pub use authoring::contain_with_owner_history;pub use authoring::create_external_spatial_element;pub use authoring::create_external_spatial_element_with_owner_history;pub use authoring::create_project;pub use authoring::create_project_library;pub use authoring::create_project_library_with_owner_history;pub use authoring::create_project_with_owner_history;pub use authoring::create_space_boundary;pub use authoring::create_space_boundary_with_owner_history;pub use authoring::create_spatial_element;pub use authoring::create_spatial_element_with_owner_history;pub use authoring::BoundaryDraft;pub use authoring::BoundaryLevel;pub use authoring::ExternalSpatialDraft;pub use authoring::ProjectLibraryDraft;pub use authoring::SpatialAuthoringError;pub use authoring::SpatialAuthoringResult;pub use authoring::SpatialDraft;
Modules§
- authoring
- Transactional authoring of the spatial structure.
- facility
- Facilities and facility parts: the non-building spatial containers.
- relation
- Objectified relationship access.
Structs§
- Spatial
Node - One entity’s place in the containment tree.
- Spatial
Tree - The containment tree of one model.
Enums§
- Schema
Version - The IFC release a tree classifies against (re-exported from
ifc-schema). Which IFC schema version a table describes. - Spatial
Anomaly - A statement of the file the tree could not honour, recorded instead of silently dropped.
- Spatial
Kind - The spatial role of an entity, as far as containment is concerned.