Gorgious56 6391dbebb5 Bbox dimensions key, DRY array operators, drop dead code
Three concerns sharing the same architectural theme (collapse inline
bbox / edit-state lookups, drop overrides that re-do base-class work):

== Bbox helpers and array operator DRY ==

* tool/blender.py: add a "dimensions" tuple key to both
  get_object_bounding_box and get_object_world_bounding_box return
  dicts. The (max - min) per-axis extent — which callers previously
  computed via local helpers — is now a key alongside min_x / max_x
  / min_point / max_point / center. Distinct from Blender's built-in
  obj.dimensions (which folds object-level scale): the local variant
  is the intrinsic mesh bbox extent; the world variant is the
  matrix_world-applied AABB.

* bim/module/model/array.py: drop the local _bbox_dims helper; the
  two callers now read tool.Blender.get_object_bounding_box["dimensions"]
  directly.

* Rename _parent_geometry_changed -> _array_children_need_rebuild.
  The old name suggested "did the parent change just now", implying
  the function was a parent-edit-finish trigger. It actually runs
  only inside the array-edit-finish path as a drift safety net (the
  upstream-deliberate design — see commit 83d97d7e9 "Fix #7616. Make
  regenerate array an operator instead of an array preference" —
  means the array doesn't auto-regen when its parent geometry edits
  finish). New name matches the call-site phrasing
  ``if X: _wipe_array_children(layers)`` and clarifies that this is
  a children-state check, not a parent-edit trigger.

* Extract _resolve_array_edit_props(context) — returns the active
  object's array props during an active edit lifecycle, or None.
  Collapses the obj-active-then-is-editing prologue (3 lines + return)
  to one resolver call across 4 sites: ToggleArrayMethod.execute,
  AdjustArrayCount.execute, RemoveArrayLayerFromEdit._execute and
  .poll. Each call site shrinks from 7 lines to 3.

* Migrate two inline bbox reads inside GizmoArrayEdition to the new
  dict keys: get_axis_world_face_center collapses the manual
  xs/ys/zs min/max + center math to bbox["center"] + bbox["max_x"] /
  ["max_y"] / ["max_z"]; get_element_height collapses
  ``max(corner[2] for corner in obj.bound_box)`` to
  tool.Blender.get_object_bounding_box(obj)["max_z"].

The _BBOX_EQUALITY_EPS = 1e-5 tolerance stays inline as a single-
consumer constant — no other call site needs tolerance-equality on
dimension tuples, so extracting it to a shared util would be
speculative abstraction.

== Drop dead code ==

* GizmoArrayEdition.update_editing_gizmos override + its
  _has_other_parametric_type helper: redundant with
  hide_pen_button = True at line 1024. The base class already hides
  the pen in every idle case (when hide_pen_button is truthy) AND in
  every editing case (unconditionally). The override's conditional
  hide-when-parametric only re-hid a pen that was already hidden in
  both branches. Removes the only remaining path that could re-show
  the array's pen icon; array-edit entry is now uniformly via the
  per-layer ARRAY icons (which is the documented preferred
  affordance, see the hide_pen_button comment).

* _wall_fillet_preview_active in wall.py: defined but never called.
  _wall_fillet_props (the sibling thin-wrapper around
  preview_base.get_preview_props) is heavily used; the
  is_preview_active wrapper was added speculatively and never picked
  up a consumer.

Generated with the assistance of an AI coding tool.
2026-06-11 18:34:45 +02:00
2025-12-19 18:53:14 +05:00
2026-05-08 16:20:26 +02:00
2026-05-08 16:20:26 +02:00
2026-01-26 17:10:03 +05:00
2026-05-18 19:24:25 +02:00
2026-05-09 21:05:08 +02:00
2026-02-18 09:09:46 +11:00
2026-05-08 16:20:26 +02:00
2026-05-08 16:20:26 +02:00
2026-05-08 16:20:26 +02:00
2026-05-08 16:20:26 +02:00
2026-04-13 19:38:25 +05:00
2026-04-13 19:40:25 +05:00

IfcOpenShell

