Releases: compas-dev/compas_ifc
Releases · compas-dev/compas_ifc
Release list
v2.1.0
Archival release accompanying the DOI citation for chapter 4 of the PhD
thesis. Restores correct geometric connection detection (regressed by the
2.0.0 clash-detection refactor), makes the evaluation suite deterministically
reproducible, and completes packaging/citation metadata.
Added
BuildingInformationModel.trace_connections(start, category, max_depth)—
breadth-first traversal of the interaction graph from a starting element,
filtered by relationship category or group, returning the reachable
elements. Useful for tracing connectivity networks such as MEP flow
systems or chains of structurally connected members.BuildingInformationModel.savenow acceptsschemaand
tessellation_tolerancearguments for future cross-schema export. Passing
aschemadifferent from the model's current schema currently raises
NotImplementedError; saving in the current schema is unchanged.CITATION.cff— citation metadata for the archival (DOI) release.requirements-freeze.txt— exact dependency versions pinning the
reference environment used to produce the chapter 4 evaluation results.COMPAS_IFC_GEOM_WORKERSenvironment variable to control the number of
workers used by the geometry iterator inIFCFile.load_geometries. Set it
to1for deterministic, reproducible geometry evaluation. The chapter 4
evaluation suite (thesis/appendix/A/run_all.py) now pins this to1.
Fixed
- Geometric connection detection (
compute_connections) now reproduces the
designed contact counts again. The2.0.0refactor that routed clash
detection through cached world-coord meshes for speed had regressed it;
several independent defects are addressed:GenericElement.compute_contactsnow uses exact B-Rep face-to-face
contact detection (brep_brep_contacts) when both elements expose B-Rep
geometry, falling back to the mesh approximation otherwise. The
mesh-only path could not resolve coplanar "just-touching" faces (e.g.
beams meeting end-to-end).GenericElement.compute_aabb/compute_obbnow honour theinflate
scaling factor. It was previously ignored, so thecompas_modelBVH
broadphase (which inflates AABBs to catch touching neighbours) missed
element pairs that only touch.IFCFile.load_geometriesnow fills in the definition-holder products of
instanced geometry (IfcRepresentationMap/IfcMappedItem), which the
ifcopenshell geometry iterator does not yield. Previously the shared
definition holder of every instanced group received novisual_geometry.compute_connections/compute_collisionsload tessellated geometry
for freshly created (not-yet-saved) elements before contact detection,
so a model built in-memory yields correct contacts without a save/reload.
GenericElement._world_trianglesnow falls back to the parametric
geometrywhen the tessellatedvisual_geometryis unavailable, soaabb
no longer returnsNonefor such elements (which crashed the BVH).thesis/appendix/A/run_all.pynow reports a crashed evaluation stage as
an explicit error in the summary instead of silently recording it as
0 PASS / 0 FAIL.thesis/appendix/A/integrated_workflow_test.pynow asserts the exact
designed connection breakdown (6 slab-slab, 18 slab-beam, 8 beam-beam = 32)
and its preservation through reload and granular export, rather than a loose
lower-bound check that had masked the connection-detection regression.
Changed
requirements.txtnow declares the previously-undeclared runtime
dependenciesshapely(used by contact/collision detection) andnumpy.- README: corrected the geometry-kernel description — contact/collision
detection uses a NumPy + Shapely pipeline; CGAL is not currently a
dependency.
v2.0.0
This release aligns the package with the front-end data model described in
chapter 4 of the underlying PhD thesis. The user-facing API now consists of
two classes (BuildingInformationModel, GenericElement) plus an
explicit spatial tree, an interaction graph, a Pydantic-based validation
engine, and a parametric geometry layer. Internal helpers have been
reorganised accordingly and the legacy compas_ifc.model entry point is
gone.
Added
compas_ifc.bim.BuildingInformationModel— the front-end model class,
combiningElementFactoryMixin,InteractionMixin, andTreeMixin.compas_ifc.element.GenericElement— unified element abstraction with
bidirectional sync to the underlying IFC entity. Replaces per-product
subclasses for everyday usage.compas_ifc.factory.ElementFactoryMixin— typed creators
(create_wall,create_slab, …) plus atemplate()classmethod that
scaffolds default IfcProject / IfcSite / IfcBuilding / IfcBuildingStorey.create_elementnow normalises arbitrary type strings ("IfcWall",
"Wall","wall"→IfcWall) and falls back to
IfcBuildingElementProxy(withObjectTypepreserved) for unknown
custom strings.compas_ifc.tree.TreeMixin— IFC import with placement-chain
rectification,extract/exportfor self-contained subsets,
print_hierarchy.compas_ifc.interactions.InteractionMixin— typed interaction graph
populated from IFC relationships, pluscompute_connections,
compute_collisions, andshow_collisions.compas_ifc.validation—Specificationdataclass,validate_model,
validate_element, and Pydantic schemas for the standard IFC psets.
Specifications attached tomodel.specificationsenforce validation at
insertion time;model.validate(specs)runs advisory checks.compas_ifc.representations— parametric geometry types (Extrusion,
Revolution,Pipe,ClippedExtrusion,BooleanResult,HalfSpace)
that round-trip losslessly through IFC.compas_ifc.algorithms.contactsandalgorithms.collisions— vectorised
NumPy + Shapely broadphase + narrowphase replacements for the previous
pure-Python implementations.thesis/appendix/A/— reproducible evaluation suite for chapter 4 of
the thesis, with arun_all.pyrunner that writes a consolidated
outputs/A-summary.txt.tests/test_bim.pyandtests/test_validation.py— minimal pytest
coverage of the front-end API.
Changed
- The package entry point is now
from compas_ifc.bim import BuildingInformationModel. The previous
from compas_ifc.model import Modelimport path has been removed. - Spatial hierarchy is materialised as
model.tree(a COMPASTree
instance) with directparent/childrenpointers; non-hierarchical
IFC relationships go intomodel.graph. - Documentation has been rewritten end to end (
README.md,docs/index,
docs/architecture,docs/api/*,docs/tutorials/*,
docs/examples).
Removed
compas_ifc.model.Model(replaced by
compas_ifc.bim.BuildingInformationModel).src/compas_ifc/__main__.py(no-op stub).tests/test_placeholder.py(replaced by real tests).- Stale documentation: old tutorial and example pages, the
compas_ifc.entities.generatedAPI page, the development planning
notes underthesis/. compas_ifc.entities.generated.{IFC2X3,IFC4,IFC4X3}— the runtime
per-class wrappers (~3,000 files, ~20 MB) have been replaced by three
PEP 561 stub files (IFC2X3.pyi,IFC4.pyi,IFC4X3.pyi) bundled
with the package. IDE autocomplete on raw IFC attributes is preserved
through the stubs; runtime code uses dynamic dispatch through
Base.__getattr__/__setattr__. Users who relied on
isinstance(x, IfcWall)should switch tox.is_a("IfcWall");
runtime imports ofcompas_ifc.entities.generated.IFC4.IfcWall
no longer work — type-time imports underif TYPE_CHECKING:
continue to resolve via the stubs.
Migration notes
- The hand-written extensions in
compas_ifc/entities/extensions/
now register through the new
:func:compas_ifc.entities.base.extendsdecorator rather than by
class name. Each extension class is renamed toIfc<Name>Extras
and inherits fromBase; the previousclass IfcElement(IfcElement)
shadowing pattern is gone. External code that imported these classes
by name (e.g.from compas_ifc.entities.extensions import IfcProduct)
should switch to the newIfcProductExtrasname.
v1.7.0
Added
- Added
volumeproperty toTessellatedBrepclass for calculating volume of closed meshes using COMPAS geometry functions - Added
surface_areaproperty toTessellatedBrepclass for calculating surface area by summing face areas
Changed
Removed
v1.6.1
Added
- Added
linear_deflectionparameter toModel.show(), defaulting to 100 for faster BRep tesselation.
Changed
Removed
- Removed
Model.update_linear_deflection()
v1.6.0
v1.5.0
Added
- Added
extensionskeyword argument toModelto for inserting custom extensions to IFC classes.
Changed
Removed
v1.4.1
v1.4.0
Added
- Added
Model.search_ifc_classes()andFile.search_ifc_classes()to search for IFC classes. - Added
Model.create_wall(). - Added
Model.create_slab(). - Added
Model.create_window(). - Added
Model.create_door(). - Added
Model.create_stair(). - Added
Model.create_railing(). - Added
Model.create_column(). - Added
Model.create_beam(). - Added
aabbaxis-aligned bounding box toTessellatedBrep. - Added
obboriented bounding box toTessellatedBrep.
Changed
Removed
v1.3.1
v1.3.0
Added
- Added
Model.create_default_project(). - Added
TesselatedBrep.to_mesh().