IfcOpenShell is an open source (LGPL) software library for working with Industry Foundation Classes (IFC). Complete parsing support is provided for IFC2x3 TC1, IFC4 Add2 TC1, IFC4x1, IFC4x2, and IFC4x3 Add2. Extensive geometric support is implemented for the IFC releases IFC2x3 TC1 and IFC4 Add2 TC1. Extending with support for arbitrary IFC schemas is possible at compile-time when using C++ and at run-time when using Python.

In addition to a C++ and Python API, IfcOpenShell comes with an ecosystem of tools, notably including IfcConvert (an application to convert IFC models to other formats), Bonsai (an add-on to Blender providing a graphical IFC authoring platform), and many other libraries, CLI apps, and more. Support is also provided for auxiliary standards such as BCF and IDS.

For more information, see:

Development is sponsored through your generous donations!

Open Collective Contributors

Contents

Name Description License Service
bcf Library to read and write BCF-XML and query OpenCDE BCF-API modules LGPL-3.0-or-later PyPI Anaconda-Server Badge
bonsai Add-on to Blender providing a graphical native IFC authoring platform GPL-3.0-or-later Official GitHub Unstable Chocolatey
bsdd Library to query the bSDD API LGPL-3.0-or-later PyPI
ifc2ca Utility to convert IFC structural analysis models to Code_Aster LGPL-3.0-or-later
ifc4d Convert to and from IFC and project management software LGPL-3.0-or-later PyPI
ifc5d Report and optimise cost information from IFC LGPL-3.0-or-later PyPI
ifcbimtester Wrapper for Gherkin based unit testing for IFC models LGPL-3.0-or-later
ifcblender Historic Blender IFC import add-on LGPL-3.0-or-later*
ifccityjson Convert CityJSON to IFC LGPL-3.0-or-later PyPI
ifcclash Clash detection library and CLI app LGPL-3.0-or-later PyPI
ifcconvert CLI app to convert IFC to many other formats LGPL-3.0-or-later* Official GitHub
ifccsv Library and CLI app to export and import schedules from IFC LGPL-3.0-or-later PyPI
ifcdiff Compare changes between IFC models LGPL-3.0-or-later PyPI
ifcedit CLI wrapper for ifcopenshell.api IFC model mutation functions LGPL-3.0-or-later PyPI
ifcfm Extract IFC data for FM handover requirements LGPL-3.0-or-later PyPI
ifcmax Historic extension for IFC support in 3DS Max LGPL-3.0-or-later* Official
ifcmcp MCP server for querying and editing IFC building models LGPL-3.0-or-later PyPI
ifcopenshell-python Python library for IFC manipulation LGPL-3.0-or-later* Official GitHub PyPI Anaconda Anaconda Docker AUR AUR Unstable Pyodide WASM Wheels tag
ifcpatch Utility to run pre-packaged scripts to manipulate IFCs LGPL-3.0-or-later PyPI
ifcquery CLI tool for querying and inspecting IFC building models LGPL-3.0-or-later PyPI
ifcsverchok Blender Add-on for visual node programming with IFC GPL-3.0-or-later GitHub
ifctester Library, CLI and webapp for IDS model auditing LGPL-3.0-or-later PyPI

The IfcOpenShell C++ codebase is split into multiple interal libraries:

Name Description License
ifcgeom Internal library for IfcOpenShell LGPL-3.0-or-later*
ifcgeom_schema_agnostic Internal library for IfcOpenShell LGPL-3.0-or-later*
ifcgeomserver Internal library for IfcOpenShell LGPL-3.0-or-later*
ifcjni Internal library for IfcOpenShell LGPL-3.0-or-later*
ifcparse Internal library for IfcOpenShell LGPL-3.0-or-later*
ifcwrap Internal library for IfcOpenShell LGPL-3.0-or-later*
qtviewer Internal library for IfcOpenShell LGPL-3.0-or-later*
serializers Internal library for IfcOpenShell LGPL-3.0-or-later*
S
Description
No description provided
Readme 507 MiB
Languages
C++ 57.4%
Python 36.2%
C 3.9%
Gherkin 0.7%
JavaScript 0.3%
Other 1.3%