Compare commits

...

4501 Commits

Author SHA1 Message Date
Bruno Postle cf3602bee1 Add ifcquery CLI tool for IFC model interrogation 2026-03-23 23:22:47 +00:00
Bruno Postle 8b8f78095d geometry_creation.rst: add sections for assemblies, clipping normals, openings (#7844)
Generated with the assistance of an AI coding tool.
2026-03-23 23:02:15 +00:00
Bruno Postle 23ba9e4db0 Add geometry.clip_solid, clip_solid_bounded, and copy_representation APIs (#7843)
* Add geometry.clip_solid API
* Add geometry.clip_solid_bounded API
* Add geometry.copy_representation API
Deep-copies the named representation from a source element to a target
element.

Generated with the assistance of an AI coding tool.
2026-03-23 23:00:12 +00:00
Bruno Postle 1aec991f08 api: docstring improvements across geometry, sequence, and feature modules (#7842)
* Doc clarification for api.sequence.assign_process
* Doc clarification for api.geometry.edit_object_placement
* Doc clarification for api.feature.remove_feature
* Doc clarification for api.geometry.add_wall_representation clippings normal
* regenerate_wall_representation: document BBIM_Boolean preservation requirement

Generated with the assistance of an AI coding tool.
2026-03-23 22:57:28 +00:00
Bruno Postle bddf9b85f8 shape_builder: complete docstrings and return type annotations (#7841)
* shape_builder: complete docstrings and return type annotations
* shape_builder: warn about mixed item types in get_representation
* shape_builder: fix half_space_solid agreement_flag docstring

Generated with the assistance of an AI coding tool.
2026-03-23 22:54:55 +00:00
Sayan J. Das f679c63a18 Merge pull request #7808 from theseyan/ifctester-improvements-rebased
IfcTester webapp improvements
2026-03-23 15:48:34 +05:30
Thomas Krijnen e6cc0e7813 Initialize ncount_total #7834 2026-03-23 10:54:38 +01:00
Dion Moult cf2acfc649 Add covering feature tests for ceiling and cursor variants
Add tests for all four covering generation operators: flooring/ceiling
from walls and flooring/ceiling from cursor. Previously only flooring
from walls was tested.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 23:25:04 +11:00
Dion Moult 60ebb99fda Fix covering geometry not persisting to IFC, same root cause as #7055
The covering tool used bmesh as an intermediate and relied on
type.assign_type post-listeners (removed in 44a52863a) to generate
the IfcExtrudedAreaSolid body. With those listeners gone, coverings
had no body representation and assign_swept_area_outer_curve crashed.

Build covering representations from scratch using ShapeBuilder, reading
the extrusion depth from the type's IfcMaterialLayerSet. Also replace
bpy.ops.bim.assign_class with bonsai.core.root.assign_class using
should_add_representation=False, consistent with the space fix.

Refactored shared coordinate-conversion and extrusion-building logic
into get_2d_vertices_from_polygon and set_extrusion_representation_from_polygon,
used by both space and covering code paths. Removed all bmesh-dependent
dead code from the spatial tool.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 23:18:59 +11:00
Dion Moult ab96add772 Gitignore all test cache files 2026-03-22 22:26:23 +11:00
Dion Moult d8de623086 Fix space regen not saving geometry to IFC (#7055)
Space regeneration was only updating the Blender mesh and marking the
object as edited, but the IFC representation was never synced on save.
Replace the bmesh-based approach with ShapeBuilder to write geometry
directly to IFC as an IfcExtrudedAreaSolid, then reload via
switch_representation. This applies to both new space creation and
existing space regeneration.

Also changes assign_ifcspace_class_to_obj to call
bonsai.core.root.assign_class directly with
should_add_representation=False instead of bpy.ops.bim.assign_class.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 22:14:02 +11:00
dependabot[bot] a3f2e061fb Bump hendrikmuhs/ccache-action from 1.2.20 to 1.2.21
Bumps [hendrikmuhs/ccache-action](https://github.com/hendrikmuhs/ccache-action) from 1.2.20 to 1.2.21.
- [Release notes](https://github.com/hendrikmuhs/ccache-action/releases)
- [Commits](https://github.com/hendrikmuhs/ccache-action/compare/v1.2.20...v1.2.21)

---
updated-dependencies:
- dependency-name: hendrikmuhs/ccache-action
  dependency-version: 1.2.21
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-22 21:31:54 +11:00
dependabot[bot] f51a4673db Bump ruff from 0.15.6 to 0.15.7
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.6 to 0.15.7.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.15.6...0.15.7)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.15.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-22 21:31:42 +11:00
Dion Moult 75b8d4f218 Remove spatial containment and aggregation when nesting
The nest assign_object API now removes existing spatial containment and
aggregate relationships before creating the nest, matching the behavior
documented in its docstring and consistent with aggregate.assign_object.

Fix #7248

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 15:28:47 +11:00
Dion Moult b8136d4762 Prevent cyclic references when assigning nesting or aggregation
Walk up the full hierarchy via get_parent() in can_nest() and
can_aggregate() to reject assignments that would create a cycle.
Also reject self-assignment.

Fix #7248

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 15:28:47 +11:00
Dion Moult ecde429d36 Fix crash after undo of assign_class on macOS (#7419)
After assigning an IFC class and undoing, msgbus subscriptions registered
with the old Python object wrapper survived (PERSISTENT flag) but could
not be cleared because: (1) rollback_link_element looked up objects by
their post-link name which no longer exists after undo, and (2) the
per-object clear_by_owner calls in rebuild_element_maps used new Python
wrappers that didn't match the old subscription owners.

Fix by using a dedicated stable object (object_subscription_owner) as
the msgbus owner for all per-object subscriptions, allowing
rebuild_element_maps to clear all stale subscriptions in one call
regardless of Python wrapper identity changes during undo/redo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 14:42:55 +11:00
Dion Moult 1771b34449 Fix error when entering edit mode on camera objects
Fixes #7313.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 14:08:12 +11:00
Dion Moult 41469acbc8 Fix walrus operator precedence in MaterialCreator
The `is not ...` was being captured by the walrus assignment due to
missing parentheses, causing the condition to always evaluate incorrectly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 13:58:17 +11:00
Ryan Schultz 547b22199f Without 'Material.Name' layers merge. (#7700) 2026-03-21 18:02:02 -05:00
Dion Moult 94c15213f6 Guard against emptying IfcShapeRepresentation Items
remove_representation_item now returns early if removing the item would
leave Items empty. edit_text_literals returns early on empty attributes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 20:10:11 +11:00
Dion Moult fca258fb07 Fix add_boolean removing second operands from unrelated representations
add_boolean was removing second operands from ALL IfcShapeRepresentations
that referenced them, which could corrupt unrelated shapes and leave
representations with empty Items (bug #7803).

The API no longer modifies Items — callers manage this explicitly.
validate_type and Bonsai's AddBoolean operator now handle their own
item removal scoped to the correct representation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 20:10:11 +11:00
Dion Moult bcfad8d96d Migrate remove_deep to remove_deep2 across API modules
remove_deep is deprecated and can silently delete elements still in use.
remove_deep2 requires zero inverses before removal, making it safer.
Also fixes a double-removal bug in remove_grid_axis and prevents
removing the last prop template from a pset template.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 20:10:11 +11:00
Parag Debnath c026dd3b6e IsVentilated now defaults to False (#7819)
* IsVantillated now defaults to false

* IsVentilated now defaults to False

---------

Co-authored-by: Parag Debnath <paragforwork@gmail.com>
2026-03-20 23:33:40 +11:00
Dion Moult d0f20371bd Add feature to get parent of a particular IFC class 2026-03-20 23:10:00 +11:00
Dion Moult 7b6e82a9cc Fix stair calculated params test to set custom_tread_lock=False
Tests using custom first/last tread runs were not setting
custom_tread_lock=False, so the custom values were silently ignored
since 8f7cf76d9 introduced the lock gate in the calculation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 23:09:15 +11:00
Andrej730 286c69429d gitignore bonsai external_dependencies 2026-03-20 15:49:08 +05:00
dependabot[bot] 9c22dc6013 Bump socket.io-parser from 4.2.4 to 4.2.6 in /src/ifctester/webapp
Bumps [socket.io-parser](https://github.com/socketio/socket.io) from 4.2.4 to 4.2.6.
- [Release notes](https://github.com/socketio/socket.io/releases)
- [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io/compare/socket.io-parser@4.2.4...socket.io-parser@4.2.6)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-version: 4.2.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-20 11:47:01 +01:00
Andrej730 0acbd5ffad black . 2026-03-20 15:45:24 +05:00
Andrej730 77f0c43314 ids_doc_generator - fix invalid escape sequence SyntaxWarning
SyntaxWarning: invalid escape sequence '\/' at line 312.
`\/` in a plain string is treated as `/` by accident; replaced with raw string r"..." to be explicit.
2026-03-20 15:43:13 +05:00
Andrej730 c1a9708504 ci.yml - build ifctester docs
to ensure script doesn't break
2026-03-20 15:43:13 +05:00
Andrej730 bcf6f6197d ifctester - move build-ids-docs target to ifctester Makefile
Also added a note why it lives in test folder and added it's output to gitignore.
2026-03-20 15:43:13 +05:00
Andrej730 1778656bd5 ids_doc_generator - fix Property args missed (ed8eb75)
TypeError: Property.__init__() got an unexpected keyword argument 'name'
2026-03-20 15:43:12 +05:00
Andrej730 54f450129c ids_doc_generator - fix failed_entities removed (bd92c043)
AttributeError: 'Attribute' object has no attribute 'failed_entities'
2026-03-20 15:43:12 +05:00
Andrej730 9fad1569c7 ids_doc_generator - fix error due to stale cache (f40281e97)
AssertionError: bool(facet(inst)) is expected
2026-03-20 15:43:12 +05:00
Andrej730 722c374fa6 ids_doc_generator - handle invalid entities coming from a test (1ed770d)
Exception: About to emit invalid example data: IfcMaterial.Name not optional
2026-03-20 15:43:12 +05:00
Andrej730 91b6c3e256 bcf v3 tests - fix wrong args, add dead code TODOs 2026-03-20 15:43:12 +05:00
Andrej730 ea3f71b4e0 rename test files to test_* prefix for pytest discovery and fix missing add_pset name arg 2026-03-20 15:43:12 +05:00
Andrej730 1a8b17e235 ifcfm cobie24 - remove unused ifc_file param from get_unit_name 2026-03-20 15:43:12 +05:00
Andrej730 2bad861122 ifcopenshell_wrapper.pyi - support varargs and kwargs in constructors 2026-03-20 15:43:11 +05:00
Andrej730 6c1fb3b01a Remove stale mass_time_units_in_wizard references (5c31ae4c3) 2026-03-20 15:36:18 +05:00
Andrej730 f5be64af6c Remove redundant __init__ from BaseLinesShader 2026-03-20 15:36:18 +05:00
Andrej730 b043dd4d04 Fix unknown-argument error in BaseLinesShader.__init__ 2026-03-20 15:36:18 +05:00
Andrej730 ffd2466321 Fix missing prop name in bim.mep_add_bend 2026-03-20 15:36:17 +05:00
Andrej730 e9241fd812 Fix error in bim.fit_flow_segments 2026-03-20 15:36:17 +05:00
Andrej730 48d45451ac Remove dead code join_walls_TZ, join_T, join_Z superseded in acdc40fb4 2026-03-20 15:36:17 +05:00
Andrej730 3b7cf6e865 Fix error displaying bsdd description after API update (ed81a0a4b) 2026-03-20 15:36:17 +05:00
Andrej730 6038373ee5 ifcopenshell_wrapper.pyi - sync default values, validate_stub - suggest default values 2026-03-20 15:36:16 +05:00
Andrej730 3d7de87b46 ifcopenshell_wrapper.pyi - add temp MakeVolume stub 2026-03-20 15:36:16 +05:00
Andrej730 cb113ae8da ifcopenshell_wrapper.pyi - support stubs for constructors 2026-03-20 15:36:15 +05:00
Andrej730 26280d24fe Add ty to check for missing symbols and other simple errors 2026-03-20 15:36:14 +05:00
Andrej730 30551cb288 typing 2026-03-20 15:36:14 +05:00
Andrej730 3bf0edeca2 Fix subtle walrus operator bug in align_walls using e before assignment 2026-03-20 15:34:57 +05:00
Andrej730 3590b08e68 search/operator - remove unnecessary Ifc Operators 2026-03-20 15:34:57 +05:00
Ryan Schultz fd902d88fb Update selector_syntax.rst with query examples
Clarified usage of queries in IfcAnnotation tags with examples.
2026-03-18 18:25:03 -05:00
Sayan Jyoti Das aa5f5120e0 delete ifcopenshell wheel 2026-03-18 14:37:24 +05:30
Sayan Jyoti Das 81986bcbfb ifcopenshell wasm wheel should be dynamically fetched, not included in git 2026-03-18 14:35:55 +05:30
Andrej730 ec6c268cdb Fix type assign_type core test (44a52863a) 2026-03-18 13:15:39 +05:00
Andrej730 64003fd5ef Fix drawing update_drawing_name core test (19534e225) 2026-03-18 13:15:38 +05:00
Andrej730 58d07bace4 Fix drawing edit_text core test and tool interface (5e9f97a0c) 2026-03-18 13:15:38 +05:00
Andrej730 3b718bc58d Fix georeference core tests (b246998f6) 2026-03-18 13:15:38 +05:00
tsomanna_QCOM 18c035ea77 Fix Windows ARM64 Python Bindings Issue 2026-03-18 08:44:34 +01:00
Andrej730 f2e2e324b1 Fixing stubs
- `function_item`, `tags` added in df7318973
- MakeVolume added in c385b93, ignore as all other conversion settings
- moved `SeparateZUpNode` ignore to the other geom serializer settings
2026-03-18 12:25:14 +05:00
Andrej730 069dbbd8c2 bonsai docs - add maintenance page 2026-03-18 12:25:14 +05:00
Andrej730 3385872e8b ci-black-formatting - use variables for min Python versions 2026-03-18 12:25:14 +05:00
Andrej730 f0b27a0910 ifcopenshell-python Makefile - simplify pyversion check, similar to 6409f41 2026-03-18 12:25:13 +05:00
Andrej730 888158570a Remove Python 3.9 references 2026-03-18 11:20:22 +05:00
Andrej730 c03156b5cd control.assign_control - remove deprecated related_object argument support 2026-03-18 11:20:22 +05:00
Andrej730 05bf2b82d2 system.disconnect_port - fix missing flow direction reset (bbda8d2) 2026-03-18 11:03:33 +05:00
Andrej730 7bdc1b6a75 cache_dependencies - skip ifcopenshell dir when packing 2026-03-18 11:01:38 +05:00
Sayan Jyoti Das 03de69814a fixes and cleanups from old branch 2026-03-18 11:22:41 +05:30
Sayan Jyoti Das 4dc6a0f2bc update ifcopenshell wheel to ifcopenshell-0.8.5+a51b2c5 2026-03-18 11:18:50 +05:30
Andrej730 c33509364c Fix error generating ifcpatch recipes docs for Bonsai tooltips
Mentioned in https://github.com/IfcOpenShell/IfcOpenShell/issues/7667#issuecomment-4076645173

Traceback:
```
Traceback (most recent call last):
  File "\bonsai\bim\module\patch\prop.py", line 55, in get_ifcpatch_recipes
    docs = ifcpatch.extract_docs(f, "Patcher", "__init__", ("src", "file", "logger", "args"))
  File "\ifcpatch\__init__.py", line 168, in extract_docs
    spec.loader.exec_module(submodule)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "<frozen importlib._bootstrap_external>", line 1027, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "\ifcpatch/recipes/FixRevit2025TINs.py", line 31, in <module>
    class Patcher:
    ...<509 lines>...
            return co / self.unit_scale
  File "\ifcpatch/recipes/FixRevit2025TINs.py", line 168, in Patcher
    def create_edges(self, obj: bpy.types.Object) -> None:
                                ^^^
NameError: name 'bpy' is not defined
File "\bonsai\bim\module\patch\prop.py", line 43, in get_ifcpatch_recipes
```
2026-03-18 10:04:36 +05:00
Sayan Jyoti Das 47f058341b local ifctester wheel build 2026-03-18 10:29:09 +05:30
Thomas Krijnen a51b2c587c Revert "Simplifies IfxAxis2PlacementLinear, assumes default Axis = (0,0,1)"
This reverts commit cf1552e79e.
2026-03-17 20:49:48 +01:00
Sayan Jyoti Das 845a13ba83 some fixes and lint cleanups 2026-03-17 21:16:53 +05:30
Sayan Jyoti Das 530841967e Merge branch 'v0.8.0' into ifctester-improvements 2026-03-17 19:49:09 +05:30
Andrej730 c36e7badae Remove use of deprecated os.popen 2026-03-17 18:14:22 +05:00
Andrej730 515fe8d2ef Remove use of deprecated tempfile.mktemp 2026-03-17 18:14:22 +05:00
Andrej730 b8d3d1d105 pyproject.toml - add ty command to check for deprecated methods 2026-03-17 18:14:22 +05:00
Sayan Jyoti Das e95da857d6 convert codebase to typescript + introduce biome lint 2026-03-16 21:55:10 +05:30
Sayan Jyoti Das d587d1ac11 build step for pyodide 2026-03-16 21:46:46 +05:30
Andrej730 ba36dc82ff bim.clear_measurement - add poll message 2026-03-16 15:27:39 +05:00
Andrej730 025fb769e2 bim.explore_tool - remove additional row to keep hotkey and operators on the same row 2026-03-16 15:27:39 +05:00
Andrej730 bf75a19640 bim.image_scaling_tool - break description to multiple lines for readibility 2026-03-16 15:27:39 +05:00
Andrej730 4473dbd138 bim.generate_uv_map - move to operator.py, fix missing description, add separate row in ui 2026-03-16 15:27:39 +05:00
Sayan Jyoti Das 6117417b89 update webapp + bonsai integration 2026-03-16 15:54:52 +05:30
Thomas Krijnen 0398584c69 empty 2026-03-16 15:45:41 +05:30
Thomas Krijnen 0c69f85d5e Empty 2026-03-16 15:45:40 +05:30
Andrej730 7e987be00f bim.link_ifc - document default query
To make it more discoverable for users.
2026-03-16 15:10:05 +05:00
Andrej730 35e3d9c42e Linked Models - invalidate cache for mismatching query automatically 2026-03-16 15:10:04 +05:00
Andrej730 63a8639353 Linked Models - option to provide custom selector query
Available in file dialog when linking model - https://files.catbox.moe/tdmmbt.png
It's not very robust currently, just something to start with.
2026-03-16 15:10:04 +05:00
Andrej730 bd15ba4aa3 Linked Models - fix removing link operator missing if link is still loaded 2026-03-16 15:10:04 +05:00
Andrej730 f583d1ecc1 typing 2026-03-16 15:10:04 +05:00
Andrej730 5bfab569ba bim.link_ifc - fix prop display in file dialog panel
Fixes this - https://files.catbox.moe/eq10ip.png
2026-03-16 15:10:04 +05:00
Andrej730 fb16e91249 Remove use of deprecated datetime.utcnow()
To fix warnings below:
```
<python-input-1>:1: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
```
2026-03-16 15:10:03 +05:00
Andrej730 1c456c3cb2 Bonsai Makefile - use official bpypolyskel repo instead of fork
Since https://github.com/prochitecture/bpypolyskel/pull/22 got merged.
2026-03-16 15:10:03 +05:00
Andrej730 a8d28fb469 Remove unused import, black . 2026-03-16 15:10:03 +05:00
Dion Moult 62bb6cdf33 Fix failing classification tests because they relied on spaces which are now hidden by default 2026-03-16 19:31:25 +11:00
Dion Moult cf153981ce Feature tests for add/remove literal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 19:04:35 +11:00
Dion Moult b38316336c Revert "Fix #6392: when duplicating a window/door/etc, the associated IfcOpenElement duplicates as well."
This reverts commit a2a5780d59.
2026-03-16 17:52:02 +11:00
Dion Moult 021e6b9ef5 Simplify get model types to just got all type products. Fixes failing test. 2026-03-16 15:15:12 +11:00
falken10vdl 1999d93f9a Add GenerateUVMap operator and integrate into ExploreTool (#7695)
Co-authored-by: Dion Moult <dionmoult@gmail.com>
2026-03-16 07:30:49 +11:00
Dirk Olbrich 8c9e89ace8 Bonsai - change add_grid operator namespace to bim 2026-03-15 23:50:52 +11:00
Ryan Schultz 868bb5c39e Allow bulk annotation product assignment
Closes #7787: Previously bim.assign_selected_as_product required exactly
2 objects. With multiple annotations referencing the same
product, users had to repeat the operation once per
annotation. Now any number of IfcAnnotations can be selected
alongside a single product object and all are assigned in
one operation and one undo step.

Generated with the assistance of an AI coding tool.
2026-03-15 23:42:07 +11:00
Dion Moult c3a87c8f9c Add basic text editing feature tests 2026-03-15 23:30:10 +11:00
Dion Moult c30d24c4d9 Fix regression where changing logic to occur in filesystem selector caused headless test to fail.
See d4388ec76
2026-03-15 23:29:57 +11:00
Dion Moult 2edd1a5044 Black 2026-03-15 21:39:57 +11:00
Dion Moult 08dfcea47c Fix Python signatures in operator descriptions.
Closes #7797. Closes #7230.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 21:38:20 +11:00
Dion Moult 9c8f25739c Fix failing test. Add reference images should use generated coords, not UV.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 19:27:42 +11:00
Sebastian Schilling 256e4d2191 buildingSMART Data Dictionary module: use pSets from different data dictionary sources (#7764)
* buildingSMART Data Dictionary module: added textfield to change data dictionary url

* moved change of bsdd baseurl change to addon settings

* Receiving Psets from other dictionary sources has been made available by dynamizing the  identifier_url using the client baseurl

* Remove unnecessary blank lines in prop.py

* Remove unused import of bsdd module
2026-03-15 12:56:04 +11:00
Dion Moult b14da14614 Default to assigning material set usages if assigning to an occurrence. See #7794.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 12:26:21 +11:00
Dion Moult 273ecfe8e4 Supersede 3x3 box alignment with more familiar horizontal / vertical UI
* Fix #7712 - global alignment controls now affects all literals
 * Fix #7760 - goodbye 3x3 box alignment

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 08:24:38 +11:00
Dion Moult 6e0f24105e Minor fix to regression in 95480a2 where reshaping to a 3x3 matrix was removed 2026-03-15 07:28:38 +11:00
Ryan Schultz 25af50a092 Temp files from ai coding tools 2026-03-15 07:20:15 +11:00
dependabot[bot] 4b5a50a831 Bump actions/download-artifact from 8.0.0 to 8.0.1
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v8.0.0...v8.0.1)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 8.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-15 07:19:11 +11:00
dependabot[bot] bd77175c66 Bump ruff from 0.15.5 to 0.15.6
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.5 to 0.15.6.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.15.5...0.15.6)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.15.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-15 07:19:05 +11:00
dependabot[bot] 2b1d99a8b1 Bump gersemi from 0.26.0 to 0.26.1
Bumps [gersemi](https://github.com/BlankSpruce/gersemi) from 0.26.0 to 0.26.1.
- [Release notes](https://github.com/BlankSpruce/gersemi/releases)
- [Changelog](https://github.com/BlankSpruce/gersemi/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BlankSpruce/gersemi/compare/0.26.0...0.26.1)

---
updated-dependencies:
- dependency-name: gersemi
  dependency-version: 0.26.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-15 07:18:58 +11:00
Dion Moult 82adf4d18c Fix #7782: Don't allow assigning styles if no styles available.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 07:03:48 +11:00
Thomas Krijnen cf9df33aa5 Change checkout reference to build branch 2026-03-14 14:51:24 +01:00
Thomas Krijnen 1a6fd2530f Remove dependency on Standard_failure #7788 2026-03-14 14:44:47 +01:00
Dion Moult ea64f1b6b9 Fix #7770, #7747, #7572, #7522, #7416, #7086: Bug when first point in poly tool clicked twice
Previous logic always skipped the first point. Instead, it should only
skip when actually closing a loop (i.e. >= 3 points).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 20:35:59 +11:00
Dion Moult 473d689cf2 Fix #7794: Only slice layerset mesh when material layer set usage exists
Without a usage, orientation is undefined so slicing should be skipped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 13:25:14 +11:00
Richard Brice cf1552e79e Simplifies IfxAxis2PlacementLinear, assumes default Axis = (0,0,1) 2026-03-13 11:16:10 -07:00
Andrej730 90db564b4b ifcclash - add advanced package type that supports smart group clashes 2026-03-13 20:26:23 +05:00
Andrej730 e9fb6b3c1d Bonsai Makefile - upstream bpypolyskel wheel recipe
Sent PR - https://github.com/prochitecture/bpypolyskel/pull/22
2026-03-13 20:26:23 +05:00
Andrej730 a5e0b3f0e5 Bonsai Makefile - upstream ifcjson wheel recipe
Sent PR - https://github.com/IFCJSON-Team/IFC2JSON_python/pull/8
2026-03-13 20:26:23 +05:00
Andrej730 60519e8fed ifcopenshell dev_environment - include all packages 2026-03-13 20:26:23 +05:00
Andrej730 8fb454bb27 Partially disable old Windows workaround for Bonsai uninstallation 2026-03-13 20:26:23 +05:00
Andrej730 9ed8f3e244 Bonsai - fix missing Bonsai Fatal Error UI
Since we added more data to debug info in fcf5614 Fatal Error itself started to fail and was never displayed due some props being inaccessible during load, should be fixed now.

Possible error that were fixed:
```
  File "\Blender\5.1\extensions\raw_githubusercontent_com\bonsai\__init__.py", line 328, in <module>
    print(format_debug_info(get_debug_info()))
                            ~~~~~~~~~~~~~~^^
  File "\Blender\5.1\extensions\raw_githubusercontent_com\bonsai\__init__.py", line 117, in get_debug_info
    if bpy.data.is_saved:
       ^^^^^^^^^^^^^^^^^
AttributeError: '_RestrictData' object has no attribute 'is_saved'

Traceback (most recent call last):
  File "\Blender\5.1\extensions\raw_githubusercontent_com\bonsai\__init__.py", line 366, in draw
    info = get_debug_info()
  File "\Blender\5.1\extensions\raw_githubusercontent_com\bonsai\__init__.py", line 152, in get_debug_info
    bim_props = tool.Blender.get_bim_props()
                ^^^^
NameError: name 'tool' is not defined. Did you mean: 'bool'?

Traceback (most recent call last):
  File "\Blender\5.1\extensions\raw_githubusercontent_com\bonsai\__init__.py", line 366, in draw
    info = get_debug_info()
  File "\Blender\5.1\extensions\raw_githubusercontent_com\bonsai\__init__.py", line 141, in get_debug_info
    import bonsai.tool as tool
  File "\Blender\5.1\extensions\.local\lib\python3.13\site-packages\bonsai\__init__.py", line 355, in <module>
    print(format_debug_info(get_debug_info()))
                            ~~~~~~~~~~~~~~^^
  File "\Blender\5.1\extensions\.local\lib\python3.13\site-packages\bonsai\__init__.py", line 141, in get_debug_info
    import bonsai.tool as tool
  File "\Blender\5.1\extensions\.local\lib\python3.13\site-packages\bonsai\tool\__init__.py", line 23, in <module>
    from bonsai.tool.attribute import Attribute
  File "\Blender\5.1\extensions\.local\lib\python3.13\site-packages\bonsai\tool\attribute.py", line 31, in <module>
    import bonsai.bim.helper as helper
  File "\Blender\5.1\extensions\.local\lib\python3.13\site-packages\bonsai\bim\__init__.py", line 28, in <module>
    from . import handler, operator, prop, ui
  File "\Blender\5.1\extensions\.local\lib\python3.13\site-packages\bonsai\bim\handler.py", line 36, in <module>
    from bonsai.bim.module.aggregate.decorator import AggregateDecorator
  File "\Blender\5.1\extensions\.local\lib\python3.13\site-packages\bonsai\bim\module\aggregate\__init__.py", line 21, in <module>
    from . import operator, prop, ui
  File "\Blender\5.1\extensions\.local\lib\python3.13\site-packages\bonsai\bim\module\aggregate\operator.py", line 32, in <module>
    class BIM_OT_aggregate_assign_object(bpy.types.Operator, tool.Ifc.Operator):
                                                             ^^^^^^^^
AttributeError: partially initialized module 'bonsai.tool' from '\Blender\5.1\extensions\.local\lib\python3.13\site-packages\bonsai\tool\__init__.py' has no attribute 'Ifc' (most likely due to a circular import)
```
2026-03-13 20:26:23 +05:00
Andrej730 298beacef6 Bonsai - remove pyperclip use 2026-03-13 20:26:22 +05:00
Andrej730 eba798c544 typing 2026-03-13 20:26:22 +05:00
dependabot[bot] 1576302caf Bump devalue from 5.6.3 to 5.6.4 in /src/ifctester/webapp
Bumps [devalue](https://github.com/sveltejs/devalue) from 5.6.3 to 5.6.4.
- [Release notes](https://github.com/sveltejs/devalue/releases)
- [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/devalue/compare/v5.6.3...v5.6.4)

---
updated-dependencies:
- dependency-name: devalue
  dependency-version: 5.6.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-13 07:58:26 +01:00
dependabot[bot] d7f29c4494 Bump tar from 7.5.10 to 7.5.11 in /src/ifctester/webapp
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.10 to 7.5.11.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.10...v7.5.11)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.11
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-13 07:58:22 +01:00
dependabot[bot] 4ff6f7c78b Bump black from 26.3.0 to 26.3.1
Bumps [black](https://github.com/psf/black) from 26.3.0 to 26.3.1.
- [Release notes](https://github.com/psf/black/releases)
- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)
- [Commits](https://github.com/psf/black/compare/26.3.0...26.3.1)

---
updated-dependencies:
- dependency-name: black
  dependency-version: 26.3.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-13 07:58:06 +01:00
Andrej730 0b44e146bd Fix error starting Bonsai (77697aeef) 2026-03-13 11:57:17 +05:00
tsomanna_QCOM cf42f986c4 Add Support for IfcOpenShell on Win ARM64 2026-03-12 20:29:10 +01:00
tsomanna_QCOM e84142894e Add Support for IfcOpenShell on Win ARM64 2026-03-12 20:29:10 +01:00
tsomanna_QCOM b38a0dce1f Add Support for IfcOpenShell on Win ARM64 2026-03-12 20:29:10 +01:00
tsomanna_QCOM ae253f5e2a Add Support for IfcOpenShell on Win ARM64 2026-03-12 20:29:10 +01:00
tsomanna_QCOM b25c24a007 Add Support for IfcOpenShell on Win ARM64 2026-03-12 20:29:10 +01:00
Andrej730 8bd3fab608 Linked Models - option to isolate selected object
Quick demo - https://files.catbox.moe/6chdx7.mp4
2026-03-12 20:21:10 +05:00
Andrej730 82951fe702 Pylance - ignore _deps folder
In my case it was adding 3115 Python files and VS Code kept indexing them.
2026-03-12 20:21:10 +05:00
Andrej730 77697aeefc typing 2026-03-12 20:21:10 +05:00
Thomas Krijnen 71442bd4d4 Submodule 2026-03-12 12:34:05 +01:00
Andrej730 f7bee258c6 Linked models - add description for georeferencing indicator
Example - https://files.catbox.moe/bkn9pn.png
2026-03-11 18:38:25 +05:00
Andrej730 0585f8716a Quick Favorites Manager - support enum items 2026-03-11 18:38:25 +05:00
Andrej730 f3fe1a7bf0 ci.yml - BUILD_EXAMPLES=ON to keep testing examples build 2026-03-11 18:38:25 +05:00
Andrej730 61ba6a7989 Add operator to run search generic search queries
So it will be easy to add queries to quick favorites.
2026-03-11 18:38:25 +05:00
Andrej730 97f900e62f Quick Favorites Manager - show operators suggestions 2026-03-11 18:38:25 +05:00
Andrej730 594d72d7e1 Quick Favorites Manager
Blender doesn't have it's own quick favorites manager and working with them can be not very flexible - you can add them in context menu and remove them from Quick Favorites menu. But you can't reorder them, you can't rename them and you can't even add a new button to favorites if it's not added by some addon in the UI.

Have been stumbling upon this for awhile and decided to create an experimental manager UI for this. Things it can do:
- help user create a button with any operator in Blender and properties they prefer to then save it Quick Favorites. Which seems can be very useful in Bonsai, since you can create separate buttons for all kinds of selectors expressions, class assignment or other operators.

- it can import quick favorites from user's actual current quick favorites, so they can just modify them a bit, reorder, rename and then add them again.

- Since quick favorites are not exposed to Python API in Blender, we're using a very hacky way to retrieve them from Blender and don't provide our own buttons for adding and removing quick favorites, as it may be dangerous and even more hacky in implementation. So the workflow for user is to either generate some buttons and add them to quick favorites using Manager or to import it's own quick favorites, then change them how they like, then remove quick favorites using usual quick favorites menu and then add new button one by one.

Small demo - https://files.catbox.moe/vyffp6.mp4
2026-03-11 18:38:24 +05:00
Andrej730 578caaf2cd tool.Blender.update_all_viewports 2026-03-11 18:38:24 +05:00
Andrej730 15ea092ac4 typing 2026-03-11 18:38:23 +05:00
Andrej730 4b12b6dacd bim.hide_queried_linked_element - note known UNDO limitation 2026-03-11 18:38:23 +05:00
Andrej730 584bbe3b83 tool/test_project - remove redundant __init__ 2026-03-11 18:38:22 +05:00
Andrej730 e47b7bca4b ci-black-formatting.yml - note on Python versions used 2026-03-11 18:38:22 +05:00
Andrej730 62b108766b ci-black-formatting.yml - note on Python versions used 2026-03-11 18:38:22 +05:00
HugoBallee 972a1fd309 Update getting_started.rst
IFC_SCHEMA_NAME matching includes
2026-03-10 09:41:09 +01:00
Bruno Postle 6f0bb21a43 Disable building example applications by default, closes #7763
Enable with -DBUILD_EXAMPLES=ON
2026-03-09 22:59:34 +00:00
dependabot[bot] 72f279381f Bump immutable from 5.1.2 to 5.1.5 in /src/ifctester/webapp
Bumps [immutable](https://github.com/immutable-js/immutable-js) from 5.1.2 to 5.1.5.
- [Release notes](https://github.com/immutable-js/immutable-js/releases)
- [Changelog](https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/immutable-js/immutable-js/compare/v5.1.2...v5.1.5)

---
updated-dependencies:
- dependency-name: immutable
  dependency-version: 5.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:33:44 +01:00
dependabot[bot] 9873e403bc Bump tar from 7.5.9 to 7.5.10 in /src/ifctester/webapp
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.9 to 7.5.10.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.9...v7.5.10)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.10
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:33:38 +01:00
dependabot[bot] a48449bc9c Bump docker/setup-buildx-action from 3 to 4
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:33:31 +01:00
dependabot[bot] 8cc50b7399 Bump docker/build-push-action from 6 to 7
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:33:25 +01:00
dependabot[bot] da027b912e Bump black from 26.1.0 to 26.3.0
Bumps [black](https://github.com/psf/black) from 26.1.0 to 26.3.0.
- [Release notes](https://github.com/psf/black/releases)
- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)
- [Commits](https://github.com/psf/black/compare/26.1.0...26.3.0)

---
updated-dependencies:
- dependency-name: black
  dependency-version: 26.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:33:18 +01:00
dependabot[bot] b65a69b9ca Bump docker/login-action from 3 to 4
Bumps [docker/login-action](https://github.com/docker/login-action) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:25:36 +01:00
dependabot[bot] 3b3b1f1eab Bump ruff from 0.15.4 to 0.15.5
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.4 to 0.15.5.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.15.4...0.15.5)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.15.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:25:11 +01:00
dependabot[bot] ff1b74ef10 Bump docker/setup-qemu-action from 3 to 4
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:22:05 +01:00
Richard Brice 610d639c21 Fixes rotation lerp test in make_loft 2026-03-08 10:37:05 -07:00
Richard Brice e282a18474 Fixes crash in taxonomy::loft::print_impl when axis == nullptr 2026-03-08 09:55:47 -07:00
Thomas Krijnen 0469a9528b use basic casts to prevent needless item upgrades #7738 2026-03-06 16:34:12 +01:00
Andrej730 f9486be172 get_linked_element_geom_slice - add tests 2026-03-06 19:07:34 +05:00
Andrej730 3a59425a64 Linked IFC models - hotkey to hide selected geometry
Demo - https://files.catbox.moe/aok74w.mp4
2026-03-06 19:07:34 +05:00
Andrej730 9d0c172a53 bim.select_linked_model_element
Refactored methods for accessing objects in linked models and added a simple operator to select object in linked model by providing guid.

A quick demo - https://files.catbox.moe/sjjw37.mp4
2026-03-06 19:07:34 +05:00
Andrej730 ecc82a52f5 ExtractPropertiesToSQLite - add typing for created columns 2026-03-06 19:07:34 +05:00
Andrej730 adaf33b74f project.operator - reuse ray_cast method 2026-03-06 19:07:33 +05:00
Andrej730 a52a329197 Update note on Blender upstream issue
Fix was included in 4.5.7 (see 141496 bug in https://projects.blender.org/blender/blender/issues/141871)
2026-03-06 19:07:33 +05:00
Andrej730 3a54e808f6 dev_environment python - create user site packages folder if missing
E.g. it might be missing if Python was just installed. Also print paths first before symlinking, making it easier to debug.
2026-03-06 19:07:33 +05:00
Andrej730 f102c7c1b4 ifcopenshell-python makefile - add note about PYNUMBER 2026-03-06 19:07:33 +05:00
Andrej730 9005333f53 ifcpatch MergeProjects - make logger arg optional 2026-03-06 19:07:33 +05:00
Andrej730 a26dbe252a bim.append_inspected_linked_element - fix missing UNDO 2026-03-06 19:07:33 +05:00
Andrej730 8743d5643e typing 2026-03-06 19:07:33 +05:00
Andrej730 619848823c Sort out imports 2026-03-06 19:07:32 +05:00
Richard Brice 951ade4b57 Fix bug introduced in 65d5df78 2026-03-05 14:50:33 -08:00
Richard Brice 1378919709 Fixes IfcLinearPlacement fallback position warning 2026-03-03 13:16:55 -08:00
Ryan Schultz 61cfa48c2c docs: add BonsaiPR bleeding edge installation section (#7721)
* Fix #7718: Fix FallDecorator label calculation for all slope annotation types

- Fix wrong dict key type in decoration.py: DecoratorData.data["fall"] is
  keyed by obj.name (str) but was looked up with obj (Object), causing
  object_type to always be None
- Apply obj.matrix_world transform to spline points before computing rise/run
  in both decoration.py and svgwriter.py; local coordinates have Z=0 for flat
  annotations, world coordinates correctly reflect elevation change
- Use hypotenuse (segment_length) instead of run as the denominator for
  SLOPE_FRACTION label display

Generated with the assistance of an AI coding tool.

* docs: add BonsaiPR bleeding edge installation section

Add new section to installation.rst documenting the BonsaiPR
community build, including why it exists, how the automated
PR-merging system works, installation steps with automated
updates, manual installation, and the PR workflow for
contributors.

Generated with the assistance of an AI coding tool.

* whoops
2026-03-03 18:48:03 +11:00
falken10vdl d6c782aba5 Add newline handling with add_newline_between_words n SvgWriter for text literals 2026-03-03 18:46:14 +11:00
dependabot[bot] d4150e0558 Bump svelte from 5.53.0 to 5.53.6 in /src/ifctester/webapp
Bumps [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte) from 5.53.0 to 5.53.6.
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.53.6/packages/svelte)

---
updated-dependencies:
- dependency-name: svelte
  dependency-version: 5.53.6
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-03 18:44:47 +11:00
dependabot[bot] 4f6051cb0a Bump ruff from 0.15.2 to 0.15.4
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.2 to 0.15.4.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.15.2...0.15.4)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.15.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-03 18:44:40 +11:00
dependabot[bot] 5a27ec9814 Bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-03 18:44:32 +11:00
dependabot[bot] 0ce60f5061 Bump actions/download-artifact from 7.0.0 to 8.0.0
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7.0.0 to 8.0.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v7.0.0...v8.0.0)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-03 18:44:25 +11:00
Thomas Krijnen 43146530b0 arrange polygons: Alternative (unused) perimiter approach; simpler topology handling; projection-based clean-up 2026-03-02 21:49:05 +01:00
Andrej730 db377e2178 Also bump binary version 2026-02-27 15:20:18 +05:00
Thomas Krijnen 5b0511379b IfcAxis1Placement.Axis is optional #7728 2026-02-27 11:06:45 +01:00
Andrej730 f8663b5e2b Bump ifcopenshell build
Just because it didn't happened for a while now and we need to test it.
2026-02-27 14:52:56 +05:00
Andrej730 92c979fbbf black . 2026-02-27 14:52:55 +05:00
Andrej730 8834a51122 format cmake files 2026-02-27 14:52:55 +05:00
Andrej730 1c5b825d8e build-all-win - fix missing compression for Python zip archives
Same as 5ebd425, should resolve https://github.com/ifcopenshell/ifcopenshell/issues/7404
2026-02-27 12:09:34 +05:00
dependabot[bot] 58c69f9d35 Bump ruff from 0.15.1 to 0.15.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.1 to 0.15.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.15.1...0.15.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.15.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-26 13:15:49 +01:00
dependabot[bot] 198e111a92 Bump gersemi from 0.25.4 to 0.26.0
Bumps [gersemi](https://github.com/BlankSpruce/gersemi) from 0.25.4 to 0.26.0.
- [Release notes](https://github.com/BlankSpruce/gersemi/releases)
- [Changelog](https://github.com/BlankSpruce/gersemi/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BlankSpruce/gersemi/compare/0.25.4...0.26.0)

---
updated-dependencies:
- dependency-name: gersemi
  dependency-version: 0.26.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-26 13:15:39 +01:00
dependabot[bot] 35886c9f72 Bump svelte from 5.33.10 to 5.53.0 in /src/ifctester/webapp
Bumps [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte) from 5.33.10 to 5.53.0.
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.53.0/packages/svelte)

---
updated-dependencies:
- dependency-name: svelte
  dependency-version: 5.53.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-26 13:14:38 +01:00
dependabot[bot] 097c8af7c7 Bump rollup from 4.41.1 to 4.59.0 in /src/ifctester/webapp
Bumps [rollup](https://github.com/rollup/rollup) from 4.41.1 to 4.59.0.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.41.1...v4.59.0)

---
updated-dependencies:
- dependency-name: rollup
  dependency-version: 4.59.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-26 13:14:21 +01:00
Andrej730 cfea3de552 cmake - fix msvc warning on linking without /ltcg flag
Linking flags were missing for `MODULE` type libraries, example warning: `IfcPythonPYTHON_wrap.obj : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance`
2026-02-26 17:12:55 +05:00
Andrej730 5b86eedb26 cmake - fix ifc geom mapping not linking against IfcGeom library 2026-02-26 17:12:55 +05:00
Andrej730 fc13bcd055 bump ccache-action 2026-02-26 17:12:55 +05:00
Andrej730 be4806471d cache_dependencies - use tar instead of tarfile for archiving 2026-02-26 17:12:55 +05:00
Andrej730 7909997d42 build workflows - reuse cache_dependencies.py 2026-02-26 17:12:54 +05:00
Andrej730 00cd0b76f9 .gersemirc - search src for definitions
To fix errors when parsing custom macro from `src\examples\CMakeLists.txt`, see https://github.com/BlankSpruce/gersemi/issues/105
2026-02-26 17:12:54 +05:00
Andrej730 aa7710dd74 cache_dependencies.py - note expected cwd 2026-02-26 17:12:54 +05:00
Andrej730 fc7d15324f build-all - don't use main repo pyproject.toml for wasm builds 2026-02-26 17:12:54 +05:00
Andrej730 f8f4725054 build-all - remove wasm cxx flags workaround
As issue is now fixed upstream (https://github.com/pyodide/pyodide-build/issues/251)
2026-02-26 17:12:54 +05:00
Andrej730 333b6210a4 black . 2026-02-26 17:12:52 +05:00
Andrej730 ff3933a117 Remove some unused imports 2026-02-26 17:12:46 +05:00
Andrej730 34ffaea2c9 cmake - link serializers against IfcGeom to fix wasm build
jsonserializer is using ifcgeom and also eigen3
2026-02-26 17:12:45 +05:00
Andrej730 526b9537a9 build_pyodide.sh - allow executing multiple times 2026-02-26 17:12:45 +05:00
Andrej730 fb1c9eb7e3 build-all - fix missing f-string 2026-02-26 17:12:45 +05:00
Andrej730 a61d5a12fb build-all - use cmake to build swig
To keep it in sync with Windows build. Also Removed pcre2 dependency as apparently it's not required - we were not using it on Windows.
2026-02-26 17:12:45 +05:00
Andrej730 e54d16ef57 build_osx - ensure we use bison from brew instead of the default one 2026-02-26 17:12:45 +05:00
Andrej730 4591b6d926 cmake - ignore rocksdb shared library
If makes code target it by default if it's available, leading to errors below, since we don't really support using shared rocksdb. See some more details in the code comment.

IfcPythonPYTHON_wrap.cxx.obj : error LNK2001: unresolved external symbol "public: __cdecl rocksdb::Cleanable::~Cleanable(void)" (??1Cleanable@rocksdb@@QEAA@XZ)
IfcPythonPYTHON_wrap.cxx.obj : error LNK2001: unresolved external symbol "public: __cdecl rocksdb::Cleanable::Cleanable(void)" (??0Cleanable@rocksdb@@QEAA@XZ)
IfcPythonPYTHON_wrap.cxx.obj : error LNK2001: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl rocksdb::Slice::ToString(bool)const " (?ToString@Slice@rocksdb@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "const rocksdb::WriteBatch::`vftable'" (??_7WriteBatch@rocksdb@@6B@)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual __cdecl rocksdb::WriteBatch::~WriteBatch(void)" (??1WriteBatch@rocksdb@@UEAA@XZ)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: __cdecl rocksdb::WriteBatch::WriteBatch(unsigned __int64,unsigned __int64,unsigned __int64,unsigned __int64)" (??0WriteBatch@rocksdb@@QEAA@_K000@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: __cdecl rocksdb::ColumnFamilyOptions::ColumnFamilyOptions(void)" (??0ColumnFamilyOptions@rocksdb@@QEAA@XZ)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "protected: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl rocksdb::Configurable::GetOptionName(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?GetOptionName@Configurable@rocksdb@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV34@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "protected: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl rocksdb::Configurable::SerializeOptions(struct rocksdb::ConfigOptions const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?SerializeOptions@Configurable@rocksdb@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBUConfigOptions@2@AEBV34@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "protected: virtual bool __cdecl rocksdb::Configurable::OptionsAreEqual(struct rocksdb::ConfigOptions const &,class rocksdb::OptionTypeInfo const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,void const * const,void const * const,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)const " (?OptionsAreEqual@Configurable@rocksdb@@MEBA_NAEBUConfigOptions@2@AEBVOptionTypeInfo@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBX3PEAV56@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "protected: virtual class rocksdb::Status __cdecl rocksdb::Configurable::ParseOption(struct rocksdb::ConfigOptions const &,class rocksdb::OptionTypeInfo const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,void *)" (?ParseOption@Configurable@rocksdb@@MEAA?AVStatus@2@AEBUConfigOptions@2@AEBVOptionTypeInfo@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2PEAX@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "protected: virtual class rocksdb::Status __cdecl rocksdb::Configurable::ConfigureOptions(struct rocksdb::ConfigOptions const &,class std::unordered_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::hash<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,struct std::equal_to<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > const &,class std::unordered_map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::hash<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,struct std::equal_to<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > *)" (?ConfigureOptions@Configurable@rocksdb@@MEAA?AVStatus@2@AEBUConfigOptions@2@AEBV?$unordered_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$hash@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@U?$equal_to@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@2@@std@@PEAV56@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "protected: virtual class rocksdb::Status __cdecl rocksdb::Configurable::ParseStringOptions(struct rocksdb::ConfigOptions const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?ParseStringOptions@Configurable@rocksdb@@MEAA?AVStatus@2@AEBUConfigOptions@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "protected: virtual void const * __cdecl rocksdb::Configurable::GetOptionsPtr(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?GetOptionsPtr@Configurable@rocksdb@@MEBAPEBXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual class rocksdb::Status __cdecl rocksdb::Configurable::ValidateOptions(struct rocksdb::DBOptions const &,struct rocksdb::ColumnFamilyOptions const &)const " (?ValidateOptions@Configurable@rocksdb@@UEBA?AVStatus@2@AEBUDBOptions@2@AEBUColumnFamilyOptions@2@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual class rocksdb::Status __cdecl rocksdb::Configurable::PrepareOptions(struct rocksdb::ConfigOptions const &)" (?PrepareOptions@Configurable@rocksdb@@UEAA?AVStatus@2@AEBUConfigOptions@2@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual bool __cdecl rocksdb::Configurable::AreEquivalent(struct rocksdb::ConfigOptions const &,class rocksdb::Configurable const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)const " (?AreEquivalent@Configurable@rocksdb@@UEBA_NAEBUConfigOptions@2@PEBV12@PEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual class rocksdb::Status __cdecl rocksdb::Configurable::GetOption(struct rocksdb::ConfigOptions const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)const " (?GetOption@Configurable@rocksdb@@UEBA?AVStatus@2@AEBUConfigOptions@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAV56@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "class rocksdb::TableFactory * __cdecl rocksdb::NewBlockBasedTableFactory(struct rocksdb::BlockBasedTableOptions const &)" (?NewBlockBasedTableFactory@rocksdb@@YAPEAVTableFactory@1@AEBUBlockBasedTableOptions@1@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: class std::shared_ptr<class rocksdb::Cache> __cdecl rocksdb::LRUCacheOptions::MakeSharedCache(void)const " (?MakeSharedCache@LRUCacheOptions@rocksdb@@QEBA?AV?$shared_ptr@VCache@rocksdb@@@std@@XZ)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: static class rocksdb::Status __cdecl rocksdb::DB::OpenForReadOnly(struct rocksdb::Options const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::unique_ptr<class rocksdb::DB,struct std::default_delete<class rocksdb::DB> > *,bool)" (?OpenForReadOnly@DB@rocksdb@@SA?AVStatus@2@AEBUOptions@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAV?$unique_ptr@VDB@rocksdb@@U?$default_delete@VDB@rocksdb@@@std@@@6@_N@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: static class rocksdb::Status __cdecl rocksdb::DB::Open(struct rocksdb::Options const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::unique_ptr<class rocksdb::DB,struct std::default_delete<class rocksdb::DB> > *)" (?Open@DB@rocksdb@@SA?AVStatus@2@AEBUOptions@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAV?$unique_ptr@VDB@rocksdb@@U?$default_delete@VDB@rocksdb@@@std@@@6@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "class std::vector<enum rocksdb::CompressionType,class std::allocator<enum rocksdb::CompressionType> > const & __cdecl rocksdb::GetSupportedCompressions(void)" (?GetSupportedCompressions@rocksdb@@YAAEBV?$vector@W4CompressionType@rocksdb@@V?$allocator@W4CompressionType@rocksdb@@@std@@@std@@XZ)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual bool __cdecl rocksdb::MergeOperator::PartialMergeMulti(class rocksdb::Slice const &,class std::deque<class rocksdb::Slice,class std::allocator<class rocksdb::Slice> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,class rocksdb::Logger *)const " (?PartialMergeMulti@MergeOperator@rocksdb@@UEBA_NAEBVSlice@2@AEBV?$deque@VSlice@rocksdb@@V?$allocator@VSlice@rocksdb@@@std@@@std@@PEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@PEAVLogger@2@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual bool __cdecl rocksdb::MergeOperator::FullMergeV3(struct rocksdb::MergeOperator::MergeOperationInputV3 const &,struct rocksdb::MergeOperator::MergeOperationOutputV3 *)const " (?FullMergeV3@MergeOperator@rocksdb@@UEBA_NAEBUMergeOperationInputV3@12@PEAUMergeOperationOutputV3@12@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual bool __cdecl rocksdb::MergeOperator::FullMergeV2(struct rocksdb::MergeOperator::MergeOperationInput const &,struct rocksdb::MergeOperator::MergeOperationOutput *)const " (?FullMergeV2@MergeOperator@rocksdb@@UEBA_NAEBUMergeOperationInput@12@PEAUMergeOperationOutput@12@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "protected: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl rocksdb::Customizable::SerializeOptions(struct rocksdb::ConfigOptions const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?SerializeOptions@Customizable@rocksdb@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBUConfigOptions@2@AEBV34@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "protected: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl rocksdb::Customizable::GetOptionName(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?GetOptionName@Customizable@rocksdb@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV34@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual class rocksdb::Status __cdecl rocksdb::Customizable::GetOption(struct rocksdb::ConfigOptions const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)const " (?GetOption@Customizable@rocksdb@@UEBA?AVStatus@2@AEBUConfigOptions@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAV56@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: virtual bool __cdecl rocksdb::Customizable::AreEquivalent(struct rocksdb::ConfigOptions const &,class rocksdb::Configurable const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)const " (?AreEquivalent@Customizable@rocksdb@@UEBA_NAEBUConfigOptions@2@PEBVConfigurable@2@PEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "public: __cdecl rocksdb::DBOptions::DBOptions(void)" (??0DBOptions@rocksdb@@QEAA@XZ)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "private: virtual bool __cdecl rocksdb::AssociativeMergeOperator::PartialMerge(class rocksdb::Slice const &,class rocksdb::Slice const &,class rocksdb::Slice const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,class rocksdb::Logger *)const " (?PartialMerge@AssociativeMergeOperator@rocksdb@@EEBA_NAEBVSlice@2@00PEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAVLogger@2@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "private: virtual bool __cdecl rocksdb::AssociativeMergeOperator::FullMergeV2(struct rocksdb::MergeOperator::MergeOperationInput const &,struct rocksdb::MergeOperator::MergeOperationOutput *)const " (?FullMergeV2@AssociativeMergeOperator@rocksdb@@EEBA_NAEBUMergeOperationInput@MergeOperator@2@PEAUMergeOperationOutput@42@@Z)
IfcParse.lib(IfcFile.cpp.obj) : error LNK2001: unresolved external symbol "bool const rocksdb::kDefaultToAdaptiveMutex" (?kDefaultToAdaptiveMutex@rocksdb@@3_NB)
ifcwrap\_ifcopenshell_wrapper.cp311-win_amd64.pyd : fatal error LNK1120: 34 unresolved externals

Or on Unix:
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcEntityInstanceData.cpp.o): in function `rocksdb::PinnableSlice::PinnableSlice(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:141: undefined reference to `rocksdb::Cleanable::Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcEntityInstanceData.cpp.o): in function `rocksdb::PinnableSlice::~PinnableSlice()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: /home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::Configurable::~Configurable()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/configurable.h:59: undefined reference to `vtable for rocksdb::Configurable'
/usr/bin/ld: /home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/configurable.h:59: undefined reference to `vtable for rocksdb::Configurable'
/usr/bin/ld: /home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/configurable.h:59: undefined reference to `vtable for rocksdb::Configurable'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::Customizable::GetOptionsPtr(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/customizable.h:105: undefined reference to `rocksdb::Configurable::GetOptionsPtr(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
/usr/bin/ld: /home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/customizable.h:105: undefined reference to `rocksdb::Configurable::GetOptionsPtr(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
/usr/bin/ld: /home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/customizable.h:105: undefined reference to `rocksdb::Configurable::GetOptionsPtr(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::Options::Options()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/options.h:1628: undefined reference to `rocksdb::DBOptions::DBOptions()'
/usr/bin/ld: /home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/options.h:1628: undefined reference to `rocksdb::ColumnFamilyOptions::ColumnFamilyOptions()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `IfcParse::impl::rocks_db_file_storage::rocks_db_file_storage(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IfcParse::IfcFile*, bool)':
/home/andrej/ifcopenshell/src/ifcparse/IfcFile.cpp:421: undefined reference to `rocksdb::GetSupportedCompressions()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `init_db':
/home/andrej/ifcopenshell/src/ifcparse/IfcFile.cpp:440: undefined reference to `rocksdb::kDefaultToAdaptiveMutex'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::NewLRUCache(unsigned long, int, bool, double, std::shared_ptr<rocksdb::MemoryAllocator>, bool, rocksdb::CacheMetadataChargePolicy, double)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/cache.h:282: undefined reference to `rocksdb::LRUCacheOptions::MakeSharedCache() const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `init_db':
/home/andrej/ifcopenshell/src/ifcparse/IfcFile.cpp:445: undefined reference to `rocksdb::NewBlockBasedTableFactory(rocksdb::BlockBasedTableOptions const&)'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::DB::OpenForReadOnly(rocksdb::Options const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rocksdb::DB**, bool)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/db.h:243: undefined reference to `rocksdb::DB::OpenForReadOnly(rocksdb::Options const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unique_ptr<rocksdb::DB, std::default_delete<rocksdb::DB> >*, bool)'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::DB::Open(rocksdb::Options const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rocksdb::DB**)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/db.h:187: undefined reference to `rocksdb::DB::Open(rocksdb::Options const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unique_ptr<rocksdb::DB, std::default_delete<rocksdb::DB> >*)'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb_set_view<unsigned long>::iterator::extract_current_value() const':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_set_view.h:70: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::PinnableSlice::~PinnableSlice()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::PinnableSlice::PinnableSlice(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:141: undefined reference to `rocksdb::Cleanable::Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::PinnableSlice::~PinnableSlice()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb_set_view<unsigned long>::iterator::iterator(rocksdb_set_view<unsigned long>::iterator const&)':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_set_view.h:103: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: /home/andrej/ifcopenshell/src/ifcparse/rocksdb_set_view.h:106: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `IfcParse::impl::rocks_db_file_storage::process_deletion_inverse(IfcUtil::IfcBaseClass*)':
/home/andrej/ifcopenshell/src/ifcparse/IfcFile.cpp:526: undefined reference to `rocksdb::WriteBatch::~WriteBatch()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::WriteBatch::WriteBatch(unsigned long, unsigned long)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/write_batch.h:67: undefined reference to `rocksdb::WriteBatch::WriteBatch(unsigned long, unsigned long, unsigned long, unsigned long)'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `rocksdb::WriteBatch::DeleteRange(rocksdb::Slice const&, rocksdb::Slice const&)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/write_batch.h:164: undefined reference to `rocksdb::WriteBatch::DeleteRange(rocksdb::ColumnFamilyHandle*, rocksdb::Slice const&, rocksdb::Slice const&)'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o): in function `IfcParse::impl::rocks_db_file_storage::process_deletion_inverse(IfcUtil::IfcBaseClass*)':
/home/andrej/ifcopenshell/src/ifcparse/IfcFile.cpp:526: undefined reference to `rocksdb::WriteBatch::~WriteBatch()'
/usr/bin/ld: /home/andrej/ifcopenshell/src/ifcparse/IfcFile.cpp:547: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: /home/andrej/ifcopenshell/src/ifcparse/IfcFile.cpp:526: undefined reference to `rocksdb::WriteBatch::~WriteBatch()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTIN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x10): undefined reference to `typeinfo for rocksdb::AssociativeMergeOperator'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x20): undefined reference to `rocksdb::Customizable::GetOption(rocksdb::ConfigOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x28): undefined reference to `rocksdb::Customizable::AreEquivalent(rocksdb::ConfigOptions const&, rocksdb::Configurable const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x38): undefined reference to `rocksdb::Configurable::PrepareOptions(rocksdb::ConfigOptions const&)'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x40): undefined reference to `rocksdb::Configurable::ValidateOptions(rocksdb::DBOptions const&, rocksdb::ColumnFamilyOptions const&) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x50): undefined reference to `rocksdb::Configurable::ParseStringOptions(rocksdb::ConfigOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x58): undefined reference to `rocksdb::Configurable::ConfigureOptions(rocksdb::ConfigOptions const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*)'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x60): undefined reference to `rocksdb::Configurable::ParseOption(rocksdb::ConfigOptions const&, rocksdb::OptionTypeInfo const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, void*)'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x68): undefined reference to `rocksdb::Configurable::OptionsAreEqual(rocksdb::ConfigOptions const&, rocksdb::OptionTypeInfo const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, void const*, void const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x70): undefined reference to `rocksdb::Customizable::SerializeOptions(rocksdb::ConfigOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0x78): undefined reference to `rocksdb::Customizable::GetOptionName(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0xb8): undefined reference to `rocksdb::MergeOperator::FullMergeV3(rocksdb::MergeOperator::MergeOperationInputV3 const&, rocksdb::MergeOperator::MergeOperationOutputV3*) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0xc0): undefined reference to `rocksdb::AssociativeMergeOperator::PartialMerge(rocksdb::Slice const&, rocksdb::Slice const&, rocksdb::Slice const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, rocksdb::Logger*) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcFile.cpp.o):(.data.rel.ro._ZTVN12_GLOBAL__N_126ConcatenateIdMergeOperatorE+0xc8): undefined reference to `rocksdb::MergeOperator::PartialMergeMulti(rocksdb::Slice const&, std::deque<rocksdb::Slice, std::allocator<rocksdb::Slice> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, rocksdb::Logger*) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb_map_adapter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, DefaultCodec<unsigned long> >::iterator::operator*() const':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:261: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: /home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:263: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb_map_adapter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, DefaultCodec<unsigned long> >::iterator::operator==(rocksdb_map_adapter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, DefaultCodec<unsigned long> >::iterator const&) const':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:296: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: /home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:296: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::~PinnableSlice()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::PinnableSlice(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:141: undefined reference to `rocksdb::Cleanable::Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::~PinnableSlice()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: /home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::PinnableSlice(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:141: undefined reference to `rocksdb::Cleanable::Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::~PinnableSlice()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb_map_adapter<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, DefaultCodec<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::iterator::operator*() const':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:261: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: /home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:263: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb_map_adapter<unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, DefaultCodec<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::find(unsigned long const&) const':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:327: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb_map_adapter<std::tuple<int, int, int>, std::vector<unsigned int, std::allocator<unsigned int> >, DefaultCodec<std::vector<unsigned int, std::allocator<unsigned int> > > >::find(std::tuple<int, int, int> const&) const':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:327: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb_map_adapter<std::tuple<int, int, int>, std::vector<unsigned int, std::allocator<unsigned int> >, DefaultCodec<std::vector<unsigned int, std::allocator<unsigned int> > > >::iterator::operator*() const':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:261: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o):/home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:263: more undefined references to `rocksdb::Slice::ToString[abi:cxx11](bool) const' follow
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::~PinnableSlice()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::PinnableSlice(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:141: undefined reference to `rocksdb::Cleanable::Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::~PinnableSlice()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb_map_adapter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, DefaultCodec<unsigned long> >::find(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:327: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb_map_adapter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, DefaultCodec<unsigned long> >::iterator::iterator(rocksdb_map_adapter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, DefaultCodec<unsigned long> >::iterator const&)':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:230: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: /home/andrej/ifcopenshell/src/ifcparse/rocksdb_map_adapter.h:233: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::PinnableSlice(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:141: undefined reference to `rocksdb::Cleanable::Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb::PinnableSlice::~PinnableSlice()':
/home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: /home/andrej/ifcopenshell/build/Linux/x86_64/install/rocksdb-9.11.2/include/rocksdb/slice.h:138: undefined reference to `rocksdb::Cleanable::~Cleanable()'
/usr/bin/ld: ../ifcparse/libIfcParse.a(IfcParse.cpp.o): in function `rocksdb_set_view<unsigned long>::iterator::operator==(rocksdb_set_view<unsigned long>::iterator const&) const':
/home/andrej/ifcopenshell/src/ifcparse/rocksdb_set_view.h:170: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
/usr/bin/ld: /home/andrej/ifcopenshell/src/ifcparse/rocksdb_set_view.h:170: undefined reference to `rocksdb::Slice::ToString[abi:cxx11](bool) const'
collect2: error: ld returned 1 exit status
make[2]: *** [ifcconvert/CMakeFiles/IfcConvert.dir/build.make:236: ifcconvert/IfcConvert] Error 1
make[1]: *** [CMakeFiles/Makefile2:569: ifcconvert/CMakeFiles/IfcConvert.dir/all] Error 2
2026-02-26 17:12:44 +05:00
Andrej730 6492fdeb05 build-all - add zlib and openssl to RHEL packages 2026-02-26 17:12:44 +05:00
Andrej730 8eb0641e70 build-all - mention zlib requirement 2026-02-26 17:12:44 +05:00
Andrej730 6face696cb build-all - use cmake arg instead of a patch to disable ExpToCasExe 2026-02-26 17:12:42 +05:00
Andrej730 4c4eed5dd4 build_rocky - switch to rocky 9
As rocky 8 is not updating anymore for 2 years and we need some updated dependencies (e.g. `bison` 3.5+ for newer version of `swig`).
2026-02-26 17:01:56 +05:00
Andrej730 634600b65f FindOpenCASCADE - rescan dependencies for cmake config 2026-02-26 17:01:56 +05:00
Andrej730 d43b9ee353 build-all - ensure Python was built with openssl 2026-02-26 17:01:56 +05:00
Andrej730 5ea4290920 build-all - ensure bison is installed 2026-02-26 17:01:56 +05:00
Andrej730 c8ca904333 build-all - distinct command and path in logs 2026-02-26 17:01:56 +05:00
Andrej730 59c28b5ae6 build_rocky - use dnf instead of yum
It's using `dnf` either way, but just to make it more explicit.
2026-02-26 17:01:56 +05:00
Andrej730 c649a4b522 build-all - don't fail silently on missing Python dependencies 2026-02-26 17:01:55 +05:00
Andrej730 5ebd4256a1 build-all-win.py - fix missing compression
Resulting in larger zip files for builds, reported in 7404
2026-02-26 17:01:55 +05:00
Andrej730 3ec9d69556 build-deps - support building Boost for VS2026 2026-02-26 17:01:55 +05:00
Andrej730 54a6fb651e tool.ps1 - support commands with 0 args
No such commands atm though.
2026-02-26 17:01:55 +05:00
Andrej730 dcac336b98 tool.ps1 - refer to cecho.cmd directly, use return instead of exit 0
Which is useful when debugging and calling tools.ps1 directly - less thing to modify to make it work.
Also replaced `exit 0` with `return`, so it would be possible to reuse functions inside `tools.ps1`
2026-02-26 17:01:55 +05:00
Andrej730 88a5717295 build-deps.cmd - fix issue building opencollada in cmake 4 2026-02-26 17:01:55 +05:00
Andrej730 8bfceec1fd vs-cfg.cmd - document some output vars 2026-02-26 17:01:55 +05:00
Andrej730 3807479e42 build-deps - update occt config to support cmake 4
And also to make it work in sync with `build-all.py`.
2026-02-26 17:01:54 +05:00
Andrej730 aebcb676f2 windows - add occt patch to support cmake 4 2026-02-26 17:01:54 +05:00
Andrej730 ba5ea08aee Bump swig version to support cmake 4 2026-02-26 17:01:54 +05:00
Andrej730 d4ebf3f308 cmake - error if svgpp submodule is not initialized 2026-02-26 17:01:54 +05:00
Andrej730 d9e488d518 cmake format 2026-02-26 17:01:54 +05:00
Andrej730 1fb6227d13 build-deps - use other mpir fork to support VS 2026 2026-02-26 17:01:54 +05:00
Andrej730 0e90cd81b3 vs-cfg.cmd - add support for Visual Studio 18 2026 2026-02-26 17:01:53 +05:00
Andrej730 ac23c7a74b vs-cfg.cmd - more readable error on supported versions of VS 2026-02-26 17:01:51 +05:00
Andrej730 7322082a0d typing 2026-02-26 17:01:48 +05:00
Andrej730 0234809d0b Prefer direct api calls over tool.Ifc.run 2026-02-26 17:01:48 +05:00
Andrej730 38381f44b9 ci-bonsai-daily - generate timestamp once for all builds
To avoid running in a situation when some builds are using one tag and some are using another and then unstable repo script fails to find builds for some platforms.
2026-02-26 17:01:47 +05:00
Andrej730 83fed6257e run-cmake.bat - deduplicate cmake args code 2026-02-26 17:01:47 +05:00
Andrej730 40d43732ca build-deps - bump proj version to avoid errors in cmake 4+ 2026-02-26 17:01:47 +05:00
Andrej730 521c8eae0d run-cmake.bat - document USE_NINJA env var 2026-02-26 17:01:47 +05:00
Andrej730 5aa7ba6be6 IfcConvert - fix Windows builds stuck on 0.8.0 version 2026-02-26 17:01:47 +05:00
Thomas Krijnen e3464b395e --recursion-limit option in validate.py 2026-02-26 12:38:36 +01:00
Thomas Krijnen 9ab9da2ca8 Update black exclude dirs 2026-02-26 12:36:17 +01:00
Thomas Krijnen 077a0c3755 Run black on express/ 2026-02-26 12:36:01 +01:00
Thomas Krijnen 18527a78e1 rule_executor.py don't log RecursionError as error 2026-02-26 12:35:40 +01:00
falken10vdl 0be348707c Update scale_font_size method to accept a None parameter so it is cleaner the calls from the rest of the code base 2026-02-25 13:28:58 -03:00
falken10vdl 1b784e22af Add decorator font scale property addon setting 2026-02-25 13:28:58 -03:00
falken10vdl c0857c715a Refactor scale_font_size to improve DPI and pixel size handling for better font scaling 2026-02-25 13:28:58 -03:00
falken10vdl ecaea5f776 refactor scale_font_size as per developers feedback 2026-02-25 13:28:58 -03:00
falken10vdl dde6e2d62b black 2026-02-25 13:28:58 -03:00
falken10vdl 8df4b2cd56 Scale font size in PolylineDecorator and BoundingBoxDecorator based on Blender's UI preferences 2026-02-25 13:28:58 -03:00
Richard Brice ece7d6b97f Fixes example in documentation 2026-02-25 14:21:10 +01:00
Thomas Krijnen 2d7a556dd5 Fix sectioned solid cap #7674 2026-02-24 11:26:18 +01:00
Dion Moult dcc25038f9 Fix #7646. Bug with layer thumbnail orientation. 2026-02-24 10:03:33 +11:00
Dion Moult 0d382119dd Fix docs table for selector syntax 2026-02-24 09:53:57 +11:00
Dion Moult 41afaaec0d Revert "Fix #7681: Fix isolate_objects ignoring hide_select/hide_viewport (#7710)"
This reverts commit 7d8c7a2c3d.
2026-02-24 09:53:28 +11:00
Dion Moult f69ea82789 Revert "Fix #7646: Fix layer thumbnail orientation for IFC types"
This reverts commit 514cbb49cc.
2026-02-24 09:53:27 +11:00
Dion Moult 2f5c71588e Revert "Table was not rendering correctly."
This reverts commit 9ff4a7f0e0.
2026-02-24 09:53:24 +11:00
Ryan Schultz 7d8c7a2c3d Fix #7681: Fix isolate_objects ignoring hide_select/hide_viewport (#7710)
Objects with hide_select=True could not be selected during
isolation, causing hide_view_set to incorrectly hide them.
Objects with hide_viewport=True had their H-key hide state
modified as a side effect of hide_view_clear/hide_view_set.
Both are now left unaffected by bim.activate_drawing.

Generated with the assistance of an AI coding tool.
2026-02-23 07:09:18 -06:00
Ryan Schultz 514cbb49cc Fix #7646: Fix layer thumbnail orientation for IFC types
Use EPset_Parametric.LayerSetDirection exclusively to
determine horizontal vs vertical layer rendering in type
thumbnails, rather than hardcoding IfcSlabType checks.
Also fix line drawing to use the is_horizontal flag
consistently.

Generated with the assistance of an AI coding tool.
2026-02-22 17:46:10 -06:00
Ryan Schultz 9ff4a7f0e0 Table was not rendering correctly.
Fix Sphinx docs: replace csv-table with list-table for formatting functions

The documentation table of formatting/query functions was not rendering
because `.. csv-table::` requires strict RFC4180 CSV escaping. The table
contains nested quotes, inch marks (e.g. `3' - 0"`), backticks, and code
examples, which cause the CSV parser in docutils to treat rows as malformed
and drop the entire directive.

Replaced the directive with `.. list-table::`, which parses reStructuredText
instead of CSV and safely supports inline code, quotes, and multi-line cells.

Also moved the examples text outside the directive block and ensured a blank
line after the table so Sphinx does not interpret following paragraphs as
table rows.

No content changes — documentation now renders correctly.

Generated with the assistance of an AI coding tool.
2026-02-22 15:10:29 -06:00
dependabot[bot] 8afe05601e Bump tar from 7.5.7 to 7.5.9 in /src/ifctester/webapp
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.7 to 7.5.9.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.7...v7.5.9)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 08:56:50 +11:00
falken10vdl 1751c36c67 AddReferenceImage: implement option to show texture in solid mode (#7689) 2026-02-19 21:02:57 +11:00
falken10vdl d4388ec76d AddReferenceImage: fix regression with IFC2X3 support, refactor to no longer depend on add_representation or update_representation, remove legacy style updating functionality
* Enhance AddReferenceImage operator to use file browser instead of independent popup dialogue

* Fix dimensions assertion in TestAddReferenceImage

* Remove error in return in _execute (it is not execute)

* Add  IFC2X3 support to AddReferenceImage

* Adde unit="LENGTH" to the x/y properties (every length dimension everywhere in the UI is in project length units. No need to say it explicitly)

* Manually create the texture always, not just for IFC2X3

* Add poll method to AddReferenceImage operator to check for loaded IFC project

* Refactor AddReferenceImage to add representation manually following pattern in root/operator.py's bim.add_element

* Improve File explorer options between new and select from existing project Ifc Reference Images

* Refactor get_existing_reference_images to use selector for filtering image annotations

* No extra args needed after should_add_representation is False

* Doing clean=True deletes everything

* Don't manually add geometry and materials, don't call bpy.ops. Only create IFC data, then use preexisting loading functions to create geometry.

* Black formatting, also now we can start to remove this operator as it becomes obsolete

* Consolidate duplicate UV generation into Loader.load_generated_uv_map

Replace 3 identical XY-UV baking blocks (create_object IMAGE,
bm_add_image_plane, ImageScalingTool) with a single reusable
classmethod in tool.Loader.

* Fix IFC4 texture display in Solid viewport Texture mode

IFC4 IfcTextureCoordinateGenerator Mode=COORD is used, load_texture_maps
falls back to load_generated_uv_map to bake XY-UV data onto the mesh.

* Fix IFC2X3 texture display

* This looks wrong

* Remove legacy override image feature, because we now have a proper styles and texture manager

* Remove legacy override existing image element, because we now have a dedicated styles texture manager

* Remove unnecessary roundtrip to bmesh and mesh

---------

Co-authored-by: Dion Moult <dion@thinkmoult.com>
2026-02-19 11:56:10 +11:00
falken10vdl 7141f2cf90 Fixes to PR7607 (Linked IFC Projects): Wireframe toggle. More permisive to get has_transformation = False. Show enable_editing_link if link is loaded 2026-02-19 10:53:01 +11:00
Sebastian Schilling 418d410b5c moved change of bsdd baseurl change to addon settings 2026-02-18 09:11:25 +11:00
Sebastian Schilling a5461c0748 buildingSMART Data Dictionary module: added textfield to change data dictionary url 2026-02-18 09:11:25 +11:00
Bruno Postle 291e815770 Add AGENTS.md contributor guide
Guidelines for external contributors using AI coding tools,
covering licensing, AI disclosure requirements, PR scope,
commit style, code formatting, and testing expectations.

Generated with the assistance of an AI coding tool.
2026-02-18 09:09:46 +11:00
Dion Moult ed500d58ba For consistency, maxfail=1 for module tool tests 2026-02-17 18:16:33 +11:00
Dion Moult 8023a992da Fix tests where panel name and tab panel name is identical
For now probably just easier to skip tabs. They are just containers and
not worth testing. Famous last words :)
2026-02-17 18:16:20 +11:00
Dion Moult fcc80ad14a Simplify add reference image size implementation and fix segfaulting tests
Previously, there was a dance between invoke, execute, and draw. This
can probably be resolved, but is a high-risk for undo bugs. This
simplifies the logic flow to just a traditional _invoke -> _execute.

I add a new feature test to at least make sure it does something, and
this also fixes the segfault in tool tests as it no longer requires the
launching of the file browser.
2026-02-17 18:11:13 +11:00
José Aliste c6b14d1474 Fixes snap angle.
In my previous commit, I mistakenly believed that there was an API change from
snap_angle_increment to snap_angle_increment_3d
But since the feature was introduced in blender 4.2 the setting is called
snap_angle_increment_3d.
2026-02-17 13:39:03 +11:00
Dion Moult 37fe0ad993 Reimplement adding multiple references / schedules cf5ffad9af
Previously it was implemented inline. This now implements it as a
tool.Blender function with tests. Also the previous tests didn't
actually run and weren't actually testing any tools despite being in a
tool tests.
2026-02-17 11:18:24 +11:00
Dion Moult e20e286168 Revert "feat(drawing): support multiple file selection in Add Reference"
This reverts commit cf5ffad9af.
2026-02-16 18:25:54 +11:00
Dion Moult 8c0bed0c61 Stub open command so running tests doesn't keep on launching apps 2026-02-16 18:24:37 +11:00
Dion Moult 8cfb162851 Fix #7656. Regression in text editing where leaders were accidentally removed. Added tests. 2026-02-16 17:57:09 +11:00
dependabot[bot] 379c74b31f Bump ruff from 0.15.0 to 0.15.1
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.0 to 0.15.1.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.15.0...0.15.1)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-16 14:57:13 +11:00
Dion Moult 1d1f158fe2 Remove no longer relevant invoke code for linking IFCs 2026-02-16 08:23:35 +11:00
Richard Brice 65d5df7801 IfcAxis2PlacementLinear mapping used with IfcSectionedSurface and IfcSectionedSolidHorizontal
IfcSectionedSurface and IfcSectionedSolidHorizontal both of CrossSectionPositions attributes which are lists of IfcAxis2PlacementLinear. The implementation of each class used its own bespoke mapping of IfcAxis2PlacementLinear, which were identical to each other and slightly different than IfcAxis2PlacementLinear. Now the two sectioned classes use the one and only mapping for IfcAxis2PlacementLinear
2026-02-15 11:16:07 -08:00
falken10vdl b246998f68 Linked IFC projects enhancement (multiple links to same project file) (#7607)
* Linked IFC projects enhancement (multiple links to same project file)

- Implement link management system using UUIDs as identifiers to support multiple links to the same IFC file
- Add georeferencing compatibility detection and UI display (NONE, NOT_COMPATIBLE, PARTIAL_COMPATIBLE, FULL_COMPATIBLE)
- Support for duplicate link creation with Shift+D shortcut and automatic position offset
- Add false origin and project north calculation from 3D cursor for MANUAL mode
- Only store one cache per file, regardless of the amount of links
- Prevent duplicate links based on filepath and position comparison
- Improve error handling for missing files and loading failures
- Update tests

* Remove duplicate georef UI

I try to avoid duplicate UI (especially for one that can be as
sophisticated as georef - e.g. missing is WCS) as it means double the
code, double the tests, potential user confusion. BTW the note about
vertical datum isn't quite accurate as it may be included in the CRS
definition so vertical datum is optional.

* Remove depsgraph_update_post handler for update_link_ui_on_transform as per core developer feedback

* Move get_projected_crs to geolocation module

* Refactor get_projected_crs to simplify as per core developer feedback

* Remove unused import of bonsai.tool from project module

* Use IfcDocumentInformation per linked file and IfcDocumentReference for locaiton information

* Refactor SaveBlendMetadataFile operator to remove  try-except blocks and remove linked projects collections since they are recreated by bonsai

* Cleanup removing empty collection instances for linked models in metadata.blend file and call determine_georeferencing_compatibility on link reload

* Add locking mechanism for linked models and update UI to reflect lock status

* Update logic that track IFC to execute_ifc_duplicate_operator instead of having it in execute() which does not track IFC undo/redo

* Refactor link handling to use get_link_empty_handle and set_link_empty_handle methods which in turn use the standard blender-ifc integrations patters (tool.Ifc.get_object(doc_reference) and tool.Ifc.link(doc_reference, empty_handle)

* remove operator.DuplicateLink and move it to tool.Project.duplicate_link()

* Refactor link handling to use sequential identifiers (no need for STEP ID DocRef)

* Refactor IFC linking logic to handle cases without a parent IFC file loaded. Firts link flase origin becomes parent origin

* Lock should not affect selection.

This makes it consistent with grid / spatial lock, and also toggle
selectability is already implemented.

* Remove unnecessary check for loaded library as Blender seems to do this internally already

* Rename util to get_crs because in IFC4X3 you can also have geographic CRS not just projected

* Remove unnecessary call to determine_georeferencing_compatibility

This function is already always called prior to calculate_link_position
so shouldn't be called here. It's also a very expensive function: as it
currently stands, just to link a single IFC, ifcopenshell.open() is
called 3 times. This reduces it to 2.

* Store CRS as metadata for linked models, and compare metadata when indicating georeferencing compatibility

Previously, to check georeferencing compatibility, ifcopenshell.open()
was used. When linking large models, this adds considerable time and
memory usage. This instead captures the georef as standard metadata in
our .cache.json. This now reduces the ifcopenshell.open() calls back
down to only 1 as necessary (see previous commit).

* Use link index instead of link name to fetch link collection item

Link name runs into issues with name uniqueness. This is why you created
a function for "get next link ID". After this refactoring, we can no
longer worry about uniqueness and that function may be removed.

* Simplify reloadlink into just unload and reload (with cache disabled)

This function should not be responsible for editing any data.

* Remove unnecessary get_next_link_id as names no longer need uniqueness

This now frees up the name variable to track a more meaningful, human
name like IfcDocumentInformation's Name attribute.

* Rewrite get / set link_empty_handle to just use the link directly

This prevents needless logic to fetch the link and also removes issues
related to duplicate names.

* Temporarily remove logic in prop callback

Right now, pretty much all the logic is done in a prop callback. In
general logic in prop callbacks should be minimised, since it's hard to
test and easily triggered as a domino effect of another change, and may
also impact undo/redo.

* Remove code that unnecessarily removes cache

This code removes cache, which means any project unlinking an IFC auto
clears the cache for any other project which doesn't make sense, and
also breaks the ability to readd it quickly.

* Rewrite link, unlink, load, and unload IFC

There were a few issues tackled here:

 - Operators that change any IFC data must use tool.Ifc.Operator and
_execute, otherwise undo/redo will break. That's one of the risks of
using prop callbacks, as it is not explicit when an IFC edit happens.
 - The usage of IfcDocumentReference was not correct. The Location
should store the URL, _not_ the position. The position should be in the
Identification attribute.
 - The URL was stored in IfcDocumentInformation location, which does not
work in IFC2X3. There are a few changes here to make it IFC2X3
compatible.
 - Generally move logic in operators, not prop callback.

* Remove restriction around manual mode.

Users should be able to use manual mode if they want.

* Restore AUTOMATIC mode to identical behaviour to file open

This is the first step to reusing cache files agnostic of the host.

* Revert tests for a fresh start for updating tests

* Revert "test_feature - clean up .ifc.cache. files after test was executed"

This reverts commit 99ae768ddf.

* Update tests and reimplement calculations for matrix of empty handle

Previously, the empty would always be placed at the origin, unless a
"position" offset was present. This is a problem, because the "position"
is simply a local offset relative to the Blender cache! If the cache was
regenerated, the offsets would be outdated. Also, the cache appeared in
different locations depending on the false origin mode, so the offset
would mean different things to different people.

Instead, a more robust method is:

 1. When you link a file, a Blender cache is generated. The Blender
origin of this cache is arbitrary! It depends on the user's false origin
mode and is purely a Blender session specific thing.
 2. When you load a link, a link is _always_ loaded into the correct
location with regards to IFC global coordinates. All math is done from
the perspective of IFC.
 3. If you choose to transform (move / rotate / scale!?) this link from
its correct location, that gets recorded as a 4x4 transformation matrix.
Note: I haven't implemented this properly yet.

Tests all pass, with a minor modification to the new behaviour that
false origin mode now won't affect the location it ends up in, only the
generation of the cache.

* Remove arbitrary convention around display name

Not needed anymore now that A/M/D is a detail and not significant on
actual coordinates, and also that the UUID is no longer needed.

* Simplify implementation of loading linked models when opening an IFC

* Move link matrix calculation from operator to tool for reuse

* Implement editing link location and calculation of transformation matrix

I changed my mind on the is_locked thing, since it isn't clear to the
user that locking need to be done to save changes.

* Remove old is_locked, prop update callback no longer needed (dedicated operator instead), remove old calculation code

* Simplify code related to placed_as_per_georef

* For now, simple skip for duplicate / delete

IMO duplicate / delete / move a link are very rare and explicit
operations.

* Update tests

* Remove host_model coordinate data as cache is no longer host model dependent

* Move icons outside list because there are too many

* Minor tweaks

---------

Co-authored-by: Dion Moult <dionmoult@gmail.com>
Co-authored-by: Dion Moult <dion@thinkmoult.com>
2026-02-15 19:28:43 +11:00
Ryan Schultz a88c5938dc typos 2026-02-14 12:18:29 -06:00
Thomas Krijnen 7978f1fb08 Fix compilation on gcc #7666 2026-02-13 10:17:28 +01:00
ssg3d 7b4889d2ec Update IfcParse.cpp
IfcOpenshell read file, and write file without changes. This round trip introduces truncation noise. It should not hurt to increase the precision to keep this clean.
2026-02-13 10:03:05 +01:00
José Aliste 740fcf7768 Use Blender's angle snap setting in wall.py and profile.py
Replace hardcoded 5-degree angle snapping with Blender's
snap_angle_increment setting in create_wall_from_2_points()
and create_profile_from_2_points().

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-11 22:29:43 -03:00
José Aliste 067e04b564 Use Blender's angle snap setting in model/polyline.py
Replace hardcoded 5-degree angle snapping with Blender's
snap_angle_increment setting in handle_lock_axis() for:
- Initial angle rounding when locking axis (A key)
- Angle rounding and increments on Shift+Wheel scroll

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-11 22:29:43 -03:00
José Aliste cd95f46db5 Use Blender's angle snap setting in tool/polyline.py
Replace hardcoded 5-degree angle snapping with Blender's
snap_angle_increment setting in calculate_distance_and_angle().

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-11 22:29:43 -03:00
José Aliste 348e48b49c Add get_angle_snap_value() helper to tool/snap.py
This function retrieves the angle snap increment from Blender's
tool_settings.snap_angle_increment property, which was added in
Blender 4.2. This allows users to configure the angle snap value
through Blender's native UI instead of using hardcoded values.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-11 22:29:43 -03:00
Thomas Krijnen 6bb8abdc5a Fix for 4.2 schema after a46cdbb907 2026-02-11 12:11:23 +01:00
Thomas Krijnen b7a8c9b330 Fix for 4.2 schema after a46cdbb907 2026-02-11 11:43:58 +01:00
Thomas Krijnen e6780973da arrange_poly: Refactor into logical blocks; add timing 2026-02-10 14:01:10 +01:00
Thomas Krijnen c6072e416c N-Section Lofting for Non-Polygonal (Curved) Shapes #7658 2026-02-10 11:04:43 +01:00
Thomas Krijnen f5686fff26 Simplify destructor by removing null check #7650 2026-02-10 09:25:02 +01:00
Thomas Krijnen a46cdbb907 Ignore site placement also for site geometry - add queue #7654 2026-02-09 21:37:21 +01:00
Thomas Krijnen a4d5d4e19a Ignore site placement also for site geometry #7654 2026-02-09 21:21:10 +01:00
dependabot[bot] 17b88fff22 Bump aws-actions/configure-aws-credentials from 5 to 6
Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 5 to 6.
- [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases)
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/v5...v6)

---
updated-dependencies:
- dependency-name: aws-actions/configure-aws-credentials
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-08 19:17:56 +11:00
dependabot[bot] 3fe9980aa4 Bump ruff from 0.14.14 to 0.15.0
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.14 to 0.15.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.14.14...0.15.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.15.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-08 19:17:45 +11:00
Dion Moult dffa3515c0 Reimplement sort / reverse / join function to format language, simplify text annotation variables, add tests
Previously, sort, reverse list, and join functionality was implemented
as special cases in Bonsai itself. Given that it has usecases
(especially in material lists, but any sort of list applies) I've moved
this function into the IOS formatting language.

The IOS formatting language previously wasn't capable of this, but the
awesome addition by @falken10vdl made the formatting language accept
queries inline, so that means it can handle lists. I also added tests
for all the new functions and expression syntax (+-*/ operators).

I simplified the code that gets the evaluated text literal - previously
it seems to call format() multiple times.
2026-02-08 19:17:12 +11:00
Bruno Postle 1d5108f934 Fix linking for builds with -Wl,--as-needed 2026-02-06 16:51:41 +00:00
Dion Moult 02fab6eee2 Fix #7634. Support formatting signed numbers. 2026-02-06 16:35:04 +11:00
Dion Moult 5e9f97a0c7 Fix #5220. See #7629. See #7505. Reimplement text bulk copying using established copy attribute paradigm.
Previously, copy attribution was coupled with text editing. This meant
that you couldn't just do something like change the font or alignment
without also affecting literals. Now like most apps you can just select
bunch of text and change font size etc, using the same UI look and feel
that copying attribute has when editing attributes.

This refactor also removes the need for explicit props tracking each
possible attribute to copy, and the settings collection group. Bulk
applying is now done in core with no calls to UI.
2026-02-06 16:12:14 +11:00
Richard Brice 2692341d3a Fixes typo 2026-02-05 15:10:33 -08:00
Richard Brice a54b21b838 Fixes documentation and adds test for expected type 2026-02-05 04:37:58 -08:00
Andrej730 79ef6eb55c validate_object_selection - fix missing check for active object not present in a view layer 2026-02-04 19:58:26 +05:00
Andrej730 7e1843b962 dev_environment - support Blender 5.1 with Python 3.13 2026-02-04 19:58:25 +05:00
Andrej730 7411da2ae8 bim.search - fix error when unselectable objects get in the way #7635 2026-02-04 19:58:25 +05:00
Andrej730 2f586d6b9e bonsai prefs - shorten some description strings for readibility 2026-02-04 19:58:25 +05:00
Andrej730 f10d4602fc typing 2026-02-04 19:58:25 +05:00
Andrej730 50d00eba20 black . 2026-02-04 19:58:25 +05:00
Andrej730 95480a231c Move handling legacy mathutils buffer types to separate methods 2026-02-04 19:58:24 +05:00
Andrej730 a62b177b19 Bonsai - fix error drag'n'dropping ifc files in Blender 4.5.6
Example error:
```
Error: Couldn't find IFC file: 'L:/OD_Cool_Car_Guys.ifc'.
Traceback (most recent call last):
  File "\Blender Foundation\Blender\4.5\extensions\.local\lib\python3.11\site-packages\bonsai\bim\module\project\operator.py", line 2759, in invoke
    return bpy.ops.bim.load_project(filepath=(filepath / clean_up_path(self.files[0].name)).as_posix())
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\blender-4.5.6-lts.a78963ed6435\4.5\scripts\modules\bpy\ops.py", line 109, in __call__
    ret = _op_call(self.idname_py(), kw)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Error: Couldn't find IFC file: 'L:/OD_Cool_Car_Guys.ifc'.
```
2026-02-03 19:20:05 +05:00
Andrej730 d6b636909f bonsai Makefile - revert d745882
Since https://github.com/LBNL-ETA/pyradiance/issues/56 is resolved now.
2026-02-03 14:55:14 +05:00
Andrej730 abf0d6f81a bonsai chaching - save ears for those running the tests 2026-02-03 14:55:14 +05:00
Andrej730 015431fa1f bonsai - drop unrelated pypi aud module
Turned out `aud` module we had in our makefile had nothing to do with Blender built-in `uad` module 🫣
So no need to install anything from PyPI since this module is generally available in Blender
2026-02-03 14:55:14 +05:00
Andrej730 95cc52a6f3 bonsai - revive very important chaching sound
`get_data_dir_path` doesn't have `filename` argument, therefore leading to an error
2026-02-03 14:55:14 +05:00
Dion Moult 9dff1441d7 See #7632. See #5848. Just disable indexed colour map loading for now, it's pretty rare.
Famous last words, at least the KDTree implementation is much faster.
2026-02-03 18:23:39 +11:00
Dion Moult fdf23ece85 Fix #7632. See #2824. Optimise vertex matching trick for IfcIndexedColourMap. 2026-02-03 18:20:49 +11:00
Dion Moult 1445f89f19 See #7629. Partially reimplement bulk text editing.
This isn't complete yet, but it hopefully demonstrates a preferred
implementation:

 * Logic in core, not operator
 * Loop done in core, without needing to call other core functions, so
the overhead of enabling and disabling editing per object is removed. No
more Blender logic, just straight editing in IFC.
 * Reuse existing function to grab text attributes instead of
reimplementing it twice.
 * Remove dead code, there seems to be a function
apply_to_selected_objects which was completely unused and duplicated
code twice.
2026-02-03 18:09:15 +11:00
Dion Moult fe395f9024 Revert "fixes #7629: close editing mode for text objects after batch edit"
This reverts commit 950e147bde.
2026-02-03 09:13:26 +11:00
Ryan Schultz 950e147bde fixes #7629: close editing mode for text objects after batch edit
Fix issue where selected text annotations remained in editing mode after
applying changes. Now properly restores original editing state for each
selected object.
2026-02-02 09:34:28 -06:00
Thomas Krijnen c385b93701 Add option --make-volume to apply BOPAlgo_MakerVolume API to non-manifold first operands in opening subtraction 2026-02-01 21:08:11 +01:00
falken10vdl 2d2e8e51aa Merge pull request #7611 from falken10vdl/connect-ports-for-cable-polyline-operator
connect the ports when creating several conected IfcFlowSegment with polyline
2026-02-01 09:21:27 +01:00
falken10vdl 13f03b7487 Merge pull request #7619 from falken10vdl/MEP-Segment-tool-add-rectangular-hollow-profile
MEP-Segment-tool-add-rectangular-hollow-and-U-shape-profile
2026-02-01 09:00:14 +01:00
Richard Brice c6257a4b3a Fixes errors in ifc_curve_rebar.cpp
M_PI was not defined,. Replaced it with boost::math::constants::pi<double>

Calculation of area was incorrect. Area of a circle = PI*r*r = PI*dia*dia/4
2026-01-31 05:30:36 -08:00
dependabot[bot] 9b8b05a570 Bump gersemi from 0.25.1 to 0.25.4
Bumps [gersemi](https://github.com/BlankSpruce/gersemi) from 0.25.1 to 0.25.4.
- [Release notes](https://github.com/BlankSpruce/gersemi/releases)
- [Changelog](https://github.com/BlankSpruce/gersemi/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BlankSpruce/gersemi/compare/0.25.1...0.25.4)

---
updated-dependencies:
- dependency-name: gersemi
  dependency-version: 0.25.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-31 10:04:17 +11:00
Bruno Postle 611a898ada IFC Git close and reopen repo after cloning
Apparently on Windows clone can leave 'stale processes'
2026-01-30 20:07:04 +00:00
Andrej730 6409f41cdf Bonsai Makefile - sort of simplify pyversion check 2026-01-30 16:05:27 +05:00
Andrej730 35dc029898 bonsai - add a dockerfile 2026-01-30 16:05:27 +05:00
Andrej730 2f72346845 bonsai Makefile - fix platform tag to use the latest pyradiance
Apparently `pip download` is matching tag exactly, which was leading to Linux using pyradiance 0.5.3 instead of 1.1.5.
2026-01-30 16:05:27 +05:00
Andrej730 40e4894f8e ci-bonsai-daily - exclude intel mac build for Python 3.13
Since Blender dropped support for it in Blender 5.0 and Python 3.13 is only needed for Blender 5.1.
2026-01-30 16:05:27 +05:00
Andrej730 91ee2b9222 bonsai Makefile - require Blender 5.1 for Python 3.13 2026-01-30 16:05:27 +05:00
Andrej730 ac4ffd91e7 Bonsai Makefile - drop wheel renaming workaround #5743 2026-01-30 16:05:27 +05:00
Andrej730 d74588246a bonsai Makefile - workaround for pyradiance in Python 3.13
Until https://github.com/LBNL-ETA/pyradiance/issues/53 is resolved.
2026-01-30 16:05:26 +05:00
Andrej730 e8a4590d0a Bonsai Makefile - error for missing PYVERSION 2026-01-30 16:05:26 +05:00
Andrej730 38f9f309e7 Bonsai Makefile - enable Python 3.13 build 2026-01-30 16:05:26 +05:00
Andrej730 47ac909a81 ruff - sort imports 2026-01-30 16:05:26 +05:00
Andrej730 6a63c651d3 black . 2026-01-30 16:05:26 +05:00
falken10vdl 2727bec929 Reorder representation_template to improve clarity and organization as per user feedback 2026-01-30 10:24:53 +01:00
dependabot[bot] 22f91e11b3 Bump tar from 7.5.6 to 7.5.7 in /src/ifctester/webapp
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.6 to 7.5.7.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.6...v7.5.7)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-30 17:57:12 +11:00
Dion Moult 398cd7571e Add array feature tests
I'm thinking of moving array into its own module. The "model" module is
getting a bit full and it'll only grow bigger in the future.
2026-01-30 17:32:30 +11:00
Dion Moult 83d97d7e95 Fix #7616. Make regenerate array an operator instead of an array preference
Sync children was a bit odd because it's not actually an "array
parameter" per se, just a way to regenerate. It's now an operator.

There was a deeper issue I encountered where the way arrays work is that
they duplicate the parent element. (first encountered in e51d2d )
However, the duplication code has special array handling too. To avoid
issues with this cyclical coupling the previous solution was to
reimplement object duplication (with all sorts of pitfalls that has).
Now, I've tried to decouple it further by clearing all array psets prior
to any change, and readding the pset after everything has been
regenerated.

This can be improved upon but I don't feel confident until there is more
comprehensive test coverage for the duplicate operator.
2026-01-30 17:18:02 +11:00
falken10vdl e47694458f Add support for FLOW_SEGMENT_U_SHAPE in the AddElement operator 2026-01-29 23:21:14 +01:00
falken10vdl 98a3b2b132 Merge remote-tracking branch 'upstream/v0.8.0' into MEP-Segment-tool-add-rectangular-hollow-profile 2026-01-29 13:17:53 +01:00
falken10vdl d06f5a6cb9 Add thickness dimension to profile name 2026-01-29 13:12:47 +01:00
falken10vdl 966751a928 Add support for FLOW_SEGMENT_RECTANGULAR_HOLLOW in profile creation in the MEP Segment Tool 2026-01-29 13:10:54 +01:00
Dion Moult c1aa1dedba Fix #7615. Forgot a line when refactoring type geometry regeneration. Added test. 2026-01-29 19:33:44 +11:00
Dion Moult cc995db98b Minor fix to 46a6356 to use the collector tool
This has a few advantages:

 - The collection logic is centralised
 - The collection logic is configurable based on the collection mode
 - The name is not hardcoded
2026-01-29 19:12:02 +11:00
Ryan Schultz 0e8c98a7bb Fix: Handle emoji encoding error in dev_environment.py
Prevents UnicodeEncodeError on Windows when displaying success message.
2026-01-28 18:34:14 -06:00
Dion Moult 5ce6d927f3 Revert "fix #7537 - Layer thickness correct when slab is rotated and few other features... "
This reverts commit 7f87f1fb89.
2026-01-28 23:39:45 +11:00
Dion Moult 34303c2cfe Revert "fix to https://github.com/IfcOpenShell/IfcOpenShell/commit/7f87f1fb89fb001320223a4d85e6267f342bf13c: have rotation around the object's origin, not the world origin"
This reverts commit 249e68f163.
2026-01-28 23:28:14 +11:00
Dion Moult 6cfb6d74fe Revert "fix #7559: DirectionSense works again."
This reverts commit d79524b087.
2026-01-28 23:25:35 +11:00
Dion Moult e76c2a70e6 Add tests for aggregate containment changing 2026-01-28 23:18:57 +11:00
Dion Moult 53e5f84730 Fix failing core unit tests 2026-01-28 21:49:25 +11:00
Dion Moult bcff5c7449 Remove unused tool 2026-01-28 21:49:13 +11:00
Dion Moult 6f78d60c9f Minor fix for tests to prevent ambiguous labeling 2026-01-28 21:22:19 +11:00
Dion Moult ff35666ad9 Reimplement feature to reassign inherited containers if you select a child element
This reimplements @theoryshaw 's commit 9adbd4 but has a few upgrades:

 - Considers all parent / child relationships, not just aggregates
 - Puts business logic in core where it belongs and tool code in tool
 - Uses existing utils where possible like get_decomposition
 - Does not use name based collection checking which is fragile
 - Reuses tool.Collector
 - Makes container assignment handle the API's capability to do things
in bulk instead of one by one in a loop, so it's faster
 - Tests
2026-01-28 18:00:04 +11:00
Dion Moult 79fa47fc2f Allow specifying MODULE in make test-core for convenience 2026-01-28 17:49:31 +11:00
Dion Moult 35ae1e927d Fix missing model prophet in core test bootstrap 2026-01-28 17:49:15 +11:00
Dion Moult 24a58cba40 Remove functionality to unlink from non-IFC collections
This is a cool idea, but users have all sorts of Blender collection
strategies and I think it's a good idea for Bonsai code to just touch
Bonsai's stuff and leave everything else. Separate functionality can be
built for non-Bonsai workflows and preferrably in a more discoverable
way than in individual Bonsai features.
2026-01-28 09:14:40 +11:00
falken10vdl 8a32d7bea0 Add EstablishPathDirection operator and update UI to integrate it 2026-01-27 18:05:19 +01:00
Dion Moult bbf8fc2b64 Revert "feat: auto-assign containers to root aggregates and organize parts in outliner"
This reverts commit 9adbd47181.
2026-01-27 19:27:34 +11:00
Dion Moult 2a60f46516 Refactor parse_distance_string into tool classmethod and add tests including e9eca5e behaviour 2026-01-27 19:13:43 +11:00
Dion Moult 6ad9949571 Update tests based on new simpler unit settings code 2026-01-27 19:12:43 +11:00
Dion Moult e41df68124 Reintroduce public API for IfcTester after ruff purge 72f8218fcd 2026-01-27 15:57:47 +11:00
Ryan Schultz de6f6cc8b2 Skip incompatible objects instead of failing IFC join operation
When joining objects with mismatched representation types, deselect and
skip incompatible objects rather than canceling the entire operation.
This allows users to join compatible objects even when the selection
includes incompatible ones.
2026-01-26 19:53:41 -06:00
falken10vdl fed98451d4 connect the ports when creating several conected IfcFlowSegment with polyline 2026-01-27 01:32:06 +01:00
Dion Moult 44a52863a2 Fix #3764. WARNING: Preserve material usage attributes when switching types and refactor type regeneration API listeners
This is a dangerous commit because the effect of refactoring of the listeners is hard to know.
2026-01-26 23:30:39 +11:00
Esteban Dugueperoux f725e05655 Merge pull request #7486 from EstebanDugueperoux2/TestAllExamples
cmake: Try to build and run others examples
2026-01-26 13:20:21 +01:00
Andrej730 953c5fddc6 bonsai - sort imports 2026-01-26 17:13:18 +05:00
Andrej730 1319391a6b ci-bonsai-daily - enable Python 3.13 build
Since it's coming in Blender 5.1 which is soon to go Beta (at 4 Feb).
2026-01-26 17:10:04 +05:00
Andrej730 bc675ef9b2 cmake_uninstall - fix always skipped if-block condition 2026-01-26 17:10:03 +05:00
Andrej730 c6766cefb7 cmake_uninstall - speed up the process and fix cmake warnings 2026-01-26 17:10:03 +05:00
Andrej730 c4c1e2ebf9 cmake_uninstall - simplify by using common variable 2026-01-26 17:10:03 +05:00
Andrej730 dbb4e91d55 apply cmake file formatting 2026-01-26 17:10:03 +05:00
Andrej730 44f0a4a39b pyproject.toml - simplify cmake formatter command
Since the latest gersemi version, it now respects gitignore.
2026-01-26 17:10:03 +05:00
Andrej730 6d4eb06d89 black . 2026-01-26 17:10:03 +05:00
Andrej730 72f8218fcd ruff - check for more unused imports 2026-01-26 17:10:02 +05:00
Andrej730 4edcad13b8 fix ruff 2026-01-26 17:10:02 +05:00
Andrej730 d4d10b2eb5 ifcsverchok - polyline node
Demo - https://files.catbox.moe/azv66e.mp4
2026-01-26 17:10:02 +05:00
Andrej730 523bcf3443 ifcsverchok - node to convert sverchok geometry to ifc
Example - https://files.catbox.moe/wecgw9.mp4
2026-01-26 17:10:02 +05:00
Andrej730 b96a21350c ifcsverchok - document value types in doc-strings 2026-01-26 17:10:02 +05:00
Andrej730 2f5bcccd2c bim.assign_class - don't flip normals for objects with negative scale in Blender 5.1+
The issue was fixed upstream - https://projects.blender.org/blender/blender/issues/102266
2026-01-26 16:10:02 +05:00
Dion Moult d62a6186b5 Demo project preset shouldn't have mass or time by default 2026-01-26 00:01:43 +11:00
Dion Moult a6394d8628 Revert "Closes #3764: When switching an instance to a different beam type, preserve the CardinalPoint."
This reverts commit 4874f7770b.
2026-01-25 20:58:29 +11:00
Dion Moult b4caf3b2dd Fix #7153. Fix regression in purging types in IFC2X3 from 56861b9 2026-01-25 15:27:23 +11:00
Dion Moult 0e4f2fada1 Fix #7519. Do not import parametrically locked item attributes.
The previous fix by @theoryshaw had the correct conclusion but had some
issues:

 1. Don't implement anything that fetches IFC data in the UI draw calls.
This historically has lead to race conditions and crashes. The data
classes are much preferred.
 2. Rather than load the inapplicable attribute then selectively omit it
in the UI, it's preferred to just never load it in the first place.
2026-01-25 14:16:35 +11:00
Dion Moult 12f8863014 Revert "Fix #7519: Hide depth attribute in Item Mode for elements with material layer sets"
This reverts commit 99b162f712.
2026-01-25 14:12:16 +11:00
Dion Moult 884661a454 See #7537. Quick fix for regression in editing slabs. Needs further investigation. 2026-01-25 10:43:27 +11:00
Dion Moult 0d8c4c7795 Fix #7587. See #7550. Bug where you couldn't load or edit arrayed voids.
Reuse tool.Geometry.duplicate_ifc_objects because that's where all
duplication logic should stay instead of half reimplementing it every
time which introduces subtle bugs.
2026-01-24 23:03:18 +11:00
Esteban DUGUEPEROUX 8f3715c0f1 review: Take into account remarks 2026-01-24 12:09:29 +01:00
Dion Moult cf52607528 Fix #7591. Save pset as template now considers all psets in the file, not just the active one. 2026-01-24 14:20:02 +11:00
dependabot[bot] 7636ff3fdb Bump ruff from 0.14.13 to 0.14.14
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.13 to 0.14.14.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.14.13...0.14.14)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.14.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-24 13:47:32 +11:00
dependabot[bot] 0577dbe865 Bump black from 25.12 to 26.1.0
Bumps [black](https://github.com/psf/black) from 25.12 to 26.1.0.
- [Release notes](https://github.com/psf/black/releases)
- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)
- [Commits](https://github.com/psf/black/compare/25.12.0...26.1.0)

---
updated-dependencies:
- dependency-name: black
  dependency-version: 26.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-24 13:45:01 +11:00
Esteban DUGUEPEROUX a86c333a99 make: Try to build and run others examples 2026-01-23 20:49:16 +01:00
Thomas Krijnen 3983bfa467 Don't crash on passing indeterminate to instance expecting aggregates #7529 2026-01-23 14:36:06 +01:00
Thomas Krijnen 1137e7b77b Fix rule compilation regarding indeterminate #7529 2026-01-23 14:36:06 +01:00
Dion Moult cc542ad074 See #7503. Add docs about geometry_library 2026-01-23 22:33:20 +11:00
Dion Moult b41d3ae2b7 Bump IfcConvert documentation including .json and .rdb support 2026-01-23 22:32:48 +11:00
Dion Moult 5c31ae4c37 Remove preference to mass/time and make it default with simpler code
I generally like to minimise knobs and dials, so this is now part of the
wizard but now defaults to a "NONE" unit. You also now have the option
to choose "NONE" for area / volume units which makes things consistent.
Enum names also match the IFC lowercase convention for conversion based
units. This also simplifies the core logic and treats all units the same
way instead of special cases for each unit type. (length is still
special and required in Bonsai as we are inherently graphical)
2026-01-23 22:03:32 +11:00
Thomas Krijnen 92ad7d2ba2 Fix #7554 2026-01-23 11:54:04 +01:00
Thomas Krijnen ad0c97a6bb Fix #7561 2026-01-23 11:44:14 +01:00
Thomas Krijnen 3d530b1d39 No occt multi-threading since we have our own 2026-01-23 11:44:14 +01:00
Thomas Krijnen f0308962aa Clash: Increase robustness of processing triangulated elements - fully co-planar element #7467 2026-01-23 11:44:14 +01:00
Thomas Krijnen 9c6a8bdb90 Clash: Increase robustness of processing triangulated elements - skip empty #7467 2026-01-23 11:44:14 +01:00
Thomas Krijnen a6a9f9d0a7 Only enable--fat on x86 in build-all.py #7458 #7556 2026-01-23 11:22:56 +01:00
Thomas Krijnen ab3108ff59 Set GMP --enable-fat during build #7458 #7556 2026-01-23 11:16:06 +01:00
Esteban DUGUEPEROUX 128fdcb62e fix: Add IfcGeom as a dependency of kernels target instead of the inverse 2026-01-23 10:22:16 +01:00
Esteban DUGUEPEROUX a609bc61b9 fix: Define OPENCASCADE_LIBRARIES as expected by generic CMakeLists.txt for ifcgeom kernels 2026-01-23 10:22:16 +01:00
Esteban DUGUEPEROUX c739b93389 fix: Have kernels targets built as library 2026-01-23 10:22:16 +01:00
Thomas Krijnen 6b7b834ac0 Don't try and solve 2d bools in cgal-simple #7503 2026-01-23 10:12:33 +01:00
Dion Moult ac128e3395 Close #7601. Clearer docs that there is a single mesh item. 2026-01-23 15:56:44 +11:00
Dion Moult 5dd771c5e5 Fix #7596. Bug where IFC2X3's workspace didn't use IfcDoorStyle and IfcWindowStyle instead 2026-01-23 15:51:39 +11:00
Dion Moult 247f0c41d9 Increase default deflection tolerance to improve performance
This only results in a lower resolution for things like advanced brep
geometry which isn't a biggie (I'll eat my words later)
2026-01-23 15:32:04 +11:00
falken10vdl bbda8d2aff Merge pull request #7543 from falken10vdl/MEP-ports
Simplified handling of Ports in MEP
Addresses https://community.osarch.org/discussion/comment/27740#Comment_27740
2026-01-22 09:34:52 +01:00
Dion Moult c2cc6f80be IfcTester webapp now shows prohibited more clearly
- is_skipped is calculated upstream instead of reimplementing logic
 - the viewer now shows cardinality (not just in edit mode) to make it
clear what the requirements are
 - prohibited specs are not allowed to have any requirements, so that
section is hidden
 - failed prohibited specs now shows list of failed (applicable)
entities
2026-01-22 14:36:46 +11:00
Dion Moult 4c47eb573a Improve IDS static HTML reporter to report list of prohibited entities (they aren't passes or fails, just prohibited applicability) 2026-01-22 11:18:35 +11:00
falken10vdl 84d55d8969 cleanup 2026-01-21 20:54:20 -03:00
falken10vdl 587fc63843 Refactor PolylineDecorator to simplify label indexing and improve text spacing calculation 2026-01-21 20:54:20 -03:00
falken10vdl 3c3525f205 display angles and area/length values conditionally based on polyline points 2026-01-21 20:54:20 -03:00
falken10vdl 4da0b04162 add adjunt_overlapping_labels 2026-01-21 20:54:20 -03:00
Vincent Cadoret a3801a0ce9 Fix UnboundLocalError in reporter.py cardinality assignment
The report_specification() method in the Json reporter class was raising
an UnboundLocalError when processing IDS specifications with certain
minOccurs/maxOccurs combinations that weren't explicitly handled.

Problem:
The cardinality variable was only assigned for three specific cases:
- minOccurs=1, maxOccurs="unbounded" → "required"
- minOccurs=0, maxOccurs="unbounded" → "optional"
- minOccurs=0, maxOccurs=0 → "prohibited"

However, the IDS schema allows other valid combinations such as:
- minOccurs=0, maxOccurs=1 (commonly used for optional specifications)
- minOccurs=1, maxOccurs=1 (exactly one occurrence required)
- Any other valid XML Schema cardinality values

When processing IDS files with these combinations, the cardinality
variable remained unassigned, causing an UnboundLocalError at line 382
when attempting to use it in ResultsSpecification().

Solution:
Added fallback logic to handle all valid IDS cardinality combinations:
- If minOccurs >= 1: cardinality = "required" (must occur at least once)
- Otherwise (minOccurs == 0): cardinality = "optional" (may occur)

This maintains semantic compatibility with the existing codebase, which
expects cardinality to be one of the semantic strings ("required",
"optional", "prohibited") rather than numeric ranges. This is critical
for:
- HTML template rendering (line 457: .capitalize())
- Conditional logic for skipped specs (line 454)
- UI rendering for prohibited specs (line 456)

Testing:
- Tested with IDS file containing minOccurs=0 without explicit maxOccurs
  (defaults to 1 per XML Schema specification)
- Validation now completes successfully without UnboundLocalError
- HTML report generation works correctly with semantic cardinality labels
- Maintains backward compatibility with existing IDS files

Fixes: Validation failure when using valid IDS cardinality combinations
2026-01-22 10:21:45 +11:00
Christoph Mellüh aafa1b95e8 bSDD Add new class properties and relations API Endpoints (#7502)
* black .

* add typing

* move function

* add get_class_relations

* add test for class relation

---------

Co-authored-by: Dion Moult <dionmoult@gmail.com>
2026-01-22 10:19:09 +11:00
falken10vdl f89cf88bc0 Add use_factory_startup to src/bonsai/test/bim/test_feature.py def an_empty_blender_session()
This addresses https://github.com/IfcOpenShell/IfcOpenShell/issues/7590

Cheers!
2026-01-22 09:36:04 +11:00
dependabot[bot] 0cc3ce8709 Bump tar from 7.5.3 to 7.5.6 in /src/ifctester/webapp
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.3 to 7.5.6.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.3...v7.5.6)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-22 08:40:44 +11:00
Andrej730 421d454ce8 Fix missing Literal import 2026-01-21 17:39:41 +05:00
Andrej730 64865c58a5 remove debug print 2026-01-21 17:39:41 +05:00
Andrej730 784415e464 ifcsverchok bonsai integration - support editing parametric properties from UI
Demo - https://files.catbox.moe/extsxf.mp4

But now it requires ifcsverchok graph to be nested inside a subgroup because we need a way to indicate which graph parameters are important, so user can modify them from Parametric Geometry tab without actually explicitly opening sverchok graph.
2026-01-21 17:39:41 +05:00
Andrej730 c33969d589 ifcsverchok - correct socket type for position 2026-01-21 17:39:40 +05:00
Dion Moult 41c6eba193 IfcTester should not check requirements for prohibited specifications 2026-01-21 19:43:37 +11:00
Dion Moult db52703ce3 Revert "Use hide_set() for IfcSpaces instead of hide_viewport"
This reverts commit 96fe9b5398.

This commit contains a logical error where hide_viewport is checked in
the if statement but hide_set() is used as the effect. This causes a
regression in tests about project visibility. `hide_viewport` is the
correct hiding setting to use, because hide_set is more ephemeral and
affected by Shift-H, Alt-H etc.
2026-01-21 18:52:27 +11:00
Dion Moult e55955b72a See #7566. Fix unusable lag due to dense meshes with product preview
Previously, when the add occurrence modal operator was executed, on
every modal loop (i.e. every mouse movement) it would fetch the mesh
geometry to be previewed, store the verts / edges / faces in mesh
collections, then the decorator would fetch that geometry, the clear the
collections, in a loop.

I've removed the Blender collections. Instead the same strategy is used
as in ItemDecorator i.e. the mesh and verts are fetched once during
decorator installation, then on each draw call only a single vertex loop
to multiply by the transformation matrix for snapping and mouse
position.

You can test with the LOD400 model in #7566. On my machine it would
cause lag on anything with >500 faces. Now it seems to work without lag
on a 26k polygon mesh.
2026-01-21 18:11:20 +11:00
dependabot[bot] 4c1b3221ce Bump gersemi from 0.24 to 0.25.1
Bumps [gersemi](https://github.com/BlankSpruce/gersemi) from 0.24 to 0.25.1.
- [Release notes](https://github.com/BlankSpruce/gersemi/releases)
- [Changelog](https://github.com/BlankSpruce/gersemi/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BlankSpruce/gersemi/compare/0.24.0...0.25.1)

---
updated-dependencies:
- dependency-name: gersemi
  dependency-version: 0.25.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 12:40:44 +11:00
dependabot[bot] 9e2b7ba7c8 Bump tar from 7.4.3 to 7.5.3 in /src/ifctester/webapp
Bumps [tar](https://github.com/isaacs/node-tar) from 7.4.3 to 7.5.3.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.4.3...v7.5.3)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 12:39:38 +11:00
falken10vdl 1576ade147 Merge pull request #7576 from falken10vdl/support-enum-for-search-suggestions
Enhance filter value suggestions to support enumerated properties in search
2026-01-18 00:13:44 +01:00
falken10vdl db8a1b9262 Merge pull request #7575 from falken10vdl/simplify-new-filter-mode-with-just-chained-filters-with-set-operations
Refactor filter mode handling to simplify chained filters with set operations
2026-01-18 00:12:40 +01:00
falken10vdl 09d193045a Enhance filter value suggestions to support enumerated properties in search 2026-01-18 00:05:07 +01:00
falken10vdl f3295e2663 Refactor filter mode handling to simplify chained filters with set operations 2026-01-17 20:02:09 +01:00
Dion Moult 16a90cadb5 Cap product decorator at 500 triangles to prevent unresponsive UI during dense product placement 2026-01-17 17:57:07 +11:00
Dion Moult 2065d4ce78 Minor optimisation to prevent looping through all verts twice in decorator draw 2026-01-17 17:55:11 +11:00
dependabot[bot] 5cadfd693f Bump ruff from 0.14.10 to 0.14.13
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.10 to 0.14.13.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.14.10...0.14.13)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.14.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-17 15:39:57 +11:00
Andrej730 9d1dcf9034 external parametric geometry - integrate with ifcsverchok
Still very experimental, but here's a short demo - https://files.catbox.moe/u6vnhj.mp4
Sverchok graph I've used - https://files.catbox.moe/1x7b7q.png
2026-01-16 17:16:29 +05:00
Andrej730 ed38d2347c ifcsverchok - check for unused imports 2026-01-16 17:16:29 +05:00
Andrej730 47e259ff2f ifcsverchok - operator to apply graph to Bonsai file 2026-01-16 17:16:29 +05:00
Andrej730 413530bb0a ifcsverchok - shape output node 2026-01-16 17:16:29 +05:00
Andrej730 a3bcea008a util.shape - move typing stuff to TYPE_CHECKING block 2026-01-16 17:16:29 +05:00
Andrej730 d93363b9bb ifcsverchok - specify extrusion axis 2026-01-16 17:16:29 +05:00
Andrej730 77a912c756 shape_builder.rectangle - clarify 3d size use 2026-01-16 17:16:28 +05:00
Andrej730 668b63a323 shape_builder - clean up redundant default values from doc-strings 2026-01-16 17:16:28 +05:00
Andrej730 dbc0cca36e ifcsverchok - experimenting with shape builder nodes 2026-01-16 17:16:28 +05:00
Andrej730 009652f97d ifcsverchok - fix by query node 2026-01-16 17:16:28 +05:00
Andrej730 c77c4ce968 model.ui - more specific typing from props 2026-01-16 17:16:28 +05:00
Andrej730 a0b81e333e black . 2026-01-16 17:16:25 +05:00
Andrej730 dfc91e6639 ifcopenshell-python - clean up unused imports 2026-01-16 17:16:24 +05:00
Dion Moult 233ad63bca Remove document menu for UI consistency
Although it is a very cool trick, I feel this essentially duplicates the
UI in two spots, and is an outlier in UX. I'd prefer for all IFC data
and relationships to be in one location only (the panels). I think there
are a better unified solutions (e.g. favourite bookmark panels) for
quick access for things like this.
2026-01-16 20:11:43 +11:00
Dion Moult 242f1aab35 Fix #7563. Regression in normalising document URIs. 2026-01-16 10:26:23 +11:00
Ryan Schultz d79524b087 fix #7559: DirectionSense works again. 2026-01-15 14:21:39 -06:00
Dion Moult 8060c790ed Black 2026-01-15 22:00:51 +11:00
Dion Moult 47a2c1d21a Refactor panel visibility to not use any helpers, operators, and shift config UI into add-on settings
To be consistent with all other settings, I've moved the visibility
config UI from inline into the add-on settings. This restores the
previous tab layout and no longer needs the "settings" icons to be
there. This also removes the need for a "enable UI config" checkbox.

Most of the code previously had dedicated operators to toggle booleans.
This has been removed. This new approach also means helpers aren't
needed.
2026-01-15 21:59:53 +11:00
Christoph Mellüh ed81a0a4b3 update api to V5 (#7409) 2026-01-15 20:52:06 +11:00
Dion Moult 26fb6ebd3c Refactor tab visibility to use data cache
Previously calculation of visibility was done on every draw (3x 10tabs x
10 collection items). The data class is intended to calculate UI data
once only which is more efficient. This also removes all helper calls
from the UI.
2026-01-15 11:30:28 +11:00
Dion Moult bb50be389e Refactor should_show_panel into tool.Blender (avoid helper.py) and merge into is_tab
This moves the logic from ui.py into tool.Blender. In general, helper.py
is a bit generic (and historic) and we should use tool instead.
2026-01-15 09:15:13 +11:00
Richard Brice df7318973d Adds support for IfcOpenCrossProfileDef and branching with IfcSectionedSurface 2026-01-14 13:28:07 -08:00
Ryan Schultz 46a6356f93 update the name of the blender collection, as well, when updating the name of the spatial container. 2026-01-13 12:33:54 -06:00
Ryan Schultz 9adbd47181 feat: auto-assign containers to root aggregates and organize parts in outliner
When assigning a container to an aggregated element, automatically promote
the operation to the root aggregate and move all nested parts to the
container's collection in the Blender outliner.

Changes:
- AssignContainer now traverses the aggregate hierarchy to find the root
  aggregate when a user selects any nested part
- All parts and sub-aggregates are moved to the container's collection in
  the outliner while preserving IFC aggregate relationships
- Parts remain aggregated in IFC (not directly contained), only their
  Blender collection membership changes
- RefreshLinkedAggregate now also moves all parts to the correct container
  collection when restoring original data

This provides a more intuitive UX - users can select any part and the entire
assembly moves together, properly organized under the spatial container.

Fixes the previous behavior where:
- Aggregated elements were skipped with a warning
- Parts weren't organized under the container in the outliner
- Aggregate nesting was broken after container assignment
2026-01-13 11:45:34 -06:00
falken10vdl 96a0e9f72d Adapt tests for create_port_at_cursor method 2026-01-13 10:07:10 +01:00
falken10vdl 791a41d649 cleanup and black . 2026-01-13 08:49:57 +01:00
Ryan Schultz 249e68f163 fix to https://github.com/IfcOpenShell/IfcOpenShell/commit/7f87f1fb89fb001320223a4d85e6267f342bf13c: have rotation around the object's origin, not the world origin 2026-01-12 19:37:25 -06:00
Dion Moult 3c8ab26274 Do not scale georef WCS decorator if it is <1km (i.e. small site definition)
Previously it was scaled which misled users into thinking the point was
in the wrong location.
2026-01-13 09:30:31 +11:00
Andrej730 18a25ffb0e Remove redundant label in project info UI 2026-01-12 18:20:11 +05:00
Andrej730 cc341b5ffd Remove debugging print statements 2026-01-12 18:20:11 +05:00
Andrej730 c8ac61a9d0 CI - bump Blender we use for testing to 5.0 2026-01-12 18:20:11 +05:00
Andrej730 7d49113407 typing 2026-01-12 18:20:11 +05:00
Andrej730 153de70a71 black . 2026-01-12 18:20:10 +05:00
falken10vdl 1f845569a5 Merge pull request #7466 from DrInfiniteExplorer/vscode-debug-integration
vscode config for Bonsai debugging
2026-01-12 12:23:23 +01:00
falken10vdl 1eb2b65268 Add flow direction handling to port connection logic and UI updates 2026-01-12 12:19:13 +01:00
Pierre LeMoine d7ad0a352e vscode config for Bonsai debugging 2026-01-12 07:30:02 +01:00
Ryan Schultz d29cecab30 Fix aggregate duplication to include parts and preserve hierarchy (#7550)
- Auto-include all parts when duplicating aggregates
- Preserve nested aggregate relationships during duplication
- Select all duplicated objects for immediate moving
2026-01-11 20:35:32 -06:00
Ryan Schultz 7f87f1fb89 fix #7537 - Layer thickness correct when slab is rotated and few other features...
- Add dual-rotation support for AXIS3 slabs (IFC angle + object rotation)
- Fix profile editing to display horizontal projection for tilted slabs
- Fix AXIS2 layer slicing to use local extrusion direction for walls
- Fix ChangeExtrusionDepth to refresh geometry after depth changes
- Remove rotation lock on slabs to allow free rotation
- Fix undefined variable bug in add_slab_representation.py
2026-01-11 18:43:07 -06:00
falken10vdl e5ccd26762 Update port UI to indicate disconnection status more clearly 2026-01-11 14:46:17 +01:00
falken10vdl 0243519a68 Refactor port connection logic and UI integration for improved usability 2026-01-11 14:22:58 +01:00
Ryan Schultz 15bbdc8085 Fix #7539: preserve nested aggregate structure when refreshing linked aggregates 2026-01-10 09:36:36 -06:00
falken10vdl c2b72440a2 Use helper function for search suggestions in literal property drawing (#7547) 2026-01-10 08:30:43 -06:00
falken10vdl 8205408a66 Add filter_mode property to BIMFacet for selection management (#7548) 2026-01-10 08:24:04 -06:00
falken10vdl b78db3cae0 Merge pull request #6825 from falken10vdl/UI_documents_tree
UI documents tree
2026-01-10 11:43:42 +01:00
falken10vdl 81fdf63bd0 adapted to get pytest -p no:pytest-blender test/core/test_document.py working. Black formating 2026-01-10 10:44:51 +01:00
falken10vdl 454ed2c5a1 updated to get make test-bim MODULE=document working 2026-01-10 10:44:51 +01:00
falken10vdl df6592c7b9 updated to get make test-tool MODULE=document working 2026-01-10 10:44:51 +01:00
falken10vdl e4ba633d94 cleanup nomenclature and some redundant code 2026-01-10 10:44:51 +01:00
falken10vdl 6f400c8e44 updates based on core developer's feedback 2026-01-10 10:44:51 +01:00
falken10 128fe66837 cleanup and formatting 2026-01-10 10:44:51 +01:00
falken10 9c8c40c0ff nicer ui 2026-01-10 10:44:51 +01:00
falken10 ca8eb9b358 misc panel working 2026-01-10 10:44:51 +01:00
falken10 b6cfd165c2 updates based on developers feedback 2026-01-10 10:44:51 +01:00
falken10 aa8c146f9d Refactoring based on developer's feedback 2026-01-10 10:44:51 +01:00
falken10 d2adfc8c5d updated document ui 2026-01-10 10:44:51 +01:00
falken10 5ea66730d4 Implemented tree like structure for documents 2026-01-10 10:44:51 +01:00
falken10vdl 7ef11361b0 Update flow direction icons for ports in UI 2026-01-10 10:12:25 +01:00
Bruno Postle 0c3153ab7f Docs, link fedora Bonsai/IfcOpenShell packages 2026-01-09 23:19:39 +00:00
falken10vdl dfbaa6ac8e Reset related_port_object to None after connecting ports 2026-01-09 17:39:42 +01:00
falken10vdl c41496a9c3 import IfcDistributionPorts with assets when executing append_library_element and for type products, use the type product's collection, not the container 2026-01-09 17:11:02 +01:00
falken10vdl ed7ae0da9c Enhance show_ports (also shows ports of connected objects) and refine UI layout 2026-01-09 13:18:01 +01:00
falken10vdl 4463235728 Remove ShowPortFlowError operator and update flow direction handling for connected ports 2026-01-09 08:43:46 +01:00
falken10vdl 628a76e487 Simplified handling of Ports in MEP 2026-01-09 02:02:43 +01:00
Ryan Schultz a460e29473 retain current selection in bim.select_similar_type 2026-01-08 09:41:29 -06:00
Ryan Schultz e9eca5e3f2 If feet is negative, inches should also be negative (subtractive) 2026-01-07 09:08:12 -06:00
falken10vdl c848462905 Merge pull request #7536 from falken10vdl/per-file-save-metadata
Add Ifc Document information element to decide if blend metadata info should be used in this project file
2026-01-07 15:46:42 +01:00
falken10vdl 321878e1bb Add Ifc Document information element to decide if blend metadata info should be used in this project file 2026-01-06 22:14:08 +01:00
Ryan Schultz 831c3190cc Fix #7531: Add BBIM_MaterialLayer pset for custom offset persistence and UI improvements
This commit introduces a new BBIM_MaterialLayer property set to persist custom
material layer offset settings in IFC files, along with significant UI improvements
for material editing.

Features Added:
- New BBIM_MaterialLayer pset with properties:
  - UseCustomOffset (bool): Toggle for custom offset
  - CustomOffset (float): Offset value in SI units
  - CustomWallReference (str): Wall reference point (EXTERIOR/CENTER/INTERIOR)
  - CustomSlabReference (str): Slab reference point (TOP/MIDDLE/BOTTOM)

Tool Updates (tool.py):
- Added save_custom_offset_to_pset(): Saves custom offset from UI props to pset
- Added load_custom_offset_from_pset(): Loads custom offset from pset to UI props
- Updated get_material_layer_custom_offset(): Reads from pset when props unavailable

Operator Updates (operator.py):
- EnableEditingAssignedMaterial: Loads custom offset from pset on edit start
- EditAssignedMaterial: Saves custom offset to pset on edit completion
- Fixed KeyError for CardinalPoint in material constituent sets

Data Layer (data.py):
- Added bbim_material_layer_pset() to ObjectMaterialData for caching pset data
- Improves performance by avoiding repeated IFC queries during UI drawing

UI Improvements (ui.py):
- Added custom offset display in both editable and read-only material UIs
- Added OffsetFromReferenceLine display in read-only UI
- Implemented dynamic headers based on material type (Layers/Profiles/Constituents)
- Improved visual hierarchy with consistent boxing and indentation
- Aligned editable and read-only UI layouts for consistency
- Fixed layer set boundary labels (Top/Bottom for slabs, Interior/Exterior for walls)
- Reorganized "Add Material" section into material layers box

Bug Fixes:
- Fixed format_distance() to correctly handle negative imperial values
  (e.g., -0.5' now displays as "-0' - 6"" instead of "0' - -6"")

This allows users to set custom material layer offsets that persist in the IFC
file and remain available across sessions, with clear visual feedback in both
editing and viewing modes.
2026-01-04 13:15:39 -06:00
Bruno Postle a17b0604e1 api.project.append_asset deduplicate material sets
When appending a wall type and a slab type in turn, if their material
layer sets have the same name then the slab type would have a wall
construction. Now the material sets are compared before reusing an
existing material set.
2026-01-04 11:36:05 +00:00
Bruno Postle db623f4e73 api.project.append_asset Material Layer orphan fix
Fixes typo introduced in b4740b6 where `element in MATERIAL_SETS` should
have been `element.is_a() in MATERIAL_SETS`. This resulted in
deduplication of layersets, but not of the layers themselves.
2026-01-04 10:12:16 +00:00
Ryan Schultz cb08191083 close #3451: support comma-separated stylesheet paths
Enable multiple CSS files in stylesheet_path using comma separation.
Files are loaded in order with natural CSS cascading behavior.

Example: "base.css, overrides.css"
2026-01-03 18:10:21 -06:00
Ryan Schultz 4874f7770b Closes #3764: When switching an instance to a different beam type, preserve the CardinalPoint. 2026-01-03 16:52:10 -06:00
Ryan Schultz 56861b9403 fix #7153: Include IfcSpatialElementTypes in purge_unused_objects(object_type='TYPE') 2026-01-03 16:04:58 -06:00
Bruno Postle c20ed44a0f More python 3.14 fixes, see 9bac66a 2026-01-03 21:58:05 +00:00
Bruno Postle 9bac66a01b Fix for python 3.14
"In some versions of Python, instances of classes may have an
__annotations__ attribute. However, this is not supported functionality.
If you need the annotations of an instance, you can use type() to access
its class" https://docs.python.org/3/howto/annotations.html
2026-01-03 17:53:59 +00:00
Ryan Schultz 93de429e03 Previous commit should only apply to LAYER3 objects, since extrusion depth still works for LAYER2 objects. 2025-12-31 07:52:19 -06:00
Ryan Schultz 99b162f712 Fix #7519: Hide depth attribute in Item Mode for elements with material layer sets
When editing representation items for elements with IfcMaterialLayerSetUsage
(LAYER2/LAYER3), the depth attribute is now hidden from the UI as it should
not be modified at the item level for these parametric elements.

The check is performed by accessing the parent element through the
representation_obj property in geometry props and checking its material
usage type.
2025-12-31 07:43:34 -06:00
falken10vdl 22dddea0e0 Merge pull request #7521 from falken10vdl/fix-queries-with-backticks-in-annotations
Update formatting expression evaluation to include element context
2025-12-30 17:40:45 +01:00
falken10vdl f83fd665da Merge pull request #7518 from falken10vdl/fix-metadata-loading-with-styles
Fix: LoadBlendMetadataAndIFC by using load_handler
2025-12-30 05:58:04 +01:00
falken10vdl c0f240379c Update formatting expression evaluation to include element context 2025-12-29 19:17:30 +01:00
falken10vdl 1fd8878796 Merge pull request #7505 from falken10vdl/text-annotations-squash-merge
PR7500 squashed commit
2025-12-28 12:47:30 +01:00
falken10vdl 315b8b7112 Fix: LoadBlendMetadataAndIFC by using load_handler 2025-12-27 20:58:19 +01:00
Ryan Schultz d69b4927a2 Fix: Add window to shader editor context override
The copy_node_graph() method checks for a "window" key in the context
override, but get_shader_editor_context() wasn't providing it. This
caused the function to return early, preventing external styles from
loading.

Updated get_shader_editor_context() to include the window when the
screen differs from the current context, following the same pattern
used in get_viewport_context().
2025-12-27 09:59:47 -06:00
Ryan Schultz 7fcdec0a4c extending a2a5780d59: Reuse opening if mapped. 2025-12-27 09:23:33 -06:00
Ryan Schultz bc6209ad91 Fix #7372: Increase almost_zero tolerance to handle matrix transformation precision
Changed tolerance from 1e-5 to 1e-4 to account for floating-point errors
introduced by matrix transformations. Fixes section annotations being
incorrectly excluded from drawings when they should be visible.
2025-12-25 21:18:22 -06:00
Ryan Schultz 19534e225f Fix #6661: Have update_drawing_name function update the camera object's name in Blender, as well. 2025-12-25 19:29:57 -06:00
Ryan Schultz 96fe9b5398 Use hide_set() for IfcSpaces instead of hide_viewport
Moves IfcSpace hiding from collection assignment to after scene
addition, allowing hide_set() to work properly once objects are
in the view layer. Fixes RuntimeError during IFC import.
2025-12-25 19:05:30 -06:00
Ryan Schultz 05f7ffcbcc fix #6682: avoid applying styles directly to geometry when inherited from material
When duplicating elements, skip assign_body_styles if the element's
constituent materials already have style representations. This prevents
creating redundant IfcStyledItem entities on the geometry when styles
should be inherited from the material definition.
2025-12-25 18:32:03 -06:00
Andrej730 9f8a4d25b5 cmake export - fix issue finding zstd config on Windows 2025-12-25 19:09:22 +05:00
Thomas Krijnen 7fdf815d3c Re-run express rule codegen #7501 2025-12-24 15:33:44 +01:00
Thomas Krijnen 35e2be955b Test files #7501 2025-12-24 15:33:44 +01:00
Thomas Krijnen 8d3c610965 Map None -> Indeterminate to prevent iterating over none in non-shortcircuiting rule execution #7501 2025-12-24 15:33:44 +01:00
Andrej730 633c3bc7eb build-deps - move some code to powershell 2025-12-24 19:20:00 +05:00
Andrej730 8e639b00e3 Skip freetype dependency as it's not required anymore
It's not required since OCCT 7.6.0 https://github.com/Open-Cascade-SAS/OCCT/commit/5c9493b34878267b65879270951026982507917b
2025-12-24 19:20:00 +05:00
Andrej730 c6220b79b6 build-deps - use cmake --build 2025-12-24 19:20:00 +05:00
Andrej730 5d8d6a0a4c build-deps - use cpp files compilation multiprocessing
To speed up the process. Previously we were using `/m` which build different targets in parallel, but not .cpp files. So rocksdb could have been building for 30 mins because of this.
2025-12-24 19:20:00 +05:00
Andrej730 f3669db8e7 black . 2025-12-24 19:18:56 +05:00
falken10vdl 1a7947aa75 Merge pull request #7515 from falken10vdl/metadata-blend-file-suffix-configuration
Metadata-blend-file-suffix-configuration
2025-12-24 08:30:08 +01:00
falken10vdl 2403428d12 copy_node_graph handle missing temp_override keys 2025-12-23 07:12:19 +01:00
falken10vdl 48bb541f2f add configurable suffix for metadata blend file 2025-12-23 06:54:43 +01:00
Andrej730 cc559212a3 cmake - fix regression with policy not taking effect after 3971408 2025-12-22 19:57:26 +05:00
Andrej730 a3fda66dec black . 2025-12-22 19:57:26 +05:00
Andrej730 3a697e3062 dependabot - track Python tools versions 2025-12-22 18:44:42 +05:00
Andrej730 d41985f23a format cmake files 2025-12-22 18:44:42 +05:00
Andrej730 b686c19a25 Create .gersemirc 2025-12-22 18:44:42 +05:00
falken10vdl b0450597d0 Merge pull request #7513 from falken10vdl/fixes-ui-customization
SaveBlendMetadataFile to use IFC directory for temporary file path and fix panel visibility logic in UI
2025-12-21 13:57:28 +01:00
falken10vdl 2cac0bdca6 SaveBlendMetadataFile to use IFC directory for temporary file path and fix panel visibility logic in UI 2025-12-21 12:17:54 +01:00
Kristoffer Andersen fb3e35c964 Fix macOS platform entries in CI workflow 2025-12-20 08:56:06 +01:00
falken10vdl 276a488c7e Merge pull request #7509 from falken10vdl/Improve-saving-metadata.blend-file
Refactor SaveBlendMetadataFile to improve speed and IFC data cleanup
2025-12-20 04:16:55 +01:00
falken10vdl 9a1b0ce44c Refactor SaveBlendMetadataFile to improve speed and IFC data cleanup 2025-12-20 04:10:26 +01:00
Ryan Schultz 45de750790 Fixes #7507: Fix: Prevent spatial element placement corruption during drawing activation
sync_references was syncing spatial element placements FROM Blender TO IFC,
corrupting their correct positions. Spatial elements (storeys, spaces,
buildings) often have Blender objects at Z=0 for modeling convenience, but
their IFC placements store absolute positions.

Solution: Skip syncing placements for IfcSpatialElement and IfcGrid types,
as their IFC placement is the source of truth.

Fixes storey elevation corruption during SECTION_LEVEL annotation generation.
2025-12-19 12:44:23 -06:00
Andrej730 b1b67de420 cmake - move ccache usage to an option 2025-12-19 19:11:06 +05:00
Andrej730 13be6ccd45 Sort imports 2025-12-19 18:53:14 +05:00
Andrej730 29176330e8 Revert "Make dataclasses args optional to support Python 3.9 #6725"
This reverts commit ad7473ff1f.
2025-12-19 18:43:17 +05:00
Andrej730 b784cb06ae Revert "Make zip strict argument optional to support Python 3.9"
This reverts commit 3bdce4fbc3.
2025-12-19 18:43:17 +05:00
Andrej730 5d42ded154 Fix unsorted __all__ ruff check 2025-12-19 18:43:17 +05:00
Andrej730 4db9d60a97 Drop Python 3.9 support as it reached EOL 2025-12-19 18:43:17 +05:00
falken10vdl 85aeb6e1cc PR7500 squashed commit 2025-12-19 14:06:16 +01:00
dependabot[bot] eba4405310 Bump actions/download-artifact from 6.0.0 to 7.0.0
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-19 13:40:39 +01:00
dependabot[bot] 22c972d88a Bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-19 13:40:27 +01:00
dependabot[bot] abb19e0870 Bump actions/checkout from 5 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-19 13:39:50 +01:00
Andrej730 cc63e79186 simple_spf - bump #7363 2025-12-19 17:39:00 +05:00
Andrej730 a40e211f25 ci - add black formatter annotations 2025-12-19 17:34:57 +05:00
Andrej730 d8b8fb628b ci - github summary for ruff 2025-12-19 17:34:57 +05:00
Andrej730 fda3bd319f Use black formatter action for pretty summaries 2025-12-19 17:34:57 +05:00
Andrej730 2c3281917a black . 2025-12-19 17:34:57 +05:00
falken10vdl f2eb777b3b Merge pull request #6638 from falken10vdl/USER_UI_CUSTOMIZATION
User UI customization
This can be enabled in Extras at user discretion.
2025-12-19 09:16:09 +01:00
falken10vdl 2264fbeb44 put settings at the end. black 2025-12-19 09:07:26 +01:00
falken10vdl 53115e0654 Improve command handling in drawing tool to skip None values 2025-12-19 08:56:19 +01:00
falken10vdl 5dab742623 Remove documentation files: restore original state
- Removed interface.rst (was added in this PR)
- Removed all PNG documentation images that were added in this PR:
  - bonsai_customization1.png
  - bonsai_customization2.png
  - bonsai_interface.png
  - bonsai_interface2.png
  - bookmarks.png
  - gear_tabs.png

These files were not present in the upstream v0.8.0 branch and have been removed to restore the original documentation state.
2025-12-19 08:56:19 +01:00
falken10vdl 70cc77df90 Enhance IFC collection removal 2025-12-19 08:56:19 +01:00
falken10vdl 633474b4f6 Refactor UI preferences to use 'save_metadata_blend_file' instead of 'user_ui_customization' for metadata handling 2025-12-19 08:56:19 +01:00
falken10vdl 08d9e31a3a provide user feedback in IFC export 2025-12-19 08:54:01 +01:00
falken10vdl e4e1364eaa align underscore below the active tab icon 2025-12-19 08:54:00 +01:00
falken10vdl 76b6f6b16b Implement user interface customization features and enhance metadata handling 2025-12-19 08:54:00 +01:00
falken10vdl 888ab85548 Refactor UI helpers into helper module for better organization 2025-12-19 08:51:07 +01:00
falken10vdl 34cf69e3fb cleanup 2025-12-19 08:51:07 +01:00
falken10vdl 89973a7a76 Refactor to use blender properties so loading metadata preserves session settings 2025-12-19 08:51:07 +01:00
falken10vdl ba3c96485a major refactor using blender props which we cna now save teh belnd metadata 2025-12-19 08:51:07 +01:00
falken10vdl 3d18aca2f2 Add operators for saving and loading blend metadata files 2025-12-19 08:51:07 +01:00
falken10 71538455b4 black executed in root directory 2025-12-19 08:51:06 +01:00
falken10vdl 7a90388f54 documentation 2025-12-19 08:51:06 +01:00
falken10 403d761e14 remove comments 2025-12-19 08:51:06 +01:00
falken10 7852102b33 load and save json settings 2025-12-19 08:51:06 +01:00
falken10 9aea302d92 added reset option 2025-12-19 08:51:06 +01:00
falken10 1fd3e2791f added TAB visibility 2025-12-19 08:51:06 +01:00
falken10 4a71ea1fd6 code simplification 2025-12-19 08:51:06 +01:00
falken10 d0dbdbc205 added lb_labels 2025-12-19 08:51:06 +01:00
falken10 c8306d44b9 First version complete 2025-12-19 08:51:06 +01:00
falken10 0c428c54ad eye icon to show or hide panel 2025-12-19 08:51:06 +01:00
falken10 50fa245a56 added uilist for subpanels 2025-12-19 08:51:06 +01:00
falken10 6ba738fcaa Added bookmarks TAB 2025-12-19 08:51:06 +01:00
Ryan Schultz 2ed991ebce Filter drawing search to only match DRAWING annotations 2025-12-18 12:37:31 -06:00
Ryan Schultz 30dbf48f6d Extending https://github.com/IfcOpenShell/IfcOpenShell/commit/3ebb046619e43a1f42087e95fb9be1959cbfe0a4:
Force UI redraw to flush pending Blender operations, as Blender was crashing during bulk printing.  Not 100% this fixed everything, as there are a few crashes that spring up still, but is better.
2025-12-18 10:28:58 -06:00
falken10vdl ba142d3b16 Merge pull request #7498 from falken10vdl/New-search-tool
New search tool interface. This one supersedes #7315.

Cheers!
2025-12-18 15:41:54 +01:00
Andrej730 2581c36a5f black . 2025-12-18 18:47:13 +05:00
Andrej730 4d52480cbe cmake - find dependencies from exported config file 2025-12-18 18:46:04 +05:00
Andrej730 f8144cdbad ci.yml - color cmake output 2025-12-18 18:46:04 +05:00
falken10vdl 59c9b16276 Migrate old filter prefixes to new filter_mode system and enhance filter handling based on user preferences 2025-12-18 10:56:18 +01:00
falken10vdl affaa859ef Enhance filter operation modes with new preferences for chaining and default behaviors 2025-12-18 10:20:28 +01:00
falken10vdl 738a068474 Refactor filter suggestion handling to streamline preference access and improve code clarity 2025-12-18 09:12:42 +01:00
Ryan Schultz bc5e4d7935 removed debugging print statements from previous commit. 2025-12-17 21:30:09 -06:00
Ryan Schultz 3ebb046619 Fix #7138: rasterized background from wrong drawing when printing all
Force viewport to use scene camera before rendering underlay. When
print_all was used, viewport remained locked to local camera from
previous drawing, causing OpenGL render to capture wrong view.
2025-12-17 21:19:39 -06:00
Ryan Schultz 3f7eba2467 Include 'Commercial Kitchen Hood' in IFC suggestions
Added new suggestion for 'Commercial Kitchen Hood' under IfcAirTerminal and IfcAirTerminalType.
2025-12-17 12:48:48 -06:00
falken10vdl 1477d650a4 Rename to chain_filter_with_set_operations for clarity and update related preferences 2025-12-17 19:28:00 +01:00
falken10vdl 8912cca652 Increase dialog width for filter value suggestions to improve usability 2025-12-17 11:13:17 +01:00
Esteban DUGUEPEROUX 9d14369656 cmake: Add missing WITH_OPENCOLLADA definition 2025-12-17 11:09:05 +01:00
falken10vdl d6e9d7d339 use edit_filter_query to edit json configuration 2025-12-17 10:55:14 +01:00
falken10vdl 965a303b4b Add edit filter query option for backward compatibility in draw_filter function 2025-12-17 00:25:57 +01:00
falken10vdl bf75509fdf Enhance filtering capabilities with JSON support for include/exclude operations 2025-12-16 19:47:41 +01:00
falken10vdl ce35903459 First commit for a simplified searching operation with suggestions 2025-12-16 17:13:07 +01:00
Ryan Schultz 21c4382b71 Small UI tweaks 2025-12-16 06:56:00 -06:00
falken10vdl 33ba7c45b9 Merge pull request #7316 from falken10vdl/Show-attributes-for-relating-type
Add attribute info for relating type
2025-12-16 09:48:50 +01:00
falken10vdl 76f4f4e212 Merge pull request #7207 from falken10vdl/unwrap-ifcreferenceimage
Add unwrapping of UV for IfcReferenceImage
2025-12-16 09:45:09 +01:00
falken10vdl fdf741b209 Add description to Image Scaling Tool operator for clarity + black 2025-12-16 09:26:28 +01:00
falken10vdl 5a108b1c0e Merge pull request #7077 from falken10vdl/Add-Mass-and-Time-Unit-to-New-Project-Wizard-panel
Add mass and time unit to new project wizard panel
2025-12-16 08:46:46 +01:00
falken10vdl 6135d07b67 Merge pull request #7072 from falken10vdl/Enhanced-Classification-Display-in-Object-Information
Add  classification system to the Object Information, Classification References Subpanel
2025-12-16 08:43:42 +01:00
Ryan Schultz cf5ffad9af feat(drawing): support multiple file selection in Add Reference
Enable importing multiple .svg reference files at once using
standard Blender multi-select (Shift/Ctrl+click).

Includes backward compatibility and test coverage.
2025-12-15 13:18:29 -06:00
Andrej730 b42581b223 cmake - fix WSOCK32 lib required for OCCT on Unix (ce7fdcc) 2025-12-15 19:02:06 +05:00
Andrej730 bf2c27528c cmake - fix issue with using cmake occt packages <7.7.0 2025-12-15 19:02:06 +05:00
Andrej730 deb6243ce5 cmake - use INCLUDES DESTINATION for includes paths export
As it's more idiomatic.
2025-12-15 19:02:06 +05:00
Andrej730 621cc4f039 build scripts - don't provide ccache explicitly
as it's autodetected
2025-12-15 19:02:05 +05:00
Andrej730 cd87217f4e build scripts - don't provide cxx-std-17
As it's automatically set by the cmake script.
2025-12-15 19:02:05 +05:00
Andrej730 87e4846f71 ci.yml - use ccache for examples too 2025-12-15 19:02:05 +05:00
Andrej730 4138d9f464 ci.yml - drop OCCT cmake variables preferring cmake config
Just found that it's available from `occt-misc` package.
2025-12-15 19:02:05 +05:00
Andrej730 c7b75d2863 ci.yml - add packages to use occt cmake config 2025-12-15 19:02:05 +05:00
Andrej730 57197dd439 cmake export - export OpenCASCADE_INTERFACE target
To avoid issues if user provided OCC_INCLUDE_DIR and OCC_LIBRARY_DIR.
2025-12-15 19:02:05 +05:00
Andrej730 46dc6cf08b ci.yml - use depth 1 for swig 2025-12-15 19:02:04 +05:00
Andrej730 4a2058ebc6 build-all - remove debug print 2025-12-15 19:02:04 +05:00
falken10vdl 5294fa1cbe Add preference for mass and time units visibility in project wizard 2025-12-15 13:39:46 +01:00
falken10vdl a98cad161e Refactor mass and time units panel into collapsible section using .panel method in project wizard UI 2025-12-15 13:27:20 +01:00
falken10vdl f222a8ba4f Add mass and time units as a panel to project wizard UI 2025-12-15 13:27:20 +01:00
falken10vdl f902c7a50a ui change to add or not add mass and time units 2025-12-15 13:27:20 +01:00
falken10vdl b1c4822315 black formatting 2025-12-15 13:27:20 +01:00
falken10vdl 93579b8f66 Cleanup based on core developer's feedback 2025-12-15 13:27:20 +01:00
falken10vdl 169ca806c0 Updated with core developer feedback 2025-12-15 13:27:20 +01:00
falken10vdl a4e76ed6ee Updated with core developer feedback: fixed for Tonne and added tests 2025-12-15 13:27:20 +01:00
falken10vdl 146301b0c0 use kilogram as default for SI and Seconds for Imperial 2025-12-15 13:27:20 +01:00
falken10vdl 487a2014f5 proposal to add massunit and timeunit in project creation wizard 2025-12-15 13:27:19 +01:00
falken10vdl cb89fbfd86 Add attribute info for relating type 2025-12-15 12:23:30 +01:00
Ryan Schultz 6ab7acfa57 closes #3340: right click on section/elevation tag to open corresponding drawing.
video: https://github.com/IfcOpenShell/IfcOpenShell/issues/3340#issuecomment-3650097896
2025-12-13 20:45:48 -06:00
Ryan Schultz a2a5780d59 Fix #6392: when duplicating a window/door/etc, the associated IfcOpenElement duplicates as well.
Also when `bim.append_library_element` it copies the IfcOpenElement, as well.
2025-12-13 09:37:56 -06:00
Andrej730 276c9c9833 ci - also temp disable ifcopenhouse executables execution 2025-12-12 20:54:39 +05:00
Andrej730 31740784de examples - disable ifcopenhouse build temporarily to fix CI 2025-12-12 20:41:22 +05:00
Andrej730 dd683d1115 examples - further simplify linking 2025-12-12 20:19:42 +05:00
Andrej730 b237fac4b8 examples - don't provide cxx_std_17 to targets explicitly
As it's already defined for the entire project.
2025-12-12 20:19:42 +05:00
Andrej730 20812ecd80 examples - don't provide boost components explicitly
Since they're already included to `IfcParse`.
2025-12-12 20:19:42 +05:00
Andrej730 1d7d0f6d05 cmake export - export some variables to inspect installation 2025-12-12 20:16:14 +05:00
Andrej730 d5210e0d75 cmake export - propagate HAS_SCHEMA definitions to exported IfcParse target 2025-12-12 20:16:14 +05:00
Andrej730 d303acd660 cmake export - propagate IFOPSH_WITH_ROCKSDB to cmake config
Apparently, cmake isn't exporting definitions defined globally `add_definitions`, so creating interface target to combine rocksdb and our definitions.
2025-12-12 20:16:13 +05:00
Andrej730 8f44f60546 cmake - remove unused FOPSH_WITH_ROCKSDB_ZSTD definition 2025-12-12 19:30:23 +05:00
Andrej730 01f97a5860 IfcParse - export include path 2025-12-12 19:30:23 +05:00
Andrej730 4d34e4296c examples - build IfcAlignment using cmake package 2025-12-12 19:30:22 +05:00
Andrej730 43533706a4 examples - build IfcOpenHouse/IfcAdvancedHouse using cmake package 2025-12-12 19:30:22 +05:00
Andrej730 61269136cd cmake - clean up a bit in non-advanced variables 2025-12-12 19:30:22 +05:00
Andrej730 5a0f8d30cf cmake - install headers using PUBLIC_HEADER, deprecate INCLUDEDIR 2025-12-12 19:30:21 +05:00
Andrej730 99835fcab3 IfcParseExamples not to rely on includes 2025-12-12 19:30:21 +05:00
Andrej730 92964fb5ef cmake - option to build only common schemas 2025-12-12 19:30:21 +05:00
Andrej730 159538e2bb cmake - add _d debug postfix for libraries on Windows 2025-12-12 18:33:48 +05:00
Andrej730 a62a4bb158 cmake - install examples too 2025-12-12 18:33:48 +05:00
Andrej730 084992ddcc Make IfcParseExamples buildable outside of the main build tree
It's a very verbose version of consuming IfcOpenShell cmake package, but we'll be able to use it as a start point to build upon.
2025-12-12 18:33:48 +05:00
Andrej730 39dd08c84e cmake - keep VERSION_OVERRIDE option description (3971408a0) 2025-12-12 18:12:43 +05:00
Ryan Schultz 37f3199749 When selected, preserve text decorations for IfcAnnotation in local view 2025-12-11 13:38:53 -06:00
Andrej730 2627052b55 cmake - export IfcOpenShellConfig.cmake 2025-12-11 19:55:41 +05:00
Andrej730 f5b1d7695a build-deps - remove unused gmp and mpfr paths
Since it's header-only it doesn't need them
2025-12-11 18:03:44 +05:00
Andrej730 d876c001e2 Remove deprecated BOOST_LIBRARYDIR var 2025-12-11 18:03:44 +05:00
Andrej730 20d6547e54 run-cmake.bat - use cgal config instead of explicit paths 2025-12-11 18:03:44 +05:00
Andrej730 71a36147a6 FindCGAL - another fix for 6591a6981 2025-12-11 18:03:44 +05:00
Andrej730 f708594853 svgfill cmake - drop special cmake_minimum_required 2025-12-11 18:03:44 +05:00
Ryan Schultz 01b2124102 small tweak to previous commit 2025-12-11 07:02:39 -06:00
Ryan Schultz 592ac168c5 add "Fire Extinguisher" to Ifc_classes_suggestions 2025-12-10 21:09:05 -06:00
Esteban DUGUEPEROUX 4b56cc7916 cmake: Add HDF5 to IFCOPENSHELL_LIBRARIES 2025-12-10 18:25:33 +01:00
falken10vdl d91d7257c8 Merge pull request #7308 from falken10vdl/Extras-subpanel-in-addon-settings
Add Extras in addon preferences to conditionally add functionality. One extra added from commit from sjb007 to allow for container hide/show/isolate
2025-12-10 16:44:16 +01:00
Andrej730 dbe23ca809 FindPROJ - fix outputs description 2025-12-10 20:04:02 +05:00
Andrej730 9880ee79b2 FindPROJ - restore CMAKE_MODULE_PATH after module is executed 2025-12-10 20:04:02 +05:00
Andrej730 6591a69816 FindCGAL - keep CGAL::CGAL target name 2025-12-10 20:04:02 +05:00
Andrej730 c475a377b7 build-deps - use precompiled headers to speed up OCCT building process 2025-12-10 19:52:42 +05:00
Andrej730 ce7fdcc191 build-deps - use OCC_INSTALL_DIR instead of includes/libs path 2025-12-10 19:52:42 +05:00
Andrej730 e503dad510 build-deps - fix typo 2025-12-10 19:52:42 +05:00
Andrej730 517ba237f9 build-deps - coexisting Release and Debug installations 2025-12-10 19:52:41 +05:00
Andrej730 994a364474 build-deps - simplify build/install commands 2025-12-10 19:52:41 +05:00
Andrej730 9d828852c0 Use cmake configs to find USD
Also renamed `USD::` namespace to `pxr::` to match packaage name.
2025-12-10 19:52:41 +05:00
Ary Obenholzner 7a62f65af0 Fix large BCF file creation by allowing Zip64 2025-12-10 15:21:11 +01:00
Esteban DUGUEPEROUX d566ba6e1f cmake: Use correct proj target
See-Also: https://proj.org/en/stable/development/cmake.html
2025-12-10 15:20:02 +01:00
Esteban DUGUEPEROUX c32a6dc0ca cmake: Support shared build for rocksdb 2025-12-10 15:19:33 +01:00
Esteban DUGUEPEROUX 3971408a07 cmake: Add project() command before options to be able to toggle them 2025-12-10 15:16:13 +01:00
Esteban DUGUEPEROUX 13ed0c3096 Take into account remarks 2025-12-10 15:07:56 +01:00
Esteban DUGUEPEROUX 02233f86cf cmake: Add install command for qtViewer 2025-12-10 15:07:56 +01:00
falken10vdl 75881aab24 place new code after the current preferences one to follow the order. Added to type checking 2025-12-08 09:35:08 +01:00
falken10vdl c4da1dda4d Refactor addon preferences to make it cleaner as per developer's feedback 2025-12-08 09:25:49 +01:00
falken10vdl 9f6e92eefd black 2025-12-07 23:11:29 +01:00
falken10vdl db2234acef Add Extras in addon preferences to conditionally add functionality. One extra added form commit from sjb007 2025-12-07 23:09:18 +01:00
sboddy b4135194ca Merge pull request #7431 to hide the clash decorator in the 3D view. 2025-12-07 18:07:29 +00:00
Andrej730 d174ecf760 cmake - make USD_SUPPORT build succeed 2025-12-05 20:24:01 +05:00
Andrej730 2213c3773d UNIFY_ENVVARS_AND_CACHE - check if var is defined to fix some warnings 2025-12-05 20:24:01 +05:00
Andrej730 1ad1883f0e Findnlohmann_json.cmake 2025-12-05 20:24:01 +05:00
Andrej730 c2a03eb658 cmake - fix uninitialized vars 2025-12-05 20:24:00 +05:00
Andrej730 225039aa96 cmake - remove unused LIBXML2_INCLUDE_DIR after 6a0caa798 2025-12-05 20:24:00 +05:00
Andrej730 3cc8477a01 cmake - move ifcgeom installs to ifcgeom cmake
we don't install kernel libraries as they now have `OBJECT` type
IFCGEOM_SCHEMA_LIBRARIES and headers were handled in b7a9199  30184a3 9d28628
2025-12-05 20:24:00 +05:00
Andrej730 40cffe2dd1 cmake - remove unused installs after 8fb10d2 2025-12-05 20:24:00 +05:00
Andrej730 0d651e377a run-cmake.bat - add usage 2025-12-05 20:24:00 +05:00
Andrej730 8ea4b9e38c Remove redundant links in 0555523c9 2025-12-05 20:24:00 +05:00
Andrej730 0555523c98 cmake - move all cgal related stuff to CGAL::CGAL target 2025-12-04 19:59:07 +05:00
Andrej730 db09744428 Temporarily disable setting point3 tag to fix build (4fc2f623c)
Since `point3` don't currently have `tag` member.

Ping @aothms
2025-12-04 19:59:07 +05:00
Andrej730 91f19f7a54 cmake - remove unused CMP0074 policy
it's automatically applied since cmake 3.12
2025-12-04 17:44:13 +05:00
Andrej730 6a0caa7989 cmake - fix missing xml.lib in debug builds #7413
After 5d56025 we were using `LibXml2::LibXml2` instead of `LIBXML2_LIBRARIES` for linking, but this target was missing debug variants leading to issues during linking.
2025-12-04 17:44:13 +05:00
Andrej730 9820adb337 svgfill - use standard cmake installation (same as 083fab525) 2025-12-04 17:44:13 +05:00
Andrej730 a588d15438 run-cmake.bat - option to use ninja generator for debugging 2025-12-04 17:44:13 +05:00
Andrej730 bf308995fb install-ifcopenshell.bat - add usage example 2025-12-04 17:44:12 +05:00
Andrej730 172d840a77 cmake - remove unused WITH_RELATIONSHIP_VALIDATION compilation definition 2025-12-04 17:44:12 +05:00
Andrej730 16336766da build-all - remove WASM_TOOLCHAIN_FILE doc deprecated after 89a6eac 2025-12-04 17:44:12 +05:00
Andrej730 549b2e6ff8 black . 2025-12-04 17:44:12 +05:00
Ryan Schultz 30e750d770 some old vestige of a bygone era. 2025-12-02 11:13:47 -06:00
Ryan Schultz f50bbe83a3 extend https://github.com/IfcOpenShell/IfcOpenShell/commit/a038fa62baadff8793f8a17e9367b9be03d283a4: Use spacebar to edit IfcAnnotations, as well. 2025-12-02 10:00:57 -06:00
Thomas Krijnen 4fc2f623cf Count number of emitted normals in OBJ serializer, which might be less than verts when writing line geometries 2025-12-02 16:32:37 +01:00
Andrej730 1468bf3c97 parse_ifcxml - remove redundant ifdef WITH_IFCXML
The entire file is already wrapped in `WITH_IFCXML`, so no need to do it again for some block.
2025-12-02 19:55:56 +05:00
Andrej730 c7df59e961 cmake - indicate that OpenCascade is only used by IfcGeom 2025-12-02 19:55:56 +05:00
Andrej730 6cbd3ed014 cmake - drop OPENCASCADE_LIBRARIES variable #7388 2025-12-02 19:55:56 +05:00
Andrej730 a5d0187343 ifcparse cmake - fix missing ifcxml symbols in python wrapper #7406 2025-12-02 19:55:56 +05:00
Andrej730 67421c533c ifcparse cmake - make compile definition more explicit #7406 2025-12-02 19:55:56 +05:00
Esteban DUGUEPEROUX 2e5d87b5d7 cmake: Link Eigen3 only against targets needing it 2025-12-02 14:53:44 +01:00
Andrej730 9807c2bedf Fix possible crash on bim.split_along_edge #7394 2025-12-02 16:11:39 +05:00
Andrej730 52baba0fe0 cmake - don't use debug Python by default, move it to USE_DEBUG_PYTHON option 2025-12-02 16:11:38 +05:00
Andrej730 e304154037 Fix deprecated typing symbols 2025-12-02 16:11:38 +05:00
Andrej730 dfb8298ecf black . 2025-12-02 16:11:38 +05:00
Ryan Schultz 0ee084b5d9 Support IfcAnnotation to IfcAnnotation assignment in AssignSelectedObjectAsProduct 2025-12-01 17:34:37 -06:00
Gorgious c769c9e67c Update to gizmos system
Added more gizmos for multi-panel windows and for the door transom.
Support negative dimension values (lining offset for door and window)
Fix railing, stair, and roof being regenerated during UI panel draw instead of on property change

Various code quality changes and DRY improvements
2025-12-01 23:13:34 +01:00
Ryan Schultz 349cbf27b9 updated comment for previous commit. 2025-12-01 11:06:09 -06:00
Ryan Schultz f083425656 Fix #7438 - increase tolerance in making Shapely fills 2025-12-01 11:01:52 -06:00
Ryan Schultz ad812bda47 fix #3238: Auto-switch representation to match active drawing on type assign 2025-11-30 21:01:41 -06:00
Ryan Schultz 5b7888984e Fix #6495: when Shift+G is run to regenerate a wall, it refreshes the cut decorator as well. 2025-11-30 20:02:57 -06:00
Ryan Schultz e3d254d3e5 fix #6250: have name of duplicated type show in outliner, as well. 2025-11-30 19:07:14 -06:00
Ryan Schultz 3b83f978ab Fix #6334: Preserve annotation vertex order during subdivision to prevent arrow/text flip (#7437) 2025-11-30 15:54:57 -06:00
Gorgious 5b1e599b5f Fix bug when snapping to mesh with the parametric gizmos 2025-11-30 21:57:54 +01:00
Gorgious ad4fc76546 Major refactor of parametric gizmo system: dimension lines and code consolidation
Major changes:
- Relocate gizmo infrastructure from bim/gizmo.py to module/drawing/gizmos.py
- Replace arrow-based property gizmos with dimension line gizmos throughout
- Add view-dependent positioning: gizmos automatically reposition based on camera angle to stay visible and avoid overlapping geometry
- Add special icons for stair to deal with edge cases

Code quality:
- Add DRY helper methods for gizmo positioning across stair, door, and window
- Remove redundant visibility logic
- Extract integer input handling to dedicated module for reuse
- Add comprehensive documentation for gizmo architecture
2025-11-30 21:55:36 +01:00
Esteban DUGUEPEROUX b7a9199253 cmake: Externalize geometry mapping target cmake config 2025-11-30 15:29:21 +01:00
Esteban DUGUEPEROUX 986cb905b2 cmake: Externalize geometry_serializer cmake config files to their own directory 2025-11-30 15:29:21 +01:00
Esteban DUGUEPEROUX 30184a3f6d cmake: Externalize geometry_serializer cmake config files to their own directory 2025-11-30 12:29:26 +01:00
Gorgious 8f7cf76d98 Fix wrong stair length calculation when having no custom first or last tread run 2025-11-30 11:28:40 +01:00
Esteban DUGUEPEROUX 083fab5255 cmake: Use standard install way
For specific install customization, use CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_LIBDIR and CMAKE_INSTALL_INCLUDEDIR variables.

See-Also: https://cmake.org/cmake/help/latest/guide/tutorial/Installation%20Commands%20and%20Concepts.html
2025-11-30 11:11:51 +01:00
Esteban DUGUEPEROUX 0724fac698 cmake: Enable svgfill only for Python wrapper 2025-11-30 11:10:03 +01:00
Esteban DUGUEPEROUX 9775dfc2c1 Add svgfill directly in IfcOpenShell git repo 2025-11-30 11:09:36 +01:00
Esteban DUGUEPEROUX 658713f142 Remove svgfill as git module to add it directly in next commit 2025-11-30 11:09:36 +01:00
Esteban DUGUEPEROUX 81bf187ee6 cmake: put IFCXML_SUPPORT related config in IfcParse cmake config file 2025-11-30 11:05:46 +01:00
Gorgious 8f3e67b747 Prevent user from setting parametric stair properties to a value that can't generate valid geometry 2025-11-30 10:36:24 +01:00
Thomas Krijnen bd57cc8735 Move sweep directrix closer to origin #7408 2025-11-30 09:56:27 +01:00
Ryan Schultz 8d617c87c8 Extend github.com/IfcOpenShell/IfcOpenShell/commit/1b2ad6c93f633df46d55f65bf97e730461fd7e6c - apply new type to all the selected objects. 2025-11-29 15:53:08 -06:00
Ryan Schultz 1b2ad6c93f Add interactive dialog for type duplication with assignment option
Add dialog to DuplicateType operator allowing users to set name, description,
and optionally assign the active object to the duplicated type. Add duplicate
button to product UI in type panel with auto-assignment enabled by default.
2025-11-29 15:13:38 -06:00
Gorgious ffe9f65b3c Refactor and improve parametric gizmo system
- You can now input values using the keyboard once you clicked on a gizmo
- Gizmos now support click > move > click  in addition to drag and drop (yay carpal tunnel !)
- Optimize snapping performance
- Consolidate door and window type in model.py
- You can now cycle through window and door types using the cycle gizmo
- Pen, validate, cancel, lock, and cycle gizmos are now billboards and follow view direction
- Draggable gizmos are now billboard 2D arrows instead of 3D cones
2025-11-28 23:22:42 +01:00
Stephen Boddy 1e212f7b23 black 2025-11-28 18:44:06 +00:00
Stephen Boddy 121acfe6b3 Minor Feature: Add ability to hide the clash decorator in the 3D view. 2025-11-28 18:37:10 +00:00
Ryan Schultz 5a8f557e7f Fix #7398: move purge funtions with other purge functions 2025-11-28 10:41:34 -06:00
Andrej730 5b56093147 black . 2025-11-28 21:03:50 +05:00
Andrej730 bcb63f450b build-deps - make rocksdb installation minimal 2025-11-28 21:03:50 +05:00
Andrej730 e4c82e2c92 FindOpenCASCADE - log found config 2025-11-28 21:03:50 +05:00
Esteban DUGUEPEROUX 8fb10d2ff3 cmake: Use OBJECT target instead of STATIC one to avoid mix static and shared targets in a same build 2025-11-28 17:03:25 +01:00
Esteban DUGUEPEROUX 37d29e5d47 cmake: Use same PRIVATE scope for Serializers target 2025-11-28 16:17:41 +01:00
Diego Mateos 7221e72cfa fix some target folders to respect parent cmake 2025-11-28 14:11:57 +01:00
Gorgious c828c1b08d Refactor parametric element gizmos
- Add gizmos for windows and stairs
- Add BaseParametricGizmoGroup mixin for doors, windows, and stairs
- Improve snapping with screen-space distance calculation
- Add GizmoPlus, GizmoMinus, GizmoCycle icon gizmos
- Add GizmoPropConfig dataclass for cleaner gizmo configuration
2025-11-27 22:56:27 +01:00
Ryan Schultz fcf5614004 Is user saving .blend file? 2025-11-27 09:50:31 -06:00
myoualid 5a4d60e08c util functions to retrieve material profiles and material layers for an element 2025-11-27 13:30:38 +01:00
Bruno Postle a675365dfd Correct fix for OCC built with VTK support 2025-11-26 22:53:38 +00:00
Bruno Postle 5ab6deb121 Revert cbd2689 Propagate CMP0167 policy 2025-11-25 23:08:52 +00:00
Bruno Postle cbd26896ba Propagate CMP0167 policy to fix cmake warnings 2025-11-25 18:45:59 +00:00
Bruno Postle ceeca752ea Fix build error from OCC with VTK support
OpenCASCADE may be built with VTK support. Try to find VTK first to avoid
CMake errors when OpenCASCADE's config references VTK targets.
2025-11-25 18:44:32 +00:00
Thomas Krijnen 9d437b5bc3 Mark simple type instance file ownership #7226 2025-11-25 09:19:28 +01:00
Andrej730 1d0b4675c0 Ruff - fix usage of deprecated Tuple, List 2025-11-24 11:01:26 +05:00
Andrej730 497ebc55e7 black . 2025-11-24 11:01:26 +05:00
Ryan Schultz 97a501036b Have dimensions like 4' - 1/2" read like 4' - 0 1/2", as is more the convention. 2025-11-23 18:22:40 -06:00
Gorgious 592c51b526 Add interactive gizmo system for editing parmeterized door
Implement visual parameter manipulation in 3D viewport with reusable
gizmo components. Features snap-to-mesh (Ctrl), precision mode (Shift),
and real-time feedback. Includes cone gizmos for dimensions,
arc gizmo for swing direction, and icon gizmos for edit controls. Gizmos are globally are individually toggleable in the addon preferences.

May be expanded upon later to add gizmos to other paramaterized elements (window, railing, roof, stairs, array, ...).

Unfortunately gizmos can't tap into the builtin snap system or bonsai snap system which is built for modal operators so gizmos implement yet another custom rather naive snap system.
2025-11-23 20:16:27 +01:00
Gorgious 3dd7290ee1 Display default parameters for parametric elements under "Model" in the preferences 2025-11-23 15:43:59 +01:00
Ryan Schultz d7ac5f2441 Fix #7397 - don't delete aggregate if relatingobject is a IfcSpatialElement 2025-11-23 08:09:13 -06:00
Thomas Krijnen 461404cd45 Don't terminate parsing on invalid entity names 2025-11-23 11:16:47 +01:00
Ryan Schultz bfd5b1bede add to https://github.com/IfcOpenShell/IfcOpenShell/commit/57bc709b6fef6381bbb2810da15e568290c4a77a: Fix elevation display by converting from project units to meters on import
When importing spatial decomposition, get_storey_elevation() returns values in the project's unit system (e.g., feet), but format_distance() expects values in meters. Added unit_scale conversion (elevation * unit_scale) before formatting to ensure elevations display correctly regardless of project units.
2025-11-22 16:53:28 -06:00
Ryan Schultz 0d0b6cc6b2 Additional fixes to https://github.com/IfcOpenShell/IfcOpenShell/commit/57bc709b6fef6381bbb2810da15e568290c4a77a 2025-11-22 15:40:47 -06:00
falken10vdl d2dfeb79a3 Refactor AddReferenceImage to use public property for dimensions dialog 2025-11-22 22:26:44 +01:00
falken10vdl 43b12d55d4 Add dimensions dialog for reference image and update scaling logic 2025-11-22 22:26:44 +01:00
falken10vdl 834634aedb Properly AddReferenceImage operator initialization (ready for IFC edit mode) 2025-11-22 22:26:44 +01:00
falken10vdl 069873053a Add Image Scaling Tool and integrate with workspace hotkeys 2025-11-22 22:26:44 +01:00
falken10vdl ec51c67373 For ifcReferenceImage by default set color type to "Texture" and warn user 2025-11-22 22:26:44 +01:00
falken10vdl d8263349cd Add UV mapping for IfcAnnotation images in IfcImporter 2025-11-22 22:26:44 +01:00
falken10vdl 2be142eff2 Add unwrapping of UV for IfcReferenceImage 2025-11-22 22:26:44 +01:00
Ryan Schultz 57bc709b6f Fix imperial unit conversion for plan and section level decorators
Level annotations were incorrectly converting feet to meters and back,
causing values like 3ft to display as 9'10". Updated format_value() to
accept in_unit_length parameter and pass it to format_distance(), since
Blender's Z coordinates are already in project units.

- Add in_unit_length parameter to BaseDecorator.format_value()
- Set in_unit_length=True in PlanLevelDecorator.draw_labels()
- Set in_unit_length=True in SectionLevelDecorator.draw_labels()
2025-11-22 14:39:13 -06:00
Ryan Schultz b7b6e4aadf Consolidate format_distance functions and fix imperial unit formatting
Replaced duplicate format_distance in unit.py with comprehensive MeasureIt-ARCH version from helper.py. Fixed critical floating point errors by changing inPerFoot from 11.9999 to 12.0, eliminating spurious fractions on whole numbers. Implemented auto-precision detection to simplify fractions (64/256 → 1/4) while preserving precise values like 3/256 when needed. Enhanced imperial parsing to support flexible input formats (optional symbols, mixed fractions, leading decimals) and fixed suppress_zero_inches functionality in dimension annotations.
2025-11-22 13:49:30 -06:00
falken10vdl 19b9a55404 Add posibility to edit classification system name in menu after invoking enable_editing_classification_reference 2025-11-22 20:12:49 +01:00
Gorgious 9c39ac0a48 You can now edit default parameters when generating a new parametric geometry for Door, Window, Railing, Roof and Stair types.
UI is in the addon preferences.
2025-11-22 18:12:50 +01:00
Gorgious a77f1b9fd1 Fix bug where one could setup negative lengths in the parametric door properties that whould throw an error when validating the geometry 2025-11-22 15:28:51 +01:00
Gorgious 63921e3fd8 Improve formatting for imperial units for the elevation of spatial elements elevation in the spatial decomposition panel (Re #7373) 2025-11-22 13:32:19 +01:00
falken10vdl ffc538da87 cleanup consistent calling 2025-11-22 09:56:00 +01:00
falken10vdl c3c63370ba sort rows black formatting 2025-11-22 09:56:00 +01:00
falken10vdl a4743b5e04 refactor using row in uy and util.classification.get_classifiation(reference) 2025-11-22 09:56:00 +01:00
falken10vdl 1cdd44996b Add classification system to the Object Information, Clasifiction References Subpanel 2025-11-22 09:56:00 +01:00
Massimo Fabbro 27d0b04db5 black 2025-11-22 09:02:53 +01:00
Massimo Fabbro 87283874a1 Add simple examples for ifc5d import from csv 2025-11-22 09:02:53 +01:00
Gorgious 584d37de50 Fix #6048 (and #7373 ?) Adding a distance with a unit for an IfcSpatialElement in the Spatial Decomposition list doesn't save value
Support imperial units
Spatial element empty is moved in the 3d viewport accordingly
2025-11-22 01:16:39 +01:00
Gorgious ca2058d56b Fix #4974 - remap parent relationships when duplicating objects 2025-11-22 00:30:01 +01:00
Gorgious 481676e51b fix - recalculate normals for wall-mounted handrail railings
Fixes inverted normals on SweptDiskSolid end caps by recalculating
face normals after IFC geometry is loaded into Blender.

Fixes #6483
2025-11-22 00:04:57 +01:00
Gorgious56 fe502577c9 Merge pull request #7400 from IfcOpenShell/0.8.0
fix - apply object scale before using it to void an element #6378
2025-11-21 23:56:10 +01:00
Gorgious 65e8ca17d2 fix - apply object scale before using it to void an element #6378 2025-11-21 23:54:20 +01:00
Gorgious56 6bd7f02208 Merge pull request #7399 from IfcOpenShell/main
fix - handle float64 checksums from files saved in previous Blender v…
2025-11-21 23:28:28 +01:00
Gorgious 452d0f6023 fix - handle float64 checksums from files saved in previous Blender versions
Files saved in previous Blender versions stored position checksums as float64
(24 bytes for location, 72 bytes for rotation), but the current code only
expected float32 format. This caused a shape mismatch error (6,) vs (3,) when
comparing checksums during save operations.

Added byte size detection in is_moved() methods to automatically handle both
old float64 and new float32 checksum formats, ensuring backward compatibility
with files from previous versions.

Fixes ValueError when saving IFC files loaded from older Blender versions.
2025-11-21 23:23:57 +01:00
Andrej730 07005a9d3b build-deps - switch to freetype github archives for stability #7390 2025-11-22 01:02:41 +05:00
Andrej730 450ce689ba build-deps - fix set resetting ERRORLEVEL in commands logged in 52d3bae54 #7390 2025-11-22 01:02:41 +05:00
Andrej730 7c210721e6 build-deps - add pushd/popd for consistency 2025-11-22 01:02:16 +05:00
Andrej730 7e48d712a2 cmake - fix error building with GLTF_SUPPORT=OFF (487a4f3, #7390) 2025-11-21 18:28:06 +05:00
Andrej730 9eedbc6f72 FindOpenCASCADE - fix linking issue with non-configs #7390
Unexpected consequence of #7365 - previously `OPENCASCADE_LIBRARIES` supposed to be a list of libraries filepaths, but after refactor `OpenCASCADE_LIBRARIES` end up being both list of library names and list of filepaths.
And since link directories for the names was not provided, it failed to find the libraries to link.
If using OpenCASCADEconfig it wouldn't fail as cmake would evaluate library names as imported target names.

To fix it and simplify it even further, in case of manually provided paths, it now creates `OpenCASCADE_INTERFACE` target and stores it in `OpenCASCADE_LIBRARIES` - target will automatically have all the includes, library names and library dirs.
2025-11-21 18:28:06 +05:00
Andrej730 68b021b0e6 build-deps - fix hdf5 warnings in logs (similar to 890665b77) 2025-11-21 18:28:06 +05:00
Andrej730 a559b72e18 build-deps - fix boost project cache reset targeting wrong path
Noticed by another "The system cannot find the path specified." in logs 😅
2025-11-21 18:28:06 +05:00
Andrej730 32496c40b3 build-deps - fix missing popd for mpfr dir leading to issues installing hdf5 #7390 2025-11-21 18:28:05 +05:00
Andrej730 1b249b1013 build-deps - fix very very old bug with GitCloneAndCheckoutRevision not always checking out revision
Since this if-block happens in parentheses, then all `%VAR%` are expanded at the start and then `%ERRORLEVEL%` and `%RET%` values have no relation to the actual result of `git clone`. So if user were (un)lucky, then `%RET%` would be not yet set to "0" (by the previous function call), then it would skip checking out revision.

`GitCloneOrPullRepository` had similar issue, but it was never used anywhere.
2025-11-21 18:28:05 +05:00
Andrej730 d3fcf39c76 Windows build scripts - ECHO_ON env variable for debugging 2025-11-21 18:28:05 +05:00
Andrej730 692ef5ecea cmake - fix error finding Eigen::Eigen target #7390
`EIgen::Eigen` target used in #7340 for linking exists only if there's a cmake config, while there are cases when there's just include directory. Added same name interface target to mimic config.
2025-11-20 20:12:48 +05:00
Andrej730 f56a97512a Rename IFC_GEOM_EXPORTS replaced in #7340 2025-11-20 20:12:48 +05:00
Andrej730 4f5ebef5da cmake - use HDF5_INCLUDE_DIR instead HDF5_INCLUDE_DIRS
As this is the variable defined by `FindHDF5`.
2025-11-20 20:12:48 +05:00
Andrej730 57a724e80f FindCGAL.cmake 2025-11-20 20:12:48 +05:00
Andrej730 1b8652a789 FindOpenCOLLADA.cmake 2025-11-20 20:12:48 +05:00
Andrej730 c1aa702896 FindHDF5 - describe used variables, initialize from env 2025-11-20 20:12:47 +05:00
Andrej730 5b43d2b75e HDF5Config -> FindHDF5
See the reasoning in https://github.com/IfcOpenShell/IfcOpenShell/pull/7193#issuecomment-3552830928
2025-11-20 20:12:47 +05:00
Andrej730 3330e79556 FindLibXml2 - initialize from env variables 2025-11-20 20:12:47 +05:00
Andrej730 88d09c83b7 FindLibXml2 - add_debug_variants 2025-11-20 20:12:47 +05:00
Andrej730 5e6b96ee99 cmake - remove wasm_sysroot as superseded by e833d0c 2025-11-20 20:12:47 +05:00
Thomas Krijnen bd07078def Remove spurious cd 2025-11-20 16:12:26 +01:00
Andrej730 1d01d1f184 build-all.py - postpone 4396126 2025-11-20 16:58:04 +05:00
Dion Moult 3cee0811d4 Update VERSION 2025-11-20 22:06:24 +11:00
Dion Moult a46228a57e Hotfix to generate IOS docs until we properly package bsdd 2025-11-20 21:16:57 +11:00
Andrej730 158fe92644 HDF5Config.cmake - use CMAKE_SOURCE_DIR instead PROJECT_SOURCE_DIR
It doesn't really matter in this case - it matters really only for FindLibXml2, because `PROJECT_SOURCE_DIR` point to svgfill, when it's config executed, instead of `CMAKE_SOURCE_DIR` - so `CMAKE_SOURCE_DIR ` is never removed from the path, leading to cyclic calls. Adding for HDF5 too just for consistency.
2025-11-19 19:41:30 +05:00
Andrej730 12166ddbba HDF5Config.cmake - restore patched module path at the end 2025-11-19 19:41:30 +05:00
Andrej730 36a0c22217 FindUSD.cmake (untested) 2025-11-19 19:41:30 +05:00
Andrej730 59cc9d4a23 FindLibXml2.cmake 2025-11-19 19:41:29 +05:00
Andrej730 f3d918f76c FindOpenCASCADE - describe used variables at the top, move env vars 2025-11-19 19:41:29 +05:00
Esteban Dugueperoux 613015e37e cmake: Externalize OpenCascade config (#7365)
Co-authored-by: Andrej <azhilenkov@gmail.com>
2025-11-19 18:02:07 +05:00
Esteban DUGUEPEROUX be0eea1bed cmake: Have a dedicated CMakeLists.txt for IfcConvert & co 2025-11-19 13:28:45 +01:00
dependabot[bot] 37bbc0b693 Bump actions/upload-artifact from 4 to 5
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:11:39 +01:00
dependabot[bot] 30093499fa Bump aws-actions/configure-aws-credentials from 4 to 5
Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 4 to 5.
- [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases)
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/v4...v5)

---
updated-dependencies:
- dependency-name: aws-actions/configure-aws-credentials
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:08:39 +01:00
dependabot[bot] 8e95bf73f1 Bump actions/upload-pages-artifact from 3 to 4
Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:08:09 +01:00
dependabot[bot] 05f7aac853 Bump docker/setup-buildx-action from 1 to 3
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:08:02 +01:00
dependabot[bot] b135dd6994 Bump actions/setup-python from 2 to 6
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 2 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v2...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:07:34 +01:00
dependabot[bot] a5e7d7c4cc Bump docker/login-action from 1 to 3
Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:07:26 +01:00
dependabot[bot] 9680f6b29c Bump docker/build-push-action from 2 to 6
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 6.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2...v6)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:05:03 +01:00
dependabot[bot] bc8dd3a3ab Bump mamba-org/setup-micromamba from 1 to 2
Bumps [mamba-org/setup-micromamba](https://github.com/mamba-org/setup-micromamba) from 1 to 2.
- [Release notes](https://github.com/mamba-org/setup-micromamba/releases)
- [Commits](https://github.com/mamba-org/setup-micromamba/compare/v1...v2)

---
updated-dependencies:
- dependency-name: mamba-org/setup-micromamba
  dependency-version: '2'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:04:39 +01:00
dependabot[bot] 9caf47b41f Bump docker/setup-qemu-action from 1 to 3
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 1 to 3.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v1...v3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:04:14 +01:00
dependabot[bot] 5e1787b146 Bump actions/download-artifact from 4.1.7 to 6.0.0
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.1.7 to 6.0.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4.1.7...v6.0.0)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:03:52 +01:00
dependabot[bot] 07147f4b7f Bump actions/checkout from 2 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 13:02:55 +01:00
dependabot[bot] 4dfe15bd88 Merge pull request #7270 from IfcOpenShell/dependabot/npm_and_yarn/src/ifctester/webapp/vite-6.4.1 2025-11-19 17:00:32 +05:00
Andrej730 5896630630 Add dependabot to track github actions versions 2025-11-19 16:58:22 +05:00
Andrej730 48b1493c5c build_win - use official ccache-action as PR got merged 2025-11-19 16:58:22 +05:00
Andrej730 ee75ea1182 black . 2025-11-19 16:58:22 +05:00
Esteban DUGUEPEROUX 1876a788a9 cmake: Externalize cmake config for Serializers 2025-11-19 11:24:15 +01:00
Esteban DUGUEPEROUX 9d28628157 cmake: Have a dedicated CMakeLists.txt for kernels 2025-11-19 11:23:04 +01:00
Esteban DUGUEPEROUX 9b257b0a10 Remove support of cityjson for ifcconvert binary 2025-11-19 11:19:58 +01:00
Thomas Krijnen db7900027e fix stub 2025-11-19 10:43:52 +01:00
Andrej730 2af7470950 run-cmake.bat - use boost installation path
Now there's no need for BOOST_ROOT and BOOST_LIBRARYDIR anymore.
2025-11-18 19:59:34 +05:00
Andrej730 e1c3c44fb3 IfcGeomServer cmake - remove headers from source files 2025-11-18 19:59:34 +05:00
Andrej730 e7c422469a IfcGeomServer cmake - remove not required chrono component #7337
Noticed Linux build failing now
2025-11-18 19:59:34 +05:00
Andrej730 52d3bae543 build-deps - add some logs to make errors easier to narrow donw 2025-11-18 19:59:34 +05:00
Andrej730 b130925c5f build-deps - fix missing cd before trying to extract boost archive
Not sure when it was introduced, but it was still using previous dependency path and leading to confusing error:
```
Boost 1.86.0 already downloaded. Skipping.
Extracting Boost 1.86.0 into L:\Projects\Github\IfcOpenShell\_deps from boost-1.86.0-b2-nodocs.7z
An error occurred
```
2025-11-18 19:59:34 +05:00
Andrej730 890665b77b build-deps - fix reappearing "The system cannot find the file specified." error in logs
because of the failing rename
2025-11-18 19:59:34 +05:00
Andrej730 99c95bc92d black . 2025-11-18 19:59:34 +05:00
Bruno Perdigão 8647f9c357 Polyline tool - avoids rounding angle when distance is too big. 2025-11-17 20:38:34 -03:00
Bruno Perdigão 300855276f See #7046. Add Numpy version of a few Blender fuctions to improve precision. The snapping system was having a poor precision with large numbers. Some functions were rewritten to use Numpy instead of Mathutils. This seems to solve the issue, but further adjustments might be necessary
Note: rv3d.perspective_matrix should be avoided in these context. Use a numpy version of np.array(window_matrix) @ np.array(view_matrix). See https://github.com/IfcOpenShell/IfcOpenShell/issues/7046

Note2: region_2d_to_origin_3d_np clamp should be used for the snap to work in orthographic view.
2025-11-17 20:38:34 -03:00
Bruno Perdigão 1a8831012b Fix snapping for blender curve objects 2025-11-17 20:38:34 -03:00
Thomas Krijnen 1bc4e82b7d reorder 2025-11-17 19:15:20 +01:00
Thomas Krijnen fc197c1d32 anon namespace 2025-11-17 19:09:31 +01:00
Thomas Krijnen 33cfa9e2b1 function3 2025-11-17 18:57:22 +01:00
Thomas Krijnen 9e9d664511 .glb --separate-z-up-node option 2025-11-17 18:26:00 +01:00
Ryan Schultz 1b9acadd81 Disable text decorations when not in camera view 2025-11-17 09:01:19 -06:00
Andrej730 c5f6d47c44 build-deps - include swig version to dependency name 2025-11-17 19:29:07 +05:00
Andrej730 d19b6d72ef build-all.py - include swig-version to dependency name
Otherwise it doesn't update and keeps using older cached version.
2025-11-17 19:28:10 +05:00
Andrej730 919231b096 build-all.py - remove outdated comment 2025-11-17 19:28:10 +05:00
Andrej730 cead5cc75d ci - add swig build to fix failing stub test
Older swig versions have some redundant symbols, using the one we use in other build scripts.
2025-11-17 19:28:09 +05:00
Andrej730 9396cb226f ci - add opencollada to fix failing stub test 2025-11-17 19:28:09 +05:00
Andrej730 56a63cab6e build-deps - sync swig version with build-all.py 2025-11-17 19:28:09 +05:00
Andrej730 449d13bd5f Fix stub missing construct_iterator 2025-11-17 19:26:14 +05:00
Thomas Krijnen 487a4f345d Creoox json serializer 2025-11-17 14:06:39 +01:00
Thomas Krijnen d6daa64c48 Support --element-hierarchy in .glb output 2025-11-17 14:05:59 +01:00
Thomas Krijnen bf0aa247a0 IfcConvert: only conditionally bypass properties 2025-11-17 13:50:50 +01:00
Andrej730 a7c8c908fe Fix left out invalid mesh data blocks and fix failing geom core test (after fcee54c) 2025-11-17 16:30:28 +05:00
Andrej730 64686dde5c Remove redundant :type from doc-strings
Args types already covered by annotations
2025-11-17 16:30:27 +05:00
Andrej730 29ab446f8c use common rst syntax in doc-strings 2025-11-17 16:30:27 +05:00
Andrej730 51e2e7cd82 Fix boundary bim test after 6c31d43 2025-11-17 16:30:27 +05:00
Andrej730 e879dac4bd Remove obsolete tests after e662308 2025-11-17 16:30:26 +05:00
Andrej730 145c629d92 Fix core geometry tests after e662308 c4d54f7 2025-11-17 16:30:26 +05:00
Andrej730 3fe9279bb4 pyproject - fix typo 2025-11-17 16:30:26 +05:00
Andrej730 428d88f01c Fix missing bsdd pydantic dependency in #7145 2025-11-17 16:30:26 +05:00
Andrej730 3986d4e85b Remove unused tool.sequence methods 2025-11-17 16:30:26 +05:00
Andrej730 02d35b6047 Fix missing ifc_file definition in 471bd34 2025-11-17 16:30:25 +05:00
Andrej730 3cc5931eae Fix missing imports and don't use api.run 2025-11-17 16:30:25 +05:00
Andrej730 db5ec77730 black format src/pyodide 2025-11-17 16:30:25 +05:00
Andrej730 bec46562f5 gitignore running_pid.json 2025-11-17 16:30:25 +05:00
Andrej730 1508c4ab05 test_feature - restore EPset_Drawing.ifc 2025-11-17 16:30:24 +05:00
Andrej730 99ae768ddf test_feature - clean up .ifc.cache. files after test was executed 2025-11-17 16:30:24 +05:00
Andrej730 fb902a04f5 test_feature - use common prompts for loading/saving temp projects 2025-11-17 16:30:24 +05:00
Andrej730 e46a99870b typing 2025-11-17 16:30:24 +05:00
Andrej 3fbba405d4 Merge pull request #7362 from sboddy/fix_7348_ci_test_normalize_path 2025-11-17 07:12:11 +01:00
Andrej730 989415f423 setup_pytest - use check_call and less repetition 2025-11-17 11:09:15 +05:00
Andrej730 7a3c7704b5 preferences descriptions - document autoreplaced strings in commands 2025-11-17 11:09:14 +05:00
Andrej730 5d7407e2b9 preferences descriptions - adjust line length 2025-11-17 11:09:08 +05:00
Andrej730 4a5f1b01a1 black . 2025-11-17 11:09:08 +05:00
Ryan Schultz a038fa62ba Use spacebar to toggle on/off direct profile edit mode. Works on IfcExtrudedSolids, LAYER2 objects(slabs), and axis-based geometry. 2025-11-16 15:00:10 -06:00
Ryan Schultz bb1127d815 prompt for Blender version 2025-11-15 19:10:15 -06:00
Ryan Schultz 40cf322fb4 fall back to a Windows system font if the font isn’t found in addon folder 2025-11-15 09:58:37 -06:00
Ryan Schultz f32ccec154 Fix #7364: If you change the width/height of a drawing camera it doesn't scale the text decoration. 2025-11-15 08:25:27 -06:00
Ryan Schultz dc0b73f46f Ensure annotation is in front of a RCP camera. 2025-11-15 08:06:06 -06:00
Ryan Schultz 36cb625c4e Fix #7353: Fix section annotations squashed in section views
Add target view detection to generate_section_reference_points() to create
appropriate geometry for each view type. Plan views get horizontal lines
(clip_segment), section/elevation views get vertical lines (elevate_segment).
2025-11-15 07:52:07 -06:00
Stephen Boddy 89314733ff blackwq 2025-11-14 15:47:50 +00:00
Stephen Boddy d4e945222d Fix #7348: test_normalize_path failure on CI/Linux. 2025-11-14 15:41:13 +00:00
Andrej730 fe80620a5d Add basic parametric objects tests #7355 2025-11-13 19:13:28 +05:00
Andrej730 166ddb4799 Fix parametric stair editing after 3617d11 #7355 2025-11-13 19:13:28 +05:00
Andrej730 8e2a310f92 stair generation - remove debug prints (b46136e) 2025-11-13 19:13:28 +05:00
Andrej730 339a0606c0 Fix failing product assignment test after 5a511ee
Moved code from `core`, added a warning so we could possibly narrow down #4014 in the future.
2025-11-13 19:13:27 +05:00
Andrej730 b6f1119eaa Fix failing product assignment test after 555621c 2025-11-13 19:13:27 +05:00
Andrej730 139a024d5f dev_environment.py - bump Blender version to 5.0 2025-11-13 19:13:27 +05:00
Andrej730 9491096485 black . 2025-11-13 19:13:27 +05:00
Thomas Krijnen a34e42a519 Handle infra sweeps of open loops #7338 2025-11-13 12:43:41 +01:00
Esteban DUGUEPEROUX 6a7ecf7f58 cmake: Have a dedicated CMakeLists.txt for IfcGeomServer 2025-11-13 10:14:59 +01:00
Richard Brice 96da78c670 Updates IfcSectionedSurface so it works with taxonomy::function_item 2025-11-12 11:37:07 -08:00
Andrej730 9adc8e484a Bonsai - bump ifcopenshell build #7330 2025-11-12 22:34:42 +05:00
kaplus e8eb5e4d0a Add continue statement to skip duplicate calculations
Skip general path to avoid duplicate calculations.
2025-11-12 13:14:38 +01:00
Andrej730 080222ffe6 black . 2025-11-12 12:56:35 +05:00
Ryan Schultz abef655482 Fix #6938 - Have parent facet select the parent aggregate as well. 2025-11-11 20:19:38 -06:00
Ryan Schultz 85b3f831dc copy query for aggregates into clipboard, to align with common UI pattern. 2025-11-11 20:17:37 -06:00
falken10vdl d8ece32d62 Add markdown-it-py and mdurl dependencies for drawing module annotations (#7346) 2025-11-11 16:33:19 -06:00
Ryan Schultz 0df7117d37 Sort annotations to ensure FILLAREA types are drawn first (at the bottom) 2025-11-11 14:26:55 -06:00
sboddy 91d67e6371 Improve Merge/Mirror error messages to reduce confusion. (#6911) 2025-11-11 13:57:52 -06:00
Ryan Schultz 87d1b0637a Close #7294: Add target-view and scale classes to SVG parent group from IFC data
Reads from EPset_Drawing.TargetView and EPset_Drawing.Scale to add
CSS classes to the linework parent group for view-specific styling.
2025-11-11 12:47:58 -06:00
Esteban Dugueperoux b8adddc648 fix test_number_formatting tests and add cases (#7332) 2025-11-11 11:25:00 -06:00
Andrej730 25d3edc537 Avoid producing test artifacts in src/bonsai 2025-11-11 19:56:57 +05:00
Andrej730 7f8cb80281 Fix TestDrawingStyles after 44cc127 2025-11-11 19:56:57 +05:00
Andrej730 a2ce2ea23a Fix TestDisableEditingText crash after 679fa6d 2025-11-11 19:56:56 +05:00
Andrej730 7f7aef0e6e Fix duplicate drawing core test (8ffa6fc) 2025-11-11 19:56:56 +05:00
Andrej730 821b5380ea Fix copy to container test (ddbe627) 2025-11-11 19:56:56 +05:00
Andrej730 e8bcbc83a4 Update operator.py 2025-11-11 19:56:56 +05:00
Andrej730 091af3c1c9 Add todo for unused expression (17d6b8a) 2025-11-11 19:56:55 +05:00
Andrej730 4cc50301dd Remove unused variable (17d6b8a) 2025-11-11 19:56:55 +05:00
Andrej730 f643a1615e Fix failing aggregate duplication test after 17d6b8a 2025-11-11 19:56:55 +05:00
Andrej730 71e78c67f8 Add visibility and lock steps to geometry.feature
Added steps to set 'is_visible' to TRUE and 'is_locked' to FALSE in the 'Spatial Decomposition' panel for the 'Override paste buffer - with active IFC data' scenario. This ensures the test covers visibility and lock state handling for IFC objects.
2025-11-11 19:56:55 +05:00
Andrej730 e7c4a19d9e bim.override_object_duplicate_move - sync poll with object.duplicate_move 2025-11-11 19:56:54 +05:00
Andrej730 6c31d43e72 Fix feature tests after a11f81f 2025-11-11 19:56:54 +05:00
Andrej730 83b56d591b Fix error activating drawing style
Example error:
```
TypeError: bpy_struct: item.attr = val: enum "Default" not found in ('city.exr', 'courtyard.exr', 'forest.exr', 'interior.exr', 'night.exr', 'studio.exr', 'sunrise.exr', 'sunset.exr')
```

There was a bug in shading_styles.json where we were using `Default` for `studio_light`, which is only available for `SOLID` shading type. Changed value to `forest.exr`, added code to handle old bugged value since users already copied and possibly modified shading_styles.json
2025-11-11 19:56:54 +05:00
Andrej730 e5b26067ab typing 2025-11-11 19:56:54 +05:00
Andrej730 a4fae94be8 test_feature - add separate non-debug option to save ifc project
Also clean up temp folder before save (met issues when tests were using not updated shading_styles.json)
2025-11-11 19:56:53 +05:00
Andrej730 af4851f03a Fixing bsdd feature tests (a929ab0) 2025-11-10 18:58:02 +05:00
Andrej730 155d4c44ae PanelSpy - fix error handling methods that have a return value
E.g. `ReferenceUI` has `self.get_object_name(context)` - since value wasn't returned, it was returning `None`, breaking the tests.
2025-11-10 18:58:02 +05:00
Andrej730 48119baf97 test_feature - non-background mode for debugging 2025-11-10 18:58:02 +05:00
Andrej730 dd1989aebb test_feature - use pformat to print props for readibility 2025-11-10 18:58:01 +05:00
Andrej730 0806430700 TemplateListSpy - add repr 2025-11-10 18:58:01 +05:00
Andrej730 2d97f6638b test_feature - add debugpy option 2025-11-10 18:58:01 +05:00
Andrej730 b10e5ad4d6 PanelSpy - target not all callables
Because sometimes we have `Data` classes as panel attributes and they're also callable.
2025-11-10 18:58:01 +05:00
Andrej730 24f991ceb1 Fix feature tests after a11f81f 2025-11-10 18:58:01 +05:00
Andrej730 ac11baa0c4 Fix the_object_name_does_not_exist not checking for errors
`assert True` was introduced in 1c1035e and original implementation with `assert False` was removed in b0d8101
2025-11-10 18:58:01 +05:00
Andrej730 1609a77b77 typing for PanelSpy related options 2025-11-10 18:58:00 +05:00
Andrej730 dd2f091a52 object.delete and outliner.delete overrides to reuse original poll methods for consistency 2025-11-10 18:58:00 +05:00
Andrej730 a7bf0e7d5e Fix remove drawing feature test (f11d79f) 2025-11-10 18:58:00 +05:00
Andrej730 19bdd3e622 i_set_the_prop_property_to_value - don't fail silently on incorrect bool values 2025-11-10 18:58:00 +05:00
Andrej730 e1bf891ec6 PanelSpy - also support draw_header for panels 2025-11-10 18:58:00 +05:00
Andrej730 4009834b97 PanelSpy - rename panel attr to blender_panel to avoid conflicts with panel method
Also added support for `panel` method.
2025-11-10 18:57:59 +05:00
Andrej730 77f5e1fbad PanelSpy - add typing 2025-11-10 18:57:59 +05:00
Andrej730 c4eb77d544 Blender 5.0 - update shadint_styles eevee name 2025-11-10 18:57:59 +05:00
Andrej730 8a4ea43239 Blender 5.0 - fix error activating drawing styles
Some props were removed in Blender 5.0
2025-11-10 18:57:59 +05:00
Thomas Krijnen f056e22f60 ruff 2025-11-10 11:59:10 +01:00
Thomas Krijnen 05e81040ce black 2025-11-10 11:53:33 +01:00
Thomas Krijnen 8d8133e780 submodule 2025-11-10 11:45:05 +01:00
Thomas Krijnen dceb35782e Add platform tag for linuxarm64 in Makefile #7325 2025-11-10 11:17:24 +01:00
Thomas Krijnen 2c5f0c6cf2 Add Linux ARM 64bit to CI workflow #7325 2025-11-10 11:16:27 +01:00
Thomas Krijnen abd667684d Supply CGAL_WITH_GMPXX to ifcopenshell configure #7330 2025-11-10 10:48:24 +01:00
Thomas Krijnen 31b5f88497 Rename WITH_GMPXX to CGAL_WITH_GMPXX in build script #7330 2025-11-10 10:33:48 +01:00
Thomas Krijnen 77a7026d33 Disable GMPXX in CGAL build #733 2025-11-10 10:15:14 +01:00
Thomas Krijnen 9c5f3f9754 Disable GMPXX in CGAL build #7330 2025-11-10 09:51:38 +01:00
Esteban DUGUEPEROUX 5d56025014 cmake: Separate ifcparse build in its own CMakeLists.txt file 2025-11-10 09:42:51 +01:00
Bruno Postle ad62c75f4f ifcclash ifccsv ifcdiff ifcpatch: README.md stubs
The pyproject.toml files were referencing these missing files
2025-11-09 20:52:12 +00:00
Ryan Schultz 7a5bd03216 Close #7220: Duplicate multiple selected Linked Aggregates at one time 2025-11-09 13:45:09 -06:00
Ryan Schultz 593e0e28a9 fix #4189: local_view turns off/on text decorations, as well as cut decorator. 2025-11-08 16:35:46 -06:00
Massimo Fabbro ed2b2de79a Add profiler in ifcopenshell util and ifc5d quantify function time
Useful for quantify function optimization
2025-11-08 20:00:35 +01:00
Ryan Schultz 5a511eecc1 Fix #4014: Unassign annotation from all products before reassignment
The edit_assigned_product() function now removes the annotation from all
existing IfcRelAssignsToProduct relationships instead of just one, preventing
annotations from being incorrectly assigned to multiple products simultaneously.

This fixes issues where leader lines wouldn't update correctly because the
annotation retained old product assignments.
2025-11-08 12:46:33 -06:00
Bruno Postle 83e0fa1287 Bump python bindings maximum python version
Python 3.14 is now a thing and the build seems ok
2025-11-08 17:38:56 +00:00
Ryan Schultz a2dbdbf8cc Fix #7274: Add unique CSS class suffix to all selectors in sheet drawings
Previously, when multiple CSS selectors were comma-separated in a rule,
only the last selector received the unique drawing ID suffix. This caused
style conflicts when multiple drawings were placed on the same sheet.

Now all selectors in comma-separated lists receive the unique suffix,
ensuring proper style isolation between drawings.

Example:
Before: .cut.Status-DEMOLISH, .cut.Option-D.d2156 { ... }
After:  .cut.Status-DEMOLISH.d2156, .cut.Option-D.d2156 { ... }
2025-11-08 10:41:43 -06:00
Ryan Schultz 3d68bbc0ca Fix #7287: to correctly position IfcAnnotation on RCP's. 2025-11-08 09:11:38 -06:00
Thomas Krijnen 40f9f261ae submodule 2025-11-07 16:22:51 +01:00
Andrej730 c08cc58904 Blender 5.0 - fix opening Web UI
In Blender 5.0 some theme attributes were removed and moved to other places and code broke.

In the commit I've also switched the code to less dynamic approach, so static type checker could caught potential errors.
2025-11-07 19:13:44 +05:00
Andrej730 ebdb122a22 Fix error removing systems 6469f79 2025-11-07 19:13:44 +05:00
Andrej730 5de2752685 light ui - use calendar for simplicity 2025-11-07 19:13:44 +05:00
Andrej730 d2245a95c7 Blender 5.0 - fix issues related to EEVEE renamed again
Ahh, it was a mistake warning about non-`_NEXT` values previously - didn't realized that this name was temporary for Blender.
2025-11-07 19:13:43 +05:00
Andrej730 47075e95bd Blender 5.0 - fix error enabling Rendered mode in Solar Analysis 2025-11-07 19:13:43 +05:00
Thomas Krijnen 9d4c980e02 black 2025-11-07 11:50:33 +01:00
Thomas Krijnen 53c1a1537d ruff 2025-11-07 11:50:18 +01:00
Thomas Krijnen 7db2f66685 WKT footprint massaging 2025-11-07 10:59:33 +01:00
Thomas Krijnen 6dd34b1fa4 Fix failing test by bumping commit ref #7193 2025-11-07 10:59:10 +01:00
Ryan Schultz 862713cda4 related to #7298 - skip material, as well. 2025-11-06 20:56:56 -06:00
Ryan Schultz 06c1668e42 Closes #7298 - skips count on csv import. 2025-11-06 13:20:55 -06:00
Thomas Krijnen 5f9f0f26eb submodule 2025-11-06 19:06:51 +01:00
Andrej730 8db22cdaf7 test_model - fix incorrect stair profile values in generation tests 2025-11-06 18:46:28 +05:00
Andrej730 3bed9262e5 Fix miscalculated stair lengths in some cases (f52aafd)
`get_active_stair_calculated_params` wasn't updated when zero tread runs support was added and it's still was relying on a convention that `0.0` custom tread run = no custom tread run.
2025-11-06 18:46:06 +05:00
Andrej730 0c171a457b stair generation - fix bug with extended top nib with zero first tread run
`s0 = V_(custom_first_last_tread_run[0] or tread_run, tread_rise) + td_vector` was assuming `0` means "no custom first tread run", not it means actually "zero first tread run", so could should be adjusted

before - https://files.catbox.moe/5ovqnh.mp4
after - https://files.catbox.moe/srorl2.mp4
2025-11-06 18:44:49 +05:00
Andrej730 b5e8dfd863 generate_stair_2d_profile - add typing 2025-11-06 18:44:49 +05:00
Thomas Krijnen c9df87fc25 submodule 2025-11-06 10:48:12 +01:00
Esteban DUGUEPEROUX 30925a4b3c fix format 2025-11-05 19:26:22 +01:00
Esteban DUGUEPEROUX ccf0efffce cmake: Simplify hdf5 linkage 2025-11-05 19:26:22 +01:00
Andrej730 169c4392a9 test_model - simplify stair generation kwargs 2025-11-05 19:30:36 +05:00
Andrej730 e543785959 Fix breaking tests for stair length calculations with custom zero tread run (f52aafd)
In both cases it was providing arguments `(0,0)`, but was assuming only one tread will be zeroed.
2025-11-05 19:30:36 +05:00
Andrej730 3617d119cb Fix breaking old stair generation tests after f52aafd
Before f52aafd default `(0,0)` meant that there are no custom tread runs, but after the change it actually means that runs for first and last treads are 0. So default value should be adjusted.
Added explicit `None` value for clarity.
2025-11-05 19:30:36 +05:00
Andrej730 5d1f28c3cb validate_object_selection - don't invalidate active objects when they're not in view layer
Since it's not illegal in Blender and can be helpful - e.g. when you were assigning class to ifc space, you would lose selection completely and would need to reselect object to continue working on it.
2025-11-05 19:19:49 +05:00
Andrej730 6f04eb12d0 black . 2025-11-05 19:18:11 +05:00
Ryan Schultz b46136e9f8 For stairs, Lock total length now takes first and last tread widths into account as well. 2025-11-05 06:55:03 -06:00
Andrej730 c3fe2d0ee3 build_win - revert schema versions limit
Committed by accident when debugging 🥲
2025-11-05 14:05:00 +05:00
Andrej730 aeed371888 ifcopenshell.file - add todo notes for temp workarounds, make workaround more explicit 2025-11-04 19:24:22 +05:00
Andrej730 a50c8869a5 bonsai - fix ifcsqlite import (546a042) 2025-11-04 19:24:21 +05:00
Andrej730 04d1fe4052 sql, stream - more clear error message when accessing wrapped_data 2025-11-04 19:24:21 +05:00
Andrej730 4e1d0bcf22 Fix failing selecting products tests (3aa5ddb07)
After 3aa5ddb07 `select_products` adds to current selection, instead of resetting it.

So couple tests started to fail since they create new objects and `view_layer` is not yet updated (previously `bpy.ops.object.select_all(action="DESELECT")` was also implicitly updating view layer).
```
FAILED test/tool/test_spatial.py::TestSelectProducts::test_select_products - AssertionError: assert bpy.data.objects['Object'] in []
FAILED test/tool/test_system.py::TestSelectSystemProducts::test_run - AssertionError: assert bpy.data.objects['Object'] in []
```
2025-11-04 19:24:21 +05:00
Andrej730 d2126e5929 Blender 5.0 - avoid using deprecated use_nodes 2025-11-04 19:24:20 +05:00
Andrej730 3bdfbebc02 Blender 5.0 - accomodate new mathutils buffer protocol type
Long story short - since 5.0 `np.array(Vector())` is now producing `np.float32` instead of `np.float64`. So we have to provide `dtype` explicitly to support both <5.0 and >= 5.0.

See https://projects.blender.org/blender/blender/issues/149283
2025-11-03 19:32:59 +05:00
Andrej730 1a9bd1891e blender 5.0 - fix moved bl_ui_utils module (bonsai is now launchable in 5.0) 2025-11-03 18:33:34 +05:00
Andrej730 1599bc14b3 Fix core/test_system.py (5de96c9) 2025-11-03 18:33:34 +05:00
Andrej730 30b74ab09c blender 5.0 - ensure the latest module is used for type checking 2025-11-03 18:33:34 +05:00
Andrej730 24bee01f01 black . 2025-11-03 18:33:34 +05:00
Ryan Schultz 7329c485ea Fix quantify() regression where by_type queries and grouped iteration could apply QTOs to all entities in the model instead of the intended element subset. 2025-10-31 10:03:52 -05:00
Andrej730 9c93b12084 Blender 5.0 - fix bpy_restrict_state error
It's probably will be very popular bug, when someone would try to migrate to Blender 5.0 using old Bonsai.

Example traceback:

```
  File "Blender\5.0\extensions\.local\lib\python3.11\site-packages\bonsai\bim\prop.py", line 34, in <module>
    import bonsai.bim.schema
  File "Blender\5.0\extensions\.local\lib\python3.11\site-packages\bonsai\bim\schema.py", line 23, in <module>
    import bpy_restrict_state
ModuleNotFoundError: No module named 'bpy_restrict_state'
```
2025-10-31 18:50:53 +05:00
Andrej730 b97c7d39ad dev_environment.py - small error message tweak 2025-10-31 18:50:52 +05:00
Andrej730 fa0c1c5d2a dev_environment.py - fix typo 2025-10-31 18:50:52 +05:00
Andrej730 e4c49ce57b Fix missing Serializers target when building just IfcGeomServer
Noticed testing command from #7277. I believe Serializers it not actually needed to build IfcGeomServer.

Example error:
```
/usr/bin/ld: cannot find -lSerializers: No such file or directory
```
2025-10-31 18:50:52 +05:00
Andrej730 3ae77c68e8 build-all.py - add VERBOSE=1 for building executables 2025-10-31 18:50:52 +05:00
Andrej730 8b1cb8e7ae black . 2025-10-31 18:50:52 +05:00
Andrej730 ce0348518d cmake - note future cmake bug fixes 2025-10-31 18:50:52 +05:00
Andrej730 a660027b93 test_package - ensure wasm package is present for active build commit 2025-10-31 16:09:22 +05:00
Thomas Krijnen 44ef409335 Don't check for drawing semantics on qto or predefpset #7304 2025-10-31 09:56:54 +01:00
Ryan Schultz 089edff1db fix for #7296: handle openings without Blender representation in get_gross_top_area (#7297) 2025-10-30 20:40:06 -05:00
Thomas Krijnen bd5a1b5bda Account 2x3/4 differences in Shading/Rendering::Transparency() 2025-10-30 18:35:20 +01:00
Andrej730 ba3517f3aa build-all.py - switch to dynamic_lookup for macos builds
1) `-undefined,suppress` is deprecated, linker is sending warnings about it and it seems to be superseded by `dynamic_lookup`
2) `-flat_namespace` is not compatible with GMP when building for intel, for some reason and results in horrible errors during linking:

Example error:
```
ld: branch8 out of range 366651 in ___gmpn_add_nc
final section layout:
    __TEXT               addr=0x00000000, size=0x02d09000, fileOffset=0x00000000
        __text           addr=0x00001400, size=0x0264a5e4, fileOffset=0x00001400
        __stubs          addr=0x0264b9e4, size=0x0000423c, fileOffset=0x0264b9e4
        __stub_helper    addr=0x0264fc20, size=0x00006c58, fileOffset=0x0264fc20
        __gcc_except_tab addr=0x02656878, size=0x002efc04, fileOffset=0x02656878
        __const          addr=0x02946480, size=0x001cdc18, fileOffset=0x02946480
        __cstring        addr=0x02b140a0, size=0x0014324b, fileOffset=0x02b140a0
        __unwind_info    addr=0x02c572ec, size=0x0008d2d0, fileOffset=0x02c572ec
        __eh_frame       addr=0x02ce45c0, size=0x00024a30, fileOffset=0x02ce45c0
    __DATA_CONST         addr=0x02d09000, size=0x0022b000, fileOffset=0x02d09000
        __got            addr=0x02d09000, size=0x00001dc8, fileOffset=0x02d09000
        __mod_init_func  addr=0x02d0adc8, size=0x00000690, fileOffset=0x02d0adc8
        __const          addr=0x02d0b460, size=0x00227fd0, fileOffset=0x02d0b460
    __DATA               addr=0x02f34000, size=0x000c3000, fileOffset=0x02f34000
        __la_symbol_ptr  addr=0x02f34000, size=0x000056a0, fileOffset=0x02f34000
        __data           addr=0x02f396a0, size=0x0005f7b8, fileOffset=0x02f396a0
        __thread_vars    addr=0x02f98e58, size=0x000006d8, fileOffset=0x02f98e58
        __thread_ptrs    addr=0x02f99530, size=0x00000178, fileOffset=0x02f99530
        __thread_data    addr=0x02f996b0, size=0x000000d8, fileOffset=0x02f996b0
        __thread_bss     addr=0x02f99790, size=0x00018850, fileOffset=0x02f99790
        __bss            addr=0x02fb1fe0, size=0x0003b0c0, fileOffset=0x00000000
        __common         addr=0x02fed0a0, size=0x00009098, fileOffset=0x00000000
    __LINKEDIT           addr=0x02ff7000, size=0x0148e000, fileOffset=0x02fb2000
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```
2025-10-30 19:45:24 +05:00
Andrej730 7f144b7b95 build-all.py - remove unused wasm flags
`-Wl,-undefined,suppress` have no meaning in emscripten and they are just ignored. And emscripten is ignoring undefined symbols by default without any flags.
2025-10-30 19:45:24 +05:00
Andrej730 19ac0b6c38 build-all.py - add VERBOSE=1 to the wrapper make command 2025-10-30 19:45:24 +05:00
Andrej730 3562437293 build-all.py - fix missing mac cross compilation host args in gmp
I guess something has changed in gmp 6.3.0 and this issue become more apparent.

Example error:
```
tmp-cnd_sub_n.s:133:14: error: tmp-cnd_add_n.sbrackets expression not supported on this target:
130 stp x8, x9, [x1,#16]
             ^
:2tmp-cnd_sub_n.s: :error: 134invalid instruction mnemonic 'bic':
6 bic x7, x13, x0:
error:  invalid instruction mnemonic 'cset'^
~Lrt: cset x0, cc~

     ^~~tmp-cnd_add_n.s~:
131:2: error: invalid instruction mnemonic 'adcs'
 adcs x8, x10, x6
 ^~~~
tmp-cnd_add_n.s:132:2: error: invalid instruction mnemonic 'adcs'
 adcs x9, x11, x7
 ^~~~
tmp-cnd_add_n.s:133:14: error: brackets expression not supported on this target
 stp x8, x9, [x1,#16]
             ^
tmp-cnd_add_n.s:134:6: error: invalid instruction mnemonic 'cset'
Lrt: cset x0, cs
     ^~~~
```
2025-10-30 19:45:24 +05:00
Andrej730 e8ece71d22 black . 2025-10-30 19:45:24 +05:00
Ryan Schultz 3f2cad0490 Add suppress_zero_inches parameter to imperial_length formatting function 2025-10-28 22:24:40 -05:00
Andrej730 5ec974ff94 Exclude build-all.py from main ruff check 2025-10-28 18:20:43 +05:00
Andrej730 2c585b649a Fix RUFF037 (redundant quotes) 2025-10-28 18:20:14 +05:00
Andrej730 36c28f3953 Mention in docs wasm-wheels as the main wheels source for pyodide builds 2025-10-28 18:20:13 +05:00
Andrej730 d1763237d2 ifcopenshell docs make - add server target 2025-10-28 18:20:13 +05:00
Andrej730 e8544d78ee ci.yml - note on rtti in rocksdb 2025-10-28 17:17:20 +05:00
Andrej730 e715a9467d ci.yml - exclude PYTHON_LIBRARY as redundant 2025-10-28 17:17:20 +05:00
Andrej730 1f8c12a4c8 build_pyodide - test wasm wheel working 2025-10-28 17:17:20 +05:00
Andrej730 89a6eac535 build-all.py - access pyodide for necessary variables, simplify debug build env 2025-10-28 17:17:20 +05:00
Andrej730 d1ffb329c8 pyodide/setup.py - fix missing ifcopenshell subpackages 2025-10-28 17:17:20 +05:00
Andrej730 4396126a43 build-all.py - fix for upcoming pyodide changes (cmake INIT flags) 2025-10-28 17:17:20 +05:00
Andrej730 7448feed44 build-all.py - reinitialize wasm cxx flags from cflags to accomodate issue upstream 2025-10-28 17:17:19 +05:00
Andrej730 6bc4046b17 ifcwrap cmake - fix issue with debug build after migration to FindPython
In FindPython variable was renamed to Python_LIBRARY_DEBUG
2025-10-28 17:17:19 +05:00
Andrej730 1a83e52935 ifcwrap cmake - avoid using deprecated swig_link_libraries 2025-10-28 17:17:19 +05:00
Andrej730 f16d42ba14 ifcwrap cmake - use usual name for wrapper target 2025-10-28 17:17:19 +05:00
Andrej730 75135fe45d cache_dependencies.py - fix tarfile deprecation warnings in 3.12-3.13 2025-10-28 17:17:19 +05:00
Andrej730 de89ab31cf ifcwrap cmake - move DEBUG_POSTFIX logic to one place 2025-10-28 17:17:19 +05:00
Andrej730 c8a4f1bbd2 cmake - build without Python libraries on Unix 2025-10-28 17:17:19 +05:00
Andrej730 5be1858767 ifcwrap cmake - accomodate bug in cmake makefiles generator 2025-10-28 17:17:19 +05:00
Andrej730 ace1db739f build-all - use shutil.which instead of custom function
To make it more idiomatic and custom function also was misinterpreting folders with the same name as existing executables.
2025-10-28 17:17:19 +05:00
Andrej730 80504310b6 build_pyodide - use ccache 2025-10-28 17:17:19 +05:00
Andrej730 a4dae9650f build_rocky - switch to main branch ccache 2025-10-28 17:17:18 +05:00
Andrej730 c27a995480 build_pyodide - use prebuilt pyodide build env 2025-10-28 17:17:18 +05:00
Andrej730 5b4c54abd2 build-all.py - switch to gmp ftpmirror
previous url is inaccessible
2025-10-28 17:17:18 +05:00
Andrej730 57d0beedee build_pyodide - display logs in github action output 2025-10-28 17:17:18 +05:00
Andrej730 d0ba675b1b build_pyodide - upload build logs for debugging 2025-10-28 17:17:18 +05:00
Andrej730 f4f2fa9535 build_pyodide - pack cached dependencies 2025-10-28 17:17:18 +05:00
Andrej730 67707914b9 build_osx - remove setup-python
as it's already preinstalled on the image
2025-10-28 17:17:18 +05:00
Andrej730 12766d61d4 build-all.py - print BUILD_DIR 2025-10-28 17:17:18 +05:00
Andrej730 34374cba41 build_pyodide - no need to adjust version
since it's now inferred automatically
2025-10-28 17:17:18 +05:00
Andrej730 f8bb04eae3 build-all.py - accomodate pyodide build system automatically
as it's the main way to build the wasm package
2025-10-28 17:17:18 +05:00
Andrej730 aee8cbe479 build_pyodide.yaml - move build_pyodide to a separate script 2025-10-28 17:17:18 +05:00
Andrej730 cb36e10279 Add notes for pyodide building process 2025-10-28 17:17:18 +05:00
Andrej730 7ca44b5677 build-all.py wasm - move SIDE_MODULE=2 to cmake
Next to `EXPORTED_FUNCTIONS` and avoid possible issues with pyodide in the future (pyodide is using `SIDE_MODULE=1`, but currently not providing it libraries of type `MODULE`, only for shared ones).
2025-10-28 17:17:17 +05:00
Andrej730 a6921b83a1 ifcwrap cmake - provide correct suffix for wasm python extension 2025-10-28 17:17:17 +05:00
Andrej730 c3c94b9c59 pyodide setup.py - add dependencies
so micropip would be able to gather them automatically
2025-10-28 17:17:17 +05:00
Andrej730 576ef336fc pyodide setup.py - add a note on not switching to pyproject.toml 2025-10-28 17:17:17 +05:00
Andrej730 b1fb541912 pyodide setup.py - ensure we have correct pyodide_2025_0_wasm32 suffix
Adding extension, but avoiding adding sources as we're not actually building.
As a result build will have a correct suffix `pyodide_2025_0_wasm32.whl` that's pyodide is currently using and this is pyodide is plan to use when it's going to release to PyPI, see https://peps.python.org/pep-0783/
2025-10-28 17:17:17 +05:00
Andrej730 6345b052da build-all.py - add a note about alternative gmp mirror 2025-10-28 17:17:17 +05:00
Andrej730 061554d921 cmake - deduplicate ccache set_property code 2025-10-28 17:17:17 +05:00
Andrej730 bcaa412f4b build-all.py - don't pass side module flags as usual flags
As they're parsed by emcmake automatically https://github.com/pyodide/pyodide-build/blob/bdd0b1422064de6d92264a08c599e85001a28567/pyodide_build/tools/cmake/Modules/Platform/Emscripten.cmake#L105-L107
2025-10-28 17:17:17 +05:00
Andrej730 9f6536b263 build-all.py - option to build wasm outside pyodide for debugging 2025-10-28 17:17:17 +05:00
Andrej730 226581f76e build-all.py - provide exported functions to target explicitly
Otherwise it broke compilation in some cases when cmake would try to test that linker is working.
2025-10-28 17:17:17 +05:00
Andrej730 e833d0cd13 build-all - wasm to use packages instead of providing includes/libs paths explicitly
More complicated than I anticipated😅

Details
https://discourse.cmake.org/t/provide-absolute-paths-to-dependencies-with-cmake-find-root-path-search-during-cross-compilation-wasm/15241
2025-10-28 17:17:16 +05:00
Andrej730 ed3c95d9d7 build-all.py - move unsupported dependencies to script 2025-10-28 17:17:16 +05:00
Andrej730 7a4823a1bc build-deps - use nuget to download ccache 2025-10-28 17:17:16 +05:00
Andrej730 80c0932174 build-all.py - print IFCOS_SCHEMAS 2025-10-28 17:17:16 +05:00
Andrej730 73a238e7b0 build-all.py - document required wasm variables 2025-10-28 17:17:16 +05:00
Andrej730 b95900f154 build-all.py - fix issue building wasm on apple device 2025-10-28 17:17:16 +05:00
Andrej730 da66e3c908 build-all.py - remove --host none from wasm args
As it's now obsolete and producing warnings `configure: WARNING: the "none" host is obsolete, use --disable-assembly`.
2025-10-28 17:17:16 +05:00
Andrej730 e04cc47022 build-all.py - bump freetype to avoid issues on cmake 4+ 2025-10-28 17:17:16 +05:00
Andrej730 ce427698d9 build-all.py - add note on --without-xxx option 2025-10-28 17:17:16 +05:00
Andrej730 d3beae1374 Add Python 3.14 builds 2025-10-28 17:17:16 +05:00
Andrej730 389d481364 build-deps - set NUGET_EXE from PATH if it's available 2025-10-28 17:17:15 +05:00
Andrej730 3efd88b0d6 build-all - deduce python components from python path 2025-10-28 17:17:15 +05:00
Andrej730 0a5388f386 ifcwrap cmake - migrate to FindPython
Also simplify run-cmake to just prefix the path, instead of providing 3 paths explicitly.
2025-10-28 17:17:15 +05:00
Andrej730 71fa002707 build-deps - support overriding PYTHON_VERSION 2025-10-28 17:17:15 +05:00
Andrej730 dd80115aa2 build-deps - download Python using nuget 2025-10-28 17:17:15 +05:00
Andrej730 bc66710fec build-deps - download nuget
to later download python using it
2025-10-28 17:17:15 +05:00
Andrej730 921241fbdd build-deps - include ccache for convenience 2025-10-28 17:17:15 +05:00
Andrej730 44b9dd64f6 build_win - extend cache size 2025-10-28 17:17:15 +05:00
Andrej730 bfa77255a5 build_win - use fork to resolve cache misses and duplicated cache 2025-10-28 17:17:14 +05:00
Andrej730 b125c651a8 build_win - test ccache 2025-10-28 17:17:14 +05:00
Thomas Krijnen eb1c81514b Check for attribute nil #7276 #7291 2025-10-28 10:51:31 +01:00
Thomas Krijnen 6df5632f91 black 2025-10-26 13:33:10 +01:00
Thomas Krijnen 391a412e65 test cases #7291 2025-10-26 13:31:31 +01:00
Thomas Krijnen b10415b1b3 Rework iterator constructor #7291 2025-10-26 13:31:31 +01:00
Thomas Krijnen b1c44d42e3 Reset logger product to none 2025-10-26 13:31:31 +01:00
Dion Moult 5f65e21878 Fix bug where you couldn't get elements using a predefined property set. 2025-10-26 23:05:05 +11:00
Dion Moult 0d3be9d101 Fix #5108. Selector now supports both GlobalId and Name as filter values. 2025-10-26 22:52:31 +11:00
Dion Moult eea585a3cd Fix #6258. Fix #5727 properly. Only assume layerset axis on "standard case" elements, nothing else. 2025-10-26 22:33:39 +11:00
Thomas Krijnen 1789406299 Ruff 2025-10-26 12:04:22 +01:00
Dion Moult b503061dc0 Fix #3868. Automatic annotation references are now auto deleted if their reference is also gone. 2025-10-26 20:58:15 +11:00
Dion Moult 90ccaf4aab Let users manually create automatic references too. 2025-10-26 20:46:32 +11:00
Dion Moult 05ff47fcff Remap deprecated entities in Brick 1.4 to new RealEstateCore URIs. 2025-10-26 20:38:58 +11:00
Louis Casteleyn c40ecdd550 deleted deprecated entities for v1.4 (#6511) 2025-10-26 20:32:28 +11:00
daniel-augusto 3a0622e9df Update introduction with hyperlinks for tools (#7290) 2025-10-26 20:29:30 +11:00
Dion Moult 0bb03750dc Fix #4914. Write docs for syntax and schema validation and schema querying 2025-10-26 20:27:07 +11:00
Thomas Krijnen 89defa9b6b build-all.py ruff: noqa: UP035 2025-10-26 10:20:13 +01:00
Thomas Krijnen 459aad54aa Black 2025-10-26 10:17:49 +01:00
Thomas Krijnen 6f3065f6ce ci.yml USE_MMAP=On 2025-10-26 10:15:52 +01:00
Thomas Krijnen 69863ce4a9 Try and fix stub test 2025-10-26 10:03:43 +01:00
Dion Moult e5ae19fd34 See #7291. Temporary workaround whilst segfaults are sorted. 2025-10-26 19:36:41 +11:00
Dion Moult afe617fb93 Revert "Bump IOS - necessary as last bunch of commits are incompatible with previous binaries"
This reverts commit d922f0b9ad.
2025-10-26 19:32:35 +11:00
Dion Moult d922f0b9ad Bump IOS - necessary as last bunch of commits are incompatible with previous binaries 2025-10-26 19:12:22 +11:00
Dion Moult f9d2d494b1 Fix #4275. Using psets_only kwarg in get_pset utility now includes predefined psets. 2025-10-26 18:21:06 +11:00
Thomas Krijnen 806aa14bd0 Compatibility for older builds 2025-10-25 21:55:06 +02:00
Thomas Krijnen 80066ba9e7 Different hack for allowing f.header.file_description.file.header.file_description.file 2025-10-25 21:54:42 +02:00
Thomas Krijnen 7cb1f07a0b hacky way to retain attribute too many messages on header entities in validate.py 2025-10-25 21:12:12 +02:00
Thomas Krijnen bdb52dcffd Pass header entity types during pass to resolve empty list type 2025-10-25 20:29:41 +02:00
Thomas Krijnen 933ad6c801 Fix header and schema validation errors in pass-rigid-op-IfcPlaneAngleMeasure-IfcPlaneAngleMeasure-ifc4x3_add2.ifc 2025-10-25 20:29:19 +02:00
Thomas Krijnen 1594b9505c Don't emit Parsing terminated on benign files by not reading past stream in skipComment() 2025-10-25 20:14:02 +02:00
Thomas Krijnen 325745a822 Test IfcConvert only on single file 2025-10-25 15:54:15 +02:00
Thomas Krijnen 74f8b047fb osx compat 2025-10-25 15:40:08 +02:00
Thomas Krijnen 0f8c6ffe9e Run the bulk of pytest in parallel 2025-10-25 15:38:25 +02:00
Thomas Krijnen fa46fe0cf0 Typos 2025-10-25 15:30:36 +02:00
Thomas Krijnen f0a1efa1f2 ruff --fix 2025-10-25 15:27:46 +02:00
Thomas Krijnen 71c1058e9e .gitignore for .exp files 2025-10-25 15:27:38 +02:00
Thomas Krijnen 7575bd4dfb Commit some files because I do not want them cleaned 2025-10-25 15:25:56 +02:00
Thomas Krijnen d697ed3384 Commit some files because I do not want them cleaned 2025-10-25 15:25:10 +02:00
Thomas Krijnen aed70c8a02 Run black 2025-10-25 15:20:36 +02:00
Thomas Krijnen e82ca0e932 Less back and forths by returning semi count in page 2025-10-25 15:08:21 +02:00
Thomas Krijnen 5910b39766 geom.stats module for preemptive scanning through file 2025-10-25 13:58:32 +02:00
Thomas Krijnen ea9e0c9ab4 readInstancePy() option to obtain type decls instead of strings 2025-10-25 13:55:55 +02:00
Thomas Krijnen 2e951eb952 Whitespace handling now that token strings are built on the fly 2025-10-25 13:55:15 +02:00
Thomas Krijnen 2497611abd Merge branch 'v0.8.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.8.0 2025-10-25 13:54:52 +02:00
Bruno Postle 90bf56d9ba Fix ifc5d documentation
Documentation claimed that ODS/XLSX output was to a given filename, but
the code actually writes files with generated names in a folder.

(also create the folder if necessary for convenience)
2025-10-24 22:19:01 +01:00
Bruno Postle e1b73ef0ef Fix build broken by a6d20c0 - link iostreams
FileReader.cpp now uses boost::iostreams::mapped_file regardless of
USE_MMAP setting
2025-10-24 15:35:19 +01:00
Thomas Krijnen bcb5fd7810 Missing return type 2025-10-24 13:32:18 +02:00
Thomas Krijnen 40c5145a13 Address some omissions in the FileReader rewrite regarding unicode paths on windows 2025-10-24 13:26:27 +02:00
Thomas Krijnen e304c3ad31 Merge branch 'v0.8.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.8.0 2025-10-24 13:25:05 +02:00
Thomas Krijnen 0494bd9677 Option to bypass storing types when opening model 2025-10-24 12:06:59 +02:00
Dion Moult fc0cdfabb9 Fix #7255. Bug where you couldn't edit header data. 2025-10-24 19:11:29 +11:00
nameloCmaS 2dac137801 Limit clipping plane euler rotation angles to <= 360 degrees (#6877)
The "Flip Clipping Plane" operator adds 180 degrees to the angle's value, meaning the angle will keep increasing with each press.
2025-10-24 14:10:38 +11:00
Dion Moult 8ffa6fcf47 Fix #7267. Bug where duplicating a drawing would cause annotation references to be associated with both the original and duplicate. 2025-10-24 14:09:00 +11:00
Dion Moult 8824e6e2c2 Fix #7268. Automatic annotation references (sections, elevations, etc) are now intelligently regenerated 2025-10-24 12:47:58 +11:00
Ryan Schultz 5dbfe539ac Need a little more freedom to rotate a RCP 2025-10-23 08:31:31 -05:00
Dion Moult d1453e1139 Fix bug where panels for psets/qtos/classifications/types were showing up on irrelevant objects (e.g. grid axes) 2025-10-23 08:59:15 +11:00
Dion Moult 5b5dcb3c6d Fix #7257. Always quote psets and props in our colour by property dropdown to account for spaces and characters. 2025-10-23 08:58:23 +11:00
Dion Moult 4f467d199e See #7253. See #7268. Rewrite grid generation to use IFC data, not rely on Blender object.
This also deprecates one more instance of the add_representation API
call. As this is slowly cleaned up we can move towards "regenerating"
annotations, not just generating from scratch.
2025-10-23 08:39:25 +11:00
Thomas Krijnen a6d20c0cc4 Follow up after 4d688170e0 2025-10-22 21:42:37 +02:00
Ryan Schultz d5d942bb2e Adds a TargetView CSS class to the drawings. 2025-10-22 10:06:43 -05:00
Thomas Krijnen 9e2c7e653f Commit suggestion in #7276 2025-10-22 14:37:10 +02:00
Thomas Krijnen 200c0bf773 Commit suggestion in #7276 2025-10-22 13:23:34 +02:00
Dion Moult 381b0d379a Optimise operators when a drawing is active by not needlessly regenerating the cut after each operation. 2025-10-22 18:03:40 +11:00
Dion Moult f48b5b9d92 Fix #7273. See #7253. Auto annotation references now cannot be deleted, but can be excluded. 2025-10-22 18:03:40 +11:00
Massimo Fabbro 1f47aadc94 Fix #7227. Sync cost item assigned resources also for SOR 2025-10-22 07:14:01 +02:00
falken10vdl bb3cd7e49c Annotation rotation when doing bulk tags (#7049)
* first attempt to do annotation rotation when dong bulk tags

* Enhance annotation rotation handling based on camera orientation

* handle properly S_G

* black .

* reorder property in UI

* cleanup imports
2025-10-22 15:07:52 +11:00
daniel-augusto edd01d44de Include direct links to tools (#7128) 2025-10-22 15:06:56 +11:00
Michael Godsven 52b899d070 Add icons (#7256) 2025-10-22 11:30:54 +11:00
Dion Moult 008292df0f Revert "Always show edit UI even if you don't have a BIM Tool activated."
This reverts commit 87bfd182d7.
2025-10-22 11:08:55 +11:00
Dion Moult 87bfd182d7 Always show edit UI even if you don't have a BIM Tool activated. 2025-10-22 11:07:18 +11:00
Dion Moult 8fcc622b8a Optimisation to only recalculate all drawing cuts if the camera is moved, not just selected. 2025-10-22 10:12:24 +11:00
Thomas Krijnen 9415878f57 Remove warning about combination of RefDirection as Axis #7251 2025-10-21 13:33:32 +02:00
Thomas Krijnen 919ac41a74 Consider case of only RefDirection in sectioned shapes #7251 2025-10-21 13:32:51 +02:00
Thomas Krijnen 80093f3777 Loft all wires not only the outer one #7251 2025-10-21 13:09:10 +02:00
Thomas Krijnen 28f5d6e91c Copy internal status on interpolated loops #7251 2025-10-21 13:08:29 +02:00
Thomas Krijnen 550779deee Merge branch 'v0.8.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.8.0 2025-10-21 13:06:05 +02:00
Thomas Krijnen e2cf60f0c1 Update to gmp 6.3.0 #7200 2025-10-21 12:18:48 +02:00
Dion Moult 546a042d40 Explicitly disable any voids, openings, and booleans in IFC4 Reference View MVD
It turns out vendors are still exporting them and creating a mess.
2025-10-21 10:49:17 +11:00
Thomas Krijnen 86b89f2153 Comment behaviour #7264 2025-10-20 10:37:35 +02:00
Thomas Krijnen 34f4aa430a Keep file_ as nullptr to not bypass addEntity() #7264 2025-10-20 10:33:09 +02:00
Thomas Krijnen 67678cb7f1 Merge branch 'v0.8.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.8.0 2025-10-20 10:27:50 +02:00
Thomas Krijnen f05b0d946d if -> ifdef #7174 2025-10-19 13:20:58 +02:00
Ryan Schultz 486651e0b7 additional tweak to the preceding commit. 2025-10-18 13:43:34 -05:00
Ryan Schultz 5885924bb7 Fix #5709: The RCP will not be denied! :) 2025-10-18 12:47:35 -05:00
Ryan Schultz ead849625d Automatically select annotations after creation to make it easier to move them in bulk. 2025-10-16 21:10:43 -05:00
Ryan Schultz f52aafdd6a closes #7249: for stairs, change the first/last tread lengths to less than the typical tread run. And even go to zero, whereby removing the tread altogether. 2025-10-14 21:53:22 -05:00
Ryan Schultz b0ae0a2c82 extend https://github.com/IfcOpenShell/IfcOpenShell/commit/322a2179e51a9ec4802fe9e35039c7e3e29f9678: Merges names with number suffix, as well (ex: foo, foo.001, foo.002) 2025-10-14 11:29:44 -05:00
Thomas Krijnen 4d688170e0 Storage rework WIP 2025-10-13 20:47:43 +02:00
Ryan Schultz 322a2179e5 Merge entities, if match on name or identification attribute only. 2025-10-13 11:25:36 -05:00
Dion Moult 8014980b88 Fix #7076. Lock representation items scale to prevent user confusion. 2025-10-13 08:52:59 +11:00
Dion Moult 65237cab65 Fix #7080. Potential bug with merging styles that didn't replace elements of the same class. 2025-10-13 08:44:47 +11:00
Dion Moult 155827528a Visibility during collector assignment now depends on the visibility mode set in the UI. 2025-10-13 08:08:35 +11:00
Dion Moult fb15435296 See #7229. Simpler solution to ensure representation isn't affected by visibility until assign class can be cleaned up more. 2025-10-13 08:08:10 +11:00
Dion Moult 6bba3ebeeb See #7159. Make polls consistent in add foo to sheet operators. 2025-10-13 08:02:06 +11:00
Dion Moult 3343f3fb35 Revert "Closes #7229: Unhide object before mesh tessellation export to prevent "Cannot edit hidden object" error when collector.assign() hides the object."
This reverts commit 96d05300bb.
2025-10-13 07:49:07 +11:00
Ryan Schultz 1b451d45cf Closes #7159: Fix AddReferenceToSheet operator poll checking wrong data_dir property (bim_props instead of prefs) 2025-10-12 13:51:14 -05:00
Ryan Schultz f5f676cf51 black . 2025-10-12 12:46:49 -05:00
Ryan Schultz 1dd477d382 Delete aggregate if all its parts are deleted. Prevents having orphaned aggregates, if you do a bulk delete with empties turned off. 2025-10-12 12:17:57 -05:00
Ryan Schultz 96d05300bb Closes #7229: Unhide object before mesh tessellation export to prevent "Cannot edit hidden object" error when collector.assign() hides the object. 2025-10-12 09:57:27 -05:00
Dion Moult 0073a4c0a2 Fix #7205. Regression when switching from drawing mode to model mode didn't hide drawings. 2025-10-12 21:21:27 +11:00
Dion Moult d3a5071d9d Fix #7211. Explain to user why they can't remove the last grid axis. 2025-10-12 21:07:13 +11:00
Dion Moult 471bd34fc6 Fix #7206. For convenience, deleted annotation references are marked as excluded and not regenerated. 2025-10-12 21:00:55 +11:00
Ryan Schultz 44cc12763b Allows the ability to activate an attached drawing_style regardless of whether a drawing has a underlay, or not. 2025-10-11 17:47:37 -05:00
Ryan Schultz b68aca04ae added EPset_Status.UserDefinedStatus to default join_criteria 2025-10-11 17:41:41 -05:00
Bruno Postle dd22264877 Fix sheet regeneration regression from d4f3280
Remove validate_sheet_files() check in regenerate_sheet() that prevented
regenerating missing LAYOUT files. The validation was blocking the
exact scenario that regeneration was designed to handle.

This allows users to open a bare IFC file with configured drawings and
sheets and have the SVG layouts automatically recreated with drawings
placed at default positions.
2025-10-11 20:25:13 +01:00
Ryan Schultz cc6ef0268f Introduces a toggle to turn on/off material layers in printed svg. 2025-10-11 09:52:55 -05:00
Dion Moult feecb89c8e Fix #7212. IfcTester now supports IFC2X3 type element mapping. 2025-10-11 21:30:49 +11:00
Dion Moult cb5c488cfd Fix #7213. IfcTester now supports checking for USERDEFINED predefined types
Can I just take this moment to complain about the overengineered
complexity of how predefined types work in IFC.
2025-10-11 21:09:41 +11:00
Dion Moult b68e8dedd2 Fix #5675. Bug where separate islands of polygons still merged CSS classes incorrectly. 2025-10-11 20:39:48 +11:00
Dion Moult 0975eb455e All default drawing patterns now have a white background, not transparent. 2025-10-11 20:37:28 +11:00
Dion Moult df0e8bba8c Fix #7225. Handle freestyle linework regardless of generated SVG filename. 2025-10-11 19:15:50 +11:00
Dion Moult 71d5239823 Revert "Closes ##7225 - Improve generate_freestyle_linework to robustly handle SVG output by falling back to the first generated linework file if the expected file is missing."
This reverts commit 89c039252b.
2025-10-11 19:02:04 +11:00
Dion Moult 92ae79f64e See #7133. Sync viewport visibility with render visibility when generating underlays. 2025-10-11 18:48:46 +11:00
Dion Moult 9c1f636cd4 Revert "Reintroduce https://github.com/IfcOpenShell/IfcOpenShell/issues/7133 : Add hide_render synchronization to isolate_objects so hidden viewport objects are also hidden from render"
This reverts commit 23c60b38fd.
2025-10-11 18:09:52 +11:00
Ryan Schultz 23c60b38fd Reintroduce https://github.com/IfcOpenShell/IfcOpenShell/issues/7133 : Add hide_render synchronization to isolate_objects so hidden viewport objects are also hidden from render 2025-10-10 22:24:57 -05:00
Ryan Schultz 89c039252b Closes ##7225 - Improve generate_freestyle_linework to robustly handle SVG output by falling back to the first generated linework file if the expected file is missing. 2025-10-10 17:28:15 -05:00
Thomas Krijnen 60d85b4259 Skip ifcxml writing tests 2025-10-09 14:03:35 +02:00
Thomas Krijnen e8a382b02a Only use cyclic dependencies when amongst static libs #7180 2025-10-09 13:24:31 +02:00
Thomas Krijnen 2b3ec66017 mark failed_on_purpose on IfcBoundingBox without --keep-bounding-boxes #7215 2025-10-09 08:45:25 +02:00
Thomas Krijnen 97dd37b345 Fix circular definition issue in cmake #7180 2025-10-08 15:25:38 +02:00
Thomas Krijnen e4877e8246 Ignore steal_instances() in python 2025-10-08 14:55:28 +02:00
Thomas Krijnen e216d345c1 Reimplement cecho.cmd to not depend on starting powershell.exe for speed boost 2025-10-08 14:18:52 +02:00
Thomas Krijnen 14c1b70768 Address some compiler warnings 2025-10-08 14:18:17 +02:00
Thomas Krijnen e15f222a19 Address segfault #7215 #7185 2025-10-08 14:17:47 +02:00
Ryan Schultz 4ab2664529 closes #7134 - Wall layer cuts exported out to a SVG during Freestyle linework mode. 2025-10-07 14:43:11 -05:00
Dion Moult bd0cfa5366 Fix bug where grid decorator only considered hide states, not hide viewport state or local isolation, etc 2025-10-07 14:44:57 +11:00
Dion Moult 2e4b0e83a2 Add feature to have work schedule columns for total inputs, outputs, and elements (inputs + outputs) 2025-10-07 13:34:07 +11:00
Dion Moult cf61111386 Fix bug where nested elements didn't show elements of the active task (only children) 2025-10-07 13:06:26 +11:00
Dion Moult 3aa5ddb070 Implement auto element selection for tasks in work schedule. Also add manual selection (instead of going into ICOM panel for speed) 2025-10-07 12:27:38 +11:00
Dion Moult 25dacc8fed Fix #7208. Merge duplicates patch recipe can now control merging by empty attributes. 2025-10-06 23:18:32 +11:00
Dion Moult 7cba63af9c Add IfcTester webapp workflow (#7209) 2025-10-06 23:15:16 +11:00
Dion Moult 3c1d6abc7e Update ci-ifctester-org.yml attempt 2 2025-10-06 17:51:50 +11:00
Dion Moult 8da4b9f23f Create ci-ifctester-org.yml
This definitely won't work the first time
2025-10-06 17:41:21 +11:00
Dion Moult 99fa77edee Fix #6873. Bug where geometry created through sync_references didn't have item editing metadata. 2025-10-06 17:23:29 +11:00
Andrej730 839c5ad932 black . 2025-10-06 11:02:33 +05:00
Dion Moult b68ce08811 Deprecate should_reload and is_global in switch representation as they don't do anything now.
Superseded by item editing mode, so always reload, and always global.
2025-10-06 16:57:54 +11:00
Dion Moult e662308665 Deprecate should_sync_changes_first for switching representation, since it is no longer relevant in item editing. 2025-10-06 16:19:39 +11:00
Andrea Ghensi a2ccff67ca fix(bcf): Create directory entries in the zip file's central directory (#7175)
This is done to comply with the Implementation Agreements
https://github.com/buildingSMART/BCF-XML/tree/release_3_0/Documentation#create-directory-folder-entries-in-the-zip-files-central-directory
2025-10-06 15:50:03 +11:00
Christoph Mellüh 8e045d772c Add "hide empty Specifications" to Bonsai IFCTester (#7190)
* add filter

* apply filter property

* allow name filter

* black .

* add hide-skipped to html

* rename prop

* only hide optional specifications
2025-10-06 15:49:35 +11:00
Christoph Mellüh 16fd614886 Add instructions to IFCTester in Blender (#7195)
* add instructions to blender ui

* add requirement instructions to html

* black .
2025-10-06 15:48:45 +11:00
Dion Moult f31df307c6 Fix #6674. Bug where newly created annotation types didn't have the necessary metadata for item editing. 2025-10-06 15:46:16 +11:00
Dion Moult 11873a7c51 Fix #7203. Help indicate that author should be an email. Add error styling. 2025-10-06 14:48:22 +11:00
Dion Moult ccccbe23f4 Fix #6709. Support same spatial element type even if not explicit in concept template. 2025-10-06 14:32:53 +11:00
Dion Moult 2173a562be Fix #7157. Don't fail if the bin dir isn't where we expect it (maybe it's packaged differently)
Honestly someone with motivation and coffee needs to take a long hard
look at our packaging and see if we can do a better job.
2025-10-06 14:14:49 +11:00
Dion Moult a11f81f2ce Fix #5701. Spaces are now invisible by default and use viewport hiding. 2025-10-06 14:07:20 +11:00
Dion Moult d3b553c4fb Blender tools for hiding and showing objects 2025-10-06 14:05:57 +11:00
Dion Moult 5eb11c3516 Remove "make spatial elements unselectable" setting because it's superseded by spatial locking. 2025-10-06 14:05:31 +11:00
Dion Moult c195799801 See #7202. Revert to safer way to control visibility.
Pity can't control hide_viewport in bulk, but this is perhaps the next
best thing.
2025-10-06 12:19:03 +11:00
Massimo Fabbro ac5a44a962 See #6570. Now it's possible to specify Description in csv import
Now it is possible to specify the column Description in the csv file in order to specify also the cost item description
2025-10-05 17:49:23 +02:00
Dion Moult 86880e9e62 See #4481. Optimise object visibility even further by using foreach_set.
Note: now we are using hide_viewport not hide_set anymore. There might
be pending issues from this. Also, now because we use foreach_set, we
can quickly also apply hide_render, which saves time during underlay
generation.
2025-10-05 23:20:32 +11:00
Dion Moult f8ccdf1170 See #4481. Optimise first load of drawing by lazy loading annotations. 2025-10-05 23:17:42 +11:00
Dion Moult e3d8473d47 Fix #7166. Don't create glazing constituent for doors without transoms. Clarify framing name. 2025-10-05 20:24:13 +11:00
Dion Moult bd5d4cecbf See #7166. Only show total thickness for layer sets. 2025-10-05 20:13:40 +11:00
Dion Moult 2ede8a2206 Fix #7158. UI didn't expect to find a material constituent set with no constituents.
It's technically valid but makes no sense.
2025-10-05 19:41:52 +11:00
Dion Moult cb77f9bd26 Fix #7179. Allow drawing polylines with segments as short as 1mm (previously 100mm which was too high) 2025-10-05 19:30:48 +11:00
Dion Moult 0bb21fedae Fix #7169. Bug where unit scale wasn't set for geometric operations on new projects. 2025-10-05 19:09:47 +11:00
Dion Moult 478f90c2d4 Update IfcTester webapp to use IfcTester logo 2025-10-05 18:46:05 +11:00
Dion Moult a016f6e5c8 Fix #7186. Support upgrading IFC2X3 IfcExtendedMaterialProperties to IFC4 2025-10-05 18:44:14 +11:00
Dion Moult 1b2fa4f994 Fix #7113. IfcTester webapp should use uppercase entity names 2025-10-05 15:32:55 +11:00
Christoph Mellüh 2d8383efc6 Fix MASSUNIT bug (#7173)
* add exception

* black
2025-10-05 15:31:06 +11:00
Dion Moult add5132dec Fix launching of IfcTester webapp with Bonsai 2025-10-05 15:11:18 +11:00
Andrej730 fe333051df build-deps - note on cloning opencollada 2025-10-04 21:40:07 +05:00
Andrej730 8d1b533f91 run-cmake.bat - echo SWIG_INSTALL_DIR
as `SWIG_DIR` is no longer used
2025-10-04 21:40:07 +05:00
Andrej730 fb304e141a build-all.py - note on doubled compilation times 2025-10-04 21:40:07 +05:00
Andrej730 bd094f930e build_rocky - support ccache 2025-10-04 21:40:07 +05:00
Andrej730 b61000d2fe ci.yml - bump ccache action version 2025-10-04 21:40:07 +05:00
Andrej730 c72cadb234 build_rocky_arm - use ccache 2025-10-04 21:40:06 +05:00
Andrej730 10642177a9 build_osx - bump ccache workflow version 2025-10-04 21:40:06 +05:00
Andrej730 0b8ea28463 aud - use main repo
As PR with a fix was merged
2025-10-04 21:40:06 +05:00
Andrej730 9b24f54f0d cmake - override CGAL_Boost_USE_STATIC_LIBS
The issue was with ci.yml - it was using system boost shared libraries (since Boost_USE_STATIC_LIBS by default is OFF), but CGALConfig was overriding leading to compilation issues.
2025-10-04 21:40:06 +05:00
Andrej730 289645dacc ci.yml - let cmake figure out system dependencies automatically 2025-10-04 21:40:06 +05:00
Andrej730 c365acb517 ci.yml - don't provide ccache explicitly
as it's covered automatically by cmake
2025-10-04 21:40:06 +05:00
Andrej730 785cf56621 cmake - specify cxx component for hdf5 package
by default it's targeting `C` and this was part of the issue why ci.yml was failing
2025-10-04 21:40:06 +05:00
Andrej730 60617eecce ci.yml - add ccache for rocksdb
Revert "ci.yml - add ccache for rocksdb"

This reverts commit 71178d4bbc023c793b0800f5987a979fdddc1c30.

Update ci.yml
2025-10-04 21:40:06 +05:00
Andrej730 26c68c00b7 cmake - proceed to package search if HDF5_LIBRARY_DIR not provided
Fixes issue with ci.yml
2025-10-04 21:40:05 +05:00
Esteban Dugueperoux ab0a602f9f black: Format incorrectly formated files (#7194) 2025-10-04 18:59:42 +05:00
Osyotr 066326ab3b Fix warning C4275
It's not enough to disable this warning by adding /wd4257 at build time because it's triggered when the library is consumed.
2025-10-03 18:12:56 +02:00
Thomas Krijnen 02713dbd39 nix build script add occt 7.9.1 patch 2025-10-03 18:08:37 +02:00
Thomas Krijnen d58dae5d2f nix build script add occt 7.9.1 patch 2025-10-03 18:05:39 +02:00
Thomas Krijnen ca3685900f Update clear_schemas() which is now handled by unique_ptr 2025-10-03 14:18:50 +02:00
Thomas Krijnen 5e10e61aca Clean-up parsed simple types #7185 2025-10-03 14:18:07 +02:00
Osyotr 92e25ce3cb Fix warning C4702: unreachable code 2025-10-03 13:56:10 +02:00
Thomas Krijnen 804a670454 Revert revert 2025-10-03 09:04:43 +02:00
Thomas Krijnen efa8382fc5 ifcopenshell.draw --arange-zones see http://blog.ifcopenshell.org/2025/10/bim-legal-2d-notorial-drawings-directly.html 2025-10-02 21:44:52 +02:00
Thomas Krijnen 92f9d5f506 Writing .ifcxml is not supported #7181 2025-10-02 20:28:17 +02:00
Ryan Schultz 8800c14105 extended previous commit to add functionality to printed svg, as well. 2025-10-01 23:21:14 -05:00
Ryan Schultz ec2d0bfa4a Add support for reversing and customizing separators in text annotation lists
Text annotations can now reverse the order of list values (e.g., materials) and use custom separators instead of the default comma-space. Two new properties have been added to EPset_Annotation: Reverse_List (boolean) and List_Separator (string). When text literals contain IFC list/tuple values, they are now detected during variable replacement and can be reversed and joined with the specified separator. The list separator supports escape sequences like \n for newlines, enabling multi-line list displays. These properties are exposed in the text editing UI and properly persist to the IFC file through the new update_text_annotation_properties method, which consolidates all annotation property updates into a single efficient operation.
2025-10-01 22:44:34 -05:00
Thomas Krijnen d684d47dc8 Make sure compound structure is retained as SvgSerializer depends on it 2025-10-01 15:01:50 +02:00
Andrej730 babf95785c Move IFCOPENSHELL_VERSION definition from IfcParse.h
To prevent recompiling all files that have IfcParse.h include and improve caching.
2025-09-30 19:17:46 +05:00
Andrej730 f6ebf80fab ifcopenshell-python/scripts/dev_environment.py 2025-09-30 17:47:30 +05:00
Andrej730 ea2cff3311 typing 2025-09-30 17:47:30 +05:00
Andrej730 bf4aa8cbb1 cmake - link mappings against IfcGeom
Not sure why it occurred only now, maybe after recent changes with shared libraries this problem just got more apparent and previously it was masked by some other library after mappings also using IfcGeom.
But the issue was that mapping were not linked against IfcGeom, though it's symbols were used in them. E.g. IfcSectionedSurface.cpp was using `has_loft` from `infra_sweep_helper`.
Issue occurred only on Linux - msvc and clang are less strict and probably do multiple passes to fetch symbols.

Example errors:
```
libgeometry_mapping_ifc4x3.a(IfcSectionedSolidHorizontal.cpp.o): In function `ifcopenshell::geometry::mapping_Ifc4x3::map_impl(Ifc4x3::IfcSectionedSolidHorizontal const*)':
IfcSectionedSolidHorizontal.cpp:(.text._ZN12ifcopenshell8geometry14mapping_Ifc4x38map_implEPKN6Ifc4x327IfcSectionedSolidHorizontalE+0x19a4): undefined reference to `ifcopenshell::geometry::make_loft(ifcopenshell::geometry::Settings const&, IfcUtil::IfcBaseClass const*, std::shared_ptr<ifcopenshell::geometry::taxonomy::function_item> const&, std::vector<ifcopenshell::geometry::cross_section, std::allocator<ifcopenshell::geometry::cross_section> >&)'
libgeometry_mapping_ifc4x3.a(IfcSectionedSurface.cpp.o): In function `ifcopenshell::geometry::mapping_Ifc4x3::map_impl(Ifc4x3::IfcSectionedSurface const*)':
IfcSectionedSurface.cpp:(.text._ZN12ifcopenshell8geometry14mapping_Ifc4x38map_implEPKN6Ifc4x319IfcSectionedSurfaceE+0x19c4): undefined reference to `ifcopenshell::geometry::make_loft(ifcopenshell::geometry::Settings const&, IfcUtil::IfcBaseClass const*, std::shared_ptr<ifcopenshell::geometry::taxonomy::function_item> const&, std::vector<ifcopenshell::geometry::cross_section, std::allocator<ifcopenshell::geometry::cross_section> >&)'
libgeometry_mapping_ifc4x3_tc1.a(IfcSectionedSolidHorizontal.cpp.o): In function `ifcopenshell::geometry::mapping_Ifc4x3_tc1::map_impl(Ifc4x3_tc1::IfcSectionedSolidHorizontal const*)':
IfcSectionedSolidHorizontal.cpp:(.text._ZN12ifcopenshell8geometry18mapping_Ifc4x3_tc18map_implEPKN10Ifc4x3_tc127IfcSectionedSolidHorizontalE+0x19a4): undefined reference to `ifcopenshell::geometry::make_loft(ifcopenshell::geometry::Settings const&, IfcUtil::IfcBaseClass const*, std::shared_ptr<ifcopenshell::geometry::taxonomy::function_item> const&, std::vector<ifcopenshell::geometry::cross_section, std::allocator<ifcopenshell::geometry::cross_section> >&)'
libgeometry_mapping_ifc4x3_tc1.a(IfcSectionedSurface.cpp.o): In function `ifcopenshell::geometry::mapping_Ifc4x3_tc1::map_impl(Ifc4x3_tc1::IfcSectionedSurface const*)':
IfcSectionedSurface.cpp:(.text._ZN12ifcopenshell8geometry18mapping_Ifc4x3_tc18map_implEPKN10Ifc4x3_tc119IfcSectionedSurfaceE+0x19c4): undefined reference to `ifcopenshell::geometry::make_loft(ifcopenshell::geometry::Settings const&, IfcUtil::IfcBaseClass const*, std::shared_ptr<ifcopenshell::geometry::taxonomy::function_item> const&, std::vector<ifcopenshell::geometry::cross_section, std::allocator<ifcopenshell::geometry::cross_section> >&)'
libgeometry_mapping_ifc4x3_add1.a(IfcSectionedSolidHorizontal.cpp.o): In function `ifcopenshell::geometry::mapping_Ifc4x3_add1::map_impl(Ifc4x3_add1::IfcSectionedSolidHorizontal const*)':
IfcSectionedSolidHorizontal.cpp:(.text._ZN12ifcopenshell8geometry19mapping_Ifc4x3_add18map_implEPKN11Ifc4x3_add127IfcSectionedSolidHorizontalE+0x19a4): undefined reference to `ifcopenshell::geometry::make_loft(ifcopenshell::geometry::Settings const&, IfcUtil::IfcBaseClass const*, std::shared_ptr<ifcopenshell::geometry::taxonomy::function_item> const&, std::vector<ifcopenshell::geometry::cross_section, std::allocator<ifcopenshell::geometry::cross_section> >&)'
libgeometry_mapping_ifc4x3_add1.a(IfcSectionedSurface.cpp.o):IfcSectionedSurface.cpp:(.text._ZN12ifcopenshell8geometry19mapping_Ifc4x3_add18map_implEPKN11Ifc4x3_add119IfcSectionedSurfaceE+0x19c4): more undefined references to `ifcopenshell::geometry::make_loft(ifcopenshell::geometry::Settings const&, IfcUtil::IfcBaseClass const*, std::shared_ptr<ifcopenshell::geometry::taxonomy::function_item> const&, std::vector<ifcopenshell::geometry::cross_section, std::allocator<ifcopenshell::geometry::cross_section> >&)' follow
collect2: error: ld returned 1 exit status
```
2025-09-30 13:10:59 +05:00
Andrej730 8b751577f4 Fix Ruff UP037 (unnecessary quotes in annotations) 2025-09-30 13:04:48 +05:00
Andrej730 6fbe982623 Fix Ruff UP006 (List -> list) 2025-09-30 13:04:48 +05:00
Andrej730 0b93694097 black . 2025-09-30 13:04:48 +05:00
Dion Moult 2027c71d99 Fix #7164. Property facets with a restriction in the baseName would incorrectly test null values.
Our tests missed this detail. The previous test also did
should_purge=True by default which doesn't property test for nullness.
2025-09-30 00:07:14 +10:00
Dion Moult 6da51c2a6e Update IfcTester to support changed upstream spec where prohibited specs cannot have requirements. 2025-09-30 00:05:57 +10:00
Fernando Gussão Bellon 53def55dc9 Added the file extension to the viewpoint guid comparison 2025-09-29 23:41:37 +10:00
Robin Quint 8722350c0b Plan view fixes (#7022) 2025-09-29 23:40:35 +10:00
Andrea Ghensi 34c92d4d9c fix(bcf): viewport creation functions result in malformed XML
fixes #6244
2025-09-29 23:33:15 +10:00
daniel-augusto 725cb40ef2 Update highlight from block code 2025-09-29 23:30:39 +10:00
daniel-augusto 0c81b41ac7 Update highlight of block code 2025-09-29 23:30:39 +10:00
Yan Peng a8a82450a5 Update documentation of bsdd based on the updated info of uri and bsdd functions. 2025-09-29 23:29:57 +10:00
Andrea Ghensi 1b5b9fdcf6 fix: use numpy 2d indexing, avoid np.matrix
fixes #7141
2025-09-29 23:29:08 +10:00
c-mellueh af1e542064 black 2025-09-29 23:28:20 +10:00
c-mellueh 78154d17bf add button 2025-09-29 23:28:20 +10:00
c-mellueh 9bc8012aa4 remove old function 2025-09-29 23:27:04 +10:00
c-mellueh 407962ec93 black 2025-09-29 23:27:04 +10:00
c-mellueh 21fd09b424 add bsdd_json 2025-09-29 23:27:04 +10:00
Andrej730 2264e69a1e cmake - remove redundant msvc check for ccache (e02d6c3f) 2025-09-29 17:39:43 +05:00
Andrej730 e02d6c3f4b cmake - support ccache for msvc (required cmake 3.25+)
As described in https://github.com/ccache/ccache/wiki/MS-Visual-Studio#usage-with-cmake
2025-09-29 16:43:29 +05:00
Andrej730 ec0abb7b37 cmake - fix missing installation for ifcgeom/serialization headers
Was trying to reproduce IfcOpenHouse example outside of IfcOpenShell project and noticed that it's referring to a header not present in installation.
2025-09-29 16:43:29 +05:00
Andrej730 477becab0b ruff - use preview behaviour
No particular preview rules we need, just to possibly early adapt new behavior.
2025-09-29 16:43:28 +05:00
Andrej730 60bf424461 ruff - remove from config a rule removed from ruff 2025-09-29 16:43:28 +05:00
Andrej730 923e8423f9 black . 2025-09-29 16:43:28 +05:00
Thomas Krijnen e228095391 Fix geomserver compile 2025-09-29 13:19:46 +02:00
myoualid 1492a660c8 adding paths to include schema files for wasm build (#7168) 2025-09-29 11:55:42 +01:00
Thomas Krijnen 7a931ea6f2 Submodule 2025-09-29 12:07:49 +02:00
Thomas Krijnen 2d59bb9cb8 Remove dependency on stdc++fs lib in cmake #7131 2025-09-29 11:30:40 +02:00
Thomas Krijnen 06f5ded038 Don't crash on missing schema when loading rdb 2025-09-29 11:29:52 +02:00
Thomas Krijnen 91f371a46e Be sure to init header_section_schema when obtaining schemas in python #7131 2025-09-29 11:29:35 +02:00
Thomas Krijnen 573e53ebfd Ugly workarounds to not depend on std::filesystem #7131 2025-09-29 11:29:07 +02:00
myoualid a492be5971 include schema files for Pyodide build via MANIFEST.in 2025-09-29 09:41:09 +01:00
Dion Moult ceac85ca02 Temporarily revert to old build behaviour since new builds are failing. 2025-09-29 11:00:59 +10:00
Dion Moult bfa981709a Fix regression. Schema should not be a Python package. 2025-09-29 10:43:14 +10:00
myoualid c64b477e53 last attempt to fix WASM build: libxml2 without threads and use explicit libxml2 paths 2025-09-29 00:49:12 +01:00
myoualid 4f7501e1e8 set Eigen3 path for WASM build to avoid find_package issues following commit 235eb3c83c 2025-09-28 21:56:27 +01:00
myoualid a1f20ec7bb add explicit OCCT paths for WASM builds 2025-09-28 20:20:43 +01:00
myoualid e2ee6c6e56 Fix WASM build by reverting CGAL handling to explicit paths from commit 3ec7b71565 2025-09-28 16:43:58 +01:00
myoualid 6940a05f2b remove yacc dependency for wasm build 2025-09-28 13:51:38 +01:00
myoualid ff8f4ecd3c Revert "add bison dependency for pyodide wasm build"
This reverts commit cfa21b3cbf.
2025-09-28 13:37:30 +01:00
Dion Moult de2bd3ff1a Fix #6914. Bug where HTML IDS report did not visually indicate prohibited results correctly. 2025-09-28 22:26:39 +10:00
myoualid cfa21b3cbf add bison dependency for pyodide wasm build 2025-09-28 12:21:50 +01:00
Dion Moult db7c3e3b01 Fix #6960. String reporting of cardinality did not match upstream docs.
The meaning of the upstream docs changed subtly a year ago and I never
caught up. There is still work to do.
2025-09-28 20:35:55 +10:00
myoualid 0532ceb029 Fix missing files in WASM build (#7168) 2025-09-28 11:30:23 +01:00
Dion Moult 0fe869c169 See #7131. Rollback to prevent instant segfaults on Linux. 2025-09-28 18:15:13 +10:00
myoualid bcde68d851 reproduce WASM missing schema files bug (#7168) 2025-09-27 20:54:23 +01:00
Bruno Perdigão 960a90e36c See commit 17d6b8a. Add a patch to update linked aggregates psets.
https://github.com/IfcOpenShell/IfcOpenShell/commit/17d6b8af61c8dd7cd82f6e72b2fb3831d851a33d#commitcomment-163151609
2025-09-26 22:57:18 -03:00
Bruno Perdigão aea0395fd6 See #7046. Remove snapping points that are not visible with clipping
planes.
2025-09-26 21:59:18 -03:00
Bruno Perdigão 416d51f7c7 Fix small issue with None value in polyline increment snap 2025-09-26 21:59:18 -03:00
Bruno Perdigão a9b13fd056 See #7046. Adapt snapping system to focal length value. 2025-09-26 21:59:17 -03:00
Andrej730 080056806e build_osx - separate arm64 ccache to avoid override 2025-09-26 21:53:33 +05:00
Andrej730 7a33a9eb02 build_osx - fix issue building arm64 2025-09-26 21:53:33 +05:00
Andrej730 07ba483a13 build-all - bump Python version to fix issue cross compiling
Not sure which patch version exactly fixed it, but 3.13.6 works.
2025-09-26 21:53:33 +05:00
Andrej730 4925741060 build_osx - add deps for cross compilation 2025-09-26 21:53:33 +05:00
Andrej730 7c4505b2fd build_osx - exclude arm64 gmp dependency to avoid cross compilation issues 2025-09-26 21:53:33 +05:00
Andrej730 f9ee838cd2 build-all - cross compile dependencies 2025-09-26 21:53:32 +05:00
Andrej730 cce0c39ab2 build-all.py - provide with-openssl for python on Mac 2025-09-26 21:53:32 +05:00
Andrej730 cd57fd4b1d build_osx - note on preinstalled dependencies 2025-09-26 21:53:32 +05:00
Andrej730 6b705f0448 build-all.py - document ADD_COMMIT_SHA env var 2025-09-26 21:53:32 +05:00
Andrej730 9cff6c87f0 cmake - don't fail silently with ADD_COMMIT_SHA and missing git 2025-09-26 21:53:32 +05:00
Andrej730 cac41064e0 build_osx - attempt to cross-compile intel binaries
ccache step broke (https://github.com/hendrikmuhs/ccache-action/issues/374) and macos-13 is now deprecated in general -
https://github.blog/changelog/2025-09-19-github-actions-macos-13-runner-image-is-closing-down/
2025-09-26 21:53:32 +05:00
Andrej730 350cf0406d build-all.py - override minimum cmake version for OpenCOLLADA 2025-09-26 21:53:32 +05:00
Andrej730 47fd52b7c1 build-all.py - bump eigen package to avoid issues on cmake 4 2025-09-26 21:53:32 +05:00
Andrej730 8a33e2fea1 workflows - unify ccache names 2025-09-26 21:53:31 +05:00
Andrej730 d4c02a312a build-all.py - bump json package to avoid issues on cmake 4 2025-09-26 21:53:31 +05:00
Andrej730 c20294b993 build_osx - upload logs artifacts to help debugging 2025-09-26 21:53:31 +05:00
Andrej730 7500631b81 build-rocky - upload logs artifacts to help debugging 2025-09-26 21:53:31 +05:00
Andrej730 7cc1a849a6 build-all.py - opencollada patch to support config package on Unix 2025-09-26 21:53:31 +05:00
Andrej730 4df93af1fd build-all.py - add OpenCOLLADA to IfcGeom dependencies
Otherwise it can be overlooked if you build IfcOpenShell-Python or any other target specifically, it was only built if you run build-all.py without any target arguments.
2025-09-26 21:53:31 +05:00
Andrej730 fc1c8f2071 build-all.py - CGAL to use v5.6.3
5.6.x-branch was removed, see https://github.com/CGAL/cgal/issues/9079
2025-09-26 21:53:31 +05:00
Andrej730 deedffa84e build-all.py - alter rocksdb's deps search only on Windows (da4508e) 2025-09-26 21:53:31 +05:00
Andrej730 e8d924426f build-all.py - add a note about xz requirement 2025-09-26 21:53:30 +05:00
Andrej730 5a3f809d03 build-all.py - fix Python 3.6 support for rocky (566c9af) 2025-09-26 21:53:30 +05:00
Andrej730 58ffd8bf62 ruff ci - check python 3.7 compatibility for build-all.py 2025-09-26 21:53:30 +05:00
Andrej730 b22452aaac build-all.py - print all missing commands simultaneoously 2025-09-26 21:53:30 +05:00
Andrej730 6c05e2ea8c Fix missing yacc in linux builds 2025-09-26 21:53:30 +05:00
Andrej730 a1773b6f46 black . 2025-09-26 21:53:30 +05:00
Andrej730 b3583d4191 typing 2025-09-26 21:52:35 +05:00
Thomas Krijnen 50e8d9f67e submodule 2025-09-26 14:32:34 +02:00
Thomas Krijnen 0d4819d6e7 dllimport/export #6926 2025-09-26 14:30:52 +02:00
Thomas Krijnen ce91d296b6 dllimport/export #6926 2025-09-26 14:24:49 +02:00
Ryan Schultz 21137b9268 closes:#6821 - This modification checks if the layer's material has a Category attribute and if it's not empty, then adds it as a CSS class with the format layer-material-category-{category_name}.
This will give you additional styling granularity when working with material layers, allowing you to target elements not just by their material name but also by their material category in your SVG styling.
2025-09-25 14:57:41 -05:00
Thomas Krijnen 0dc319e510 Fix compilation on older gcc versions required pod type for __thread 2025-09-25 13:17:12 +02:00
Bruno Perdigão 798beb0030 See #7046. Improve snapping inaccuracies in orthographic view 2025-09-24 17:46:55 -03:00
falken10vdl a717b348e0 Fix bounding box best origin default value
Initialize best_origin to 0 for the case no better origin is found.
Cheers!
2025-09-24 14:42:31 -03:00
falken10vdl 14ed4d1d08 feat: add comparison property to ifc_filter in draw_filter and update search query logic 2025-09-24 12:28:20 -03:00
Bruno Perdigão bd3250aff6 See #6883. Keeps each linked aggregate in their original container after refreshing. 2025-09-24 09:46:02 -03:00
Bruno Perdigão 1ee5bb73fa Fix RefreshLinkedAggregates renaming of aggregates 2025-09-24 09:46:02 -03:00
Thomas Krijnen 9a6dc54f6c Thread local current_product_ #7155 2025-09-24 13:56:35 +02:00
Thomas Krijnen ab59173135 Add a stream2_from_string() (mostly for wasm) 2025-09-23 11:32:52 +02:00
Thomas Krijnen b6abb24858 Support single circ/elip compcurves #7149 2025-09-23 11:11:42 +02:00
Thomas Krijnen 2b24d5ebe5 Initialize header schema in constructor and not statically #7131 2025-09-23 10:26:01 +02:00
Ryan Schultz 10a99fff05 Closes #7133: when activating a drawing, Bonsai will turn on/off 'Display in Render' when it turns on/off 'Hide in Viewport'. 2025-09-22 20:12:24 -05:00
Ryan Schultz 64aa1d07fb extend #6777 to have elevation print out as well. 2025-09-21 16:26:36 -05:00
Bruno Perdigão 730eafa74f IfcMaterialLayerSetUsage - Disable custom offset properties when the checkbox is unchecked 2025-09-19 17:41:03 -03:00
Andrej730 c077727374 Fix header data attr to match Blender prop names (559636e) 2025-09-19 19:07:44 +05:00
Andrej730 2e4241e435 typing 2025-09-19 19:04:53 +05:00
Andrej730 8a03a1379e cmake - match ifc4x3 for examples more precisely 2025-09-19 18:56:15 +05:00
Andrej730 8bb7ef5e25 cmake - only build examples if 2x3 is present in SCHEMA_VERSIONS
As examples currently require ifc2x3
2025-09-19 18:56:15 +05:00
Andrej730 da4508ef9a cmake - fix issue rocksdb locating zstd on Windows
See https://github.com/facebook/rocksdb/pull/13975 for the details.
2025-09-19 18:44:18 +05:00
Thomas Krijnen f3dedba320 Map opt<bool> in taxonony to none,false,true 2025-09-19 13:24:02 +02:00
Thomas Krijnen f659b9bb7b Fix exception in file.from_string() 2025-09-19 13:24:02 +02:00
Andrej730 488dee82d7 bim.create_all_shapes - add description and more readable output 2025-09-19 13:16:11 +05:00
Andrej730 3c4020be8d create_all_shapes - expose geom library selection to UI
Example - https://files.catbox.moe/oyv9bi.png
2025-09-19 13:16:11 +05:00
Thomas Krijnen ede4e49c0c submodule 2025-09-19 09:54:01 +02:00
Andrej730 3d2f361585 cmake - fix error with occt package (1857d0624) 2025-09-18 18:36:48 +05:00
Andrej730 4505ed1c98 cmake - remove trailing spaces 2025-09-18 18:36:48 +05:00
Andrej730 4cbad8804f cmake - use OpenCASCADE_VERSION as a version source if available 2025-09-18 18:36:48 +05:00
Andrej730 3ec7b71565 build-all.py - use find_package for CGAL 2025-09-18 17:53:35 +05:00
Andrej730 c0ec2e7e2b cmake - use find_package if explicit paths are not provided 2025-09-18 17:53:35 +05:00
Andrej730 048a94ddc5 build-all.py - bump json version and use find_package 2025-09-18 17:53:34 +05:00
Andrej730 ec43415822 cmake - support find_package for json 2025-09-18 17:53:34 +05:00
Andrej730 235eb3c83c build-all.py - use find_package for eigen3 2025-09-18 17:53:34 +05:00
Andrej730 4d0737c49b build-all, run-cmake - pass BOOST_ROOT as cmake prefix path 2025-09-18 17:53:34 +05:00
Andrej730 b499686c7c build-all.py - use find_package for occt 2025-09-18 17:53:34 +05:00
Andrej730 1857d06245 cmake - use find_package for occ if variables are not provided
cmake configs seems to be provided with the default installation, so `find_package` should do the job that `find_path` and `find_library` did previously.
2025-09-18 17:53:33 +05:00
Andrej730 663d233e3c build-all.py - document more env variables 2025-09-18 17:53:33 +05:00
Andrej730 fa1936c10a build-all.py - avoid building 3d viewer for OCCT 2025-09-18 17:53:33 +05:00
Andrej730 8c89ba497b build-all.py - use find_package for opencollada 2025-09-18 17:20:57 +05:00
Andrej730 2284ddd68c build-all.py - use find_package for libxml2 2025-09-18 17:20:55 +05:00
Andrej730 8daf6b0b04 build-all.py - use find_package for swig 2025-09-18 17:20:52 +05:00
Andrej730 e7a6f86299 build-all.py - don't break in case if some optional dependencies are missing 2025-09-18 14:07:58 +05:00
Andrej730 cae711b393 build-all.py - mention ssl requirement for Python (4ee6863) 2025-09-18 14:07:58 +05:00
Andrej730 566c9afa77 build-all.py - print live logs to the log file 2025-09-18 14:07:58 +05:00
Andrej730 867852688e cmake - use find_package for hdf5 as a general fallback
Previously we were setting `HDF5_LIBRARIES` explicitly, but I'm not sure if really worked, since we never set `HDF5_INCLUDE_DIR` and user would have to provide it manually either way.
`find_package(HDF5)` will search for default paths and will set `HDF5_LIBRARIES` and `HDF5_INCLUDE_DIR` automatically.
2025-09-18 14:07:58 +05:00
Andrej730 94851016d7 build-all.py - use find_package for hdf5 2025-09-18 14:07:58 +05:00
Andrej730 1dd3c298df build-all.py - explicitly disable xlib
I assume it's not needed, but Desktop Ubuntu seems to trying to build it anyway and fails since `libx11-dev` is missing.
2025-09-18 14:07:58 +05:00
Andrej730 c384ac26cd build-all.py - use pcre2 for swig
As it was needed for more recent swig version. Bumped swig in ae771cb without knowing this, so essentially building swig with build-all.py was broken for a bit.
2025-09-18 14:07:58 +05:00
Andrej730 a57080da74 build-all.py - ensure yacc is installed 2025-09-18 14:07:58 +05:00
Andrej730 71e59fe4c2 build-all.py - remove 'rel-' from swig tags
As they were used by the older versions and no longer provided after 4.1.0, see https://github.com/swig/swig/tags
2025-09-18 14:07:58 +05:00
Andrej730 aedae0b3c1 build-all.py - hdf5 to use cmake instead of ctest
After version 1.13.0 it seems hdf5 stopped publishing builds on the ftp and they also stopped publishing `CMake-hdf5-*` builds.
Switching to cmake, it will also make it consistent with build-deps.cmd
2025-09-18 14:07:58 +05:00
Andrej730 658f9b87a5 build-deps.cmd - bump hdf5 to match build-all
Has to skip hdf5 1.13.0 because it had a bug in it's cmake config setup, so `find_package` couldn't recognize, and the issue was fixed in 1.13.1.
2025-09-18 14:07:58 +05:00
Andrej730 fa9105e174 black . 2025-09-18 14:07:58 +05:00
Andrej730 d0d5f972df cmake - use find_package for rocksdb and zstd 2025-09-18 14:07:58 +05:00
Bruno Perdigão f5220fba56 Add custom offset to walls IfcMaterialLayerSetUsage 2025-09-15 17:08:25 -03:00
Bruno Perdigão 365f4f114b Add custom offset to slab IfcMaterialLayerSetUsage 2025-09-15 17:08:25 -03:00
Thomas Krijnen b5b64d6c4a ifc5d.quantify: lookup entity names directly; index into dict rather than iterate in simple cases 2025-09-15 18:29:58 +02:00
Andrej730 632e45af18 Fix missing platform in flask wheels (6497d5f) 2025-09-15 18:27:22 +05:00
Andrej730 559636ef0b IFC Header UI - display author and additional info in case if it's available 2025-09-15 18:27:21 +05:00
Andrej730 5a2ed576c4 Fix ids.from_string always breaking on validation (4a9cf43)
Since `tree` is never provided.
2025-09-15 18:27:21 +05:00
Andrej730 cc7732ecbf Replace .wrapped_data.header with .header (dfaa8d5) 2025-09-15 18:27:21 +05:00
Andrej730 a3c6e295c8 ifcopenshell_wrapper.pyi - remove HeaderEntity
Recently (e.g. ce02e7a) header entity was replaced with a generic `entity_instance`.
2025-09-15 18:27:20 +05:00
Andrej730 87069f3ac3 Groups/Systems UI - expand parent group when child group is added
So user can immediately see the added item, it seems more intuitive.
2025-09-15 18:27:20 +05:00
Andrej730 6469f79343 Groups/Systems UI - removing item to update uilist index 2025-09-15 18:27:20 +05:00
Andrej730 a3b04997ef Systems UI - display icons for each system type in the dropdown
Example - https://files.catbox.moe/rnyuro.png
2025-09-15 18:27:20 +05:00
Andrej730 4c1af9e2f5 Systems UI - display hierarchy of systems #7062 2025-09-15 18:27:19 +05:00
Andrej730 646f2f2e32 Add tool for 'group' module 2025-09-15 18:27:19 +05:00
Andrej730 629d6c85ae assign/unassign group - add info message 2025-09-15 18:27:19 +05:00
Andrej730 be66d4884d typing 2025-09-15 18:27:19 +05:00
Andrej730 5de96c9f95 Systems UI - support adding child systems #7062 2025-09-15 18:27:18 +05:00
Thomas Krijnen c661bb62ca Rework header access in exception handling 2025-09-15 12:01:13 +02:00
Thomas Krijnen b1b95ec2db Conditional compilation in wrapper 2025-09-14 19:15:31 +02:00
Thomas Krijnen 5f50e6fcf1 Conditional compilation in wrapper 2025-09-14 19:15:25 +02:00
Thomas Krijnen 23b48c43a6 Conditional compilation 2025-09-14 13:53:33 +02:00
Thomas Krijnen 75e1d0e3c7 Update CMakeLists.txt - wasm build add "4x3_add2" 2025-09-14 11:38:33 +02:00
Sayan Jyoti Das 0d942f968a fix: cleanup pyodide tmpdir properly 2025-09-14 07:13:54 +10:00
Thomas Krijnen b5ccb93618 Fix Outer bound check in serializer #7099 2025-09-13 14:24:03 +02:00
Andrej730 41fb8ca583 Bump IOS build in Bonsai
Since now we have additional `readonly` argument in `ifcopenshell.open` and we need a new build to support it.
2025-09-12 20:11:07 +05:00
Andrej730 a86904dd41 ifcopenshell.open overload signature to consider new readonly argument 2025-09-12 20:11:07 +05:00
Andrej730 8a82343e27 typing - fix annoying module symbol getting into ifcopenshell.open retun types 2025-09-12 20:11:07 +05:00
Andrej730 8a841b449a build-deps - download releases instead of cloning repo for rocksdb/zstd 2025-09-12 20:11:07 +05:00
Andrej730 24bbe9fb69 cmake - fix typo 2025-09-12 20:11:07 +05:00
Andrej730 9a38455465 black . 2025-09-12 20:11:06 +05:00
Thomas Krijnen ced52862a1 Fix inst id based line lookup in log_internal_cpp_errors() 2025-09-12 16:25:37 +02:00
Thomas Krijnen f0cd8c59c7 Build pyodide wheel without rocksdb 2025-09-12 16:10:19 +02:00
Thomas Krijnen e795cec56b win build: Update instal dir checks 2025-09-11 19:54:51 +02:00
Thomas Krijnen b1248be1b8 wopts.disableWAL for 3x better write performance 2025-09-11 19:10:05 +02:00
Thomas Krijnen 79672f795e Merge pull request #6203 from IfcOpenShell/tfk-rocksdb-storage
RocksDB instance/file storage
2025-09-11 18:39:18 +02:00
Thomas Krijnen 6ec12fe7c7 :Revert "Temporary Python 3.9 compatibility"
This reverts commit 0aae57620f.
2025-09-11 18:38:07 +02:00
Thomas Krijnen 4ee6863d43 nix build script: install some dependencies required for import base package 2025-09-11 18:34:54 +02:00
Andrej730 6497d5f78e Bonsai - add Flask required by ifctester web ui 2025-09-11 18:03:38 +05:00
Andrej730 5b96df89ea Fix error loading ifctester webapp (infinite "initialize environment...")
Browser was stuck trying to initialize the environment, because of the error below:
[worker] Received message: {type: 'init', payload: {…}, id: '9dLz/0eBQDa0xTQORXfdUg/0'} :5000/pyodide/pyodide.mjs:1  Failed to load module script: Expected a JavaScript-or-Wasm module script but the server responded with a MIME type of "text/plain". Strict MIME type checking is enforced for module scripts per HTML spec.
2025-09-11 18:03:38 +05:00
Andrej730 ce4ad3c3a7 ifctester webapp makefile - fix issue on windows 2025-09-11 18:03:38 +05:00
Thomas Krijnen 8d714ed3bc win build zstd paths 2025-09-11 13:56:11 +02:00
Thomas Krijnen 9d99de2340 file.reset_identity_cache() function for adv use cases 2025-09-11 13:56:11 +02:00
Thomas Krijnen 41f9b1522e Pass ZSTD to ifopsh build 2025-09-11 13:56:11 +02:00
Thomas Krijnen 42b1cf039d Revert "Debugging action"
This reverts commit e8b1b6f783.
2025-09-11 13:56:11 +02:00
Thomas Krijnen db832946e6 Update test_validate_rocksdb.py 2025-09-11 10:07:39 +02:00
Thomas Krijnen 05e8680b48 CMAKE_INSTALL_LIBDIR 2025-09-11 09:36:42 +02:00
Thomas Krijnen e8b1b6f783 Debugging action 2025-09-11 09:24:40 +02:00
Thomas Krijnen 9367da61a0 PORTABLE=1 for rocksdb 2025-09-11 09:22:54 +02:00
Thomas Krijnen c7e53e7762 Try different zstd_ config opts 2025-09-11 08:42:44 +02:00
Thomas Krijnen 2260f9983c Try different zstd_ config opts 2025-09-10 21:47:07 +02:00
Thomas Krijnen e68cc7201c Call init_locale() when streaming 2025-09-10 21:42:55 +02:00
Thomas Krijnen e2b39620a0 Test for supported compression 2025-09-10 21:42:30 +02:00
Andrej730 36da945e2d Keep viewport position even if some previous drawing camera is active #7101
during alt+click on drawing activation button
2025-09-10 17:46:01 +05:00
Andrej730 371aeed3f6 Move duplicated properties to ActivateDrawingBase 2025-09-10 17:46:01 +05:00
Andrej730 86902c159b Status UI status assignment - add test 2025-09-10 17:46:01 +05:00
Andrej730 f4be8812e2 Status UI - display active object status using icons
Example - https://files.catbox.moe/ucrtfg.mp4
2025-09-10 17:46:00 +05:00
Andrej730 12bcf1d2c7 bump svgfill 2025-09-10 17:45:53 +05:00
Andrej730 10e805b3f1 black . 2025-09-10 15:34:06 +05:00
Andrej730 1e9239b352 Fix error searching for annotation types #7103 2025-09-10 14:59:46 +05:00
Andrej730 7bea3d9d10 Annotation types - use natural sorting, make 'Untyped' appear always on top 2025-09-10 14:59:45 +05:00
Andrej730 e9bad17502 Fix broken scripts download urls #7107
They were hardcoded and `:download:` wasn't used, so sphinx never copied the scripts to be available to download.
They also were always pointing to main docs website, so they would show up on unstable documentation too, and I guess because they were hardcoded, there were no warnings when those files were recently moved.
2025-09-10 14:40:59 +05:00
Thomas Krijnen be79d3712d Initialize header after storage 2025-09-10 11:37:17 +02:00
Thomas Krijnen e13dbd4767 Take note of zstd cmake path 2025-09-10 11:14:16 +02:00
Thomas Krijnen c61d4bb70a build-all tuple typo 2025-09-10 10:37:05 +02:00
Thomas Krijnen ee632b7c37 Cmake libxml compatibility 2025-09-10 10:36:08 +02:00
Thomas Krijnen f86e5abb85 Cmake libxml compatibility 2025-09-10 10:17:59 +02:00
Thomas Krijnen b5275f5ab2 black 2025-09-10 10:08:14 +02:00
Thomas Krijnen a925226cbc Merge remote-tracking branch 'origin/v0.8.0' into tfk-rocksdb-storage 2025-09-10 10:06:01 +02:00
Thomas Krijnen 06a89f9b17 Add zstd to build-all.py 2025-09-10 10:05:43 +02:00
Thomas Krijnen 231d047ce9 Capture SPF specific errors in validation test 2025-09-10 09:40:20 +02:00
Thomas Krijnen a50fc3184b Minor attribute count fixes 2025-09-10 09:13:16 +02:00
Thomas Krijnen de8c8d3bed Rocksdb header parsing 2025-09-10 09:10:59 +02:00
Thomas Krijnen f8e523daff h| i| t| serialization consistency 2025-09-10 09:10:32 +02:00
Thomas Krijnen 8ca9bd63dc read-only validate 2025-09-10 09:10:03 +02:00
Thomas Krijnen 761b69ebfe test_validate_rocksdb.py 2025-09-10 09:09:48 +02:00
Massimo Fabbro e28979ceb7 See #6570. Better column name for import csv.
Change column name for import rate from csv from Rate Cost Schedule to RateSchedule
2025-09-10 06:50:50 +02:00
Richard Brice d552f247fa Fixed a typo mapping horizontal curve segments to geometry 2025-09-09 13:08:31 -07:00
Richard Brice 8ef083e3af Fixes position of zero-length segment 2025-09-09 12:13:09 -07:00
Thomas Krijnen 49bbf0cb9e Free memory 2025-09-09 13:26:37 +02:00
Thomas Krijnen a2f0bc8a17 Further implement serialization 2025-09-09 13:26:21 +02:00
Thomas Krijnen 62295beab2 Run black 2025-09-09 13:26:01 +02:00
Thomas Krijnen a0b93265c2 Rocksdb storage -- ifcopenshell.file compatibility 2025-09-09 13:25:32 +02:00
Andrej730 338d3cf089 Fix test_package after 12c795a 2025-09-09 16:07:24 +05:00
Andrej730 39702cc543 Fix failing ifc2x3 tests after 3e5a2e5
Also added ifc4x3 tests
2025-09-09 15:42:32 +05:00
Andrej730 a9c0c1f4ba control.unassign_control to support batching 2025-09-09 15:42:32 +05:00
Andrej730 abfb56350d control.assign_control to support batching 2025-09-09 15:42:32 +05:00
Andrej730 fcb263f59a util.element.get_controls 2025-09-09 15:42:31 +05:00
Andrej730 679fa6d876 Option to change text symbol from general text editing UI
Example - https://files.catbox.moe/kxyepa.mp4
2025-09-09 15:42:31 +05:00
Andrej730 876c5ac2e6 typing 2025-09-09 15:42:31 +05:00
Andrej730 29a86c6748 Fix ruff UP041 2025-09-09 15:42:31 +05:00
Andrej730 a4a04e6941 black . 2025-09-09 15:42:30 +05:00
Ryan Schultz 9aafa32008 Provide a little tolerance when using Cntl+e. 2025-09-08 14:28:36 -05:00
Ryan Schultz 4f8e37d733 Added current property, in search, as a lot of times your search is relative to what it was before. 2025-09-07 11:03:21 -05:00
Dion Moult 311f279b61 Don't assume /tmp exists, and cd - back out to prevent cp errors during pyodide-download 2025-09-07 21:47:57 +10:00
Sayan Jyoti Das 3ad7c52cc4 build step for pyodide 2025-09-07 21:08:47 +10:00
Sayan Jyoti Das a5d9fe551a update webapp + bonsai integration 2025-09-07 21:08:47 +10:00
Sayan Jyoti Das 1672a7da32 add proper shutdown handling 2025-09-07 21:08:47 +10:00
Sayan Jyoti Das 10dcd9a923 add IfcTester webapp to Bonsai UI and websocket server 2025-09-07 21:08:47 +10:00
Sayan Jyoti Das be72887216 add build support for new IfcTester webapp 2025-09-07 21:08:47 +10:00
Massimo Fabbro 5400712a7a Black 2025-09-06 07:20:48 +02:00
Massimo Fabbro 1dea8ca37b See #6570.Keep ifc5d independent from Bonsai 2025-09-06 07:20:48 +02:00
Andrej730 f945a94fed Classifications UI - display placeholder name for unnamed classifications 2025-09-05 19:10:36 +05:00
Andrej730 14ae8680e3 Fix find_package libxml compilation for more recent versions
Noticed compiling against libxml2 2.13.8 package that it's trying to use dynamic libs by default if `LIBXML_STATIC` is not defined. Adding `LIBXML2_DEFINITIONS` helps.
2025-09-05 19:10:36 +05:00
Andrej730 9ec0732a84 Add simple test for loading ifcsqlite to Bonsai 2025-09-05 19:10:36 +05:00
Andrej730 7b490bbc69 Bonsai - support loading element types from ifcsqlite 2025-09-05 19:10:36 +05:00
Andrej730 0cf3bb3da9 ifc2sql - support saving element types geometry 2025-09-05 19:10:36 +05:00
Andrej730 062bf8e60b typing 2025-09-05 19:10:36 +05:00
Andrej730 f457a7d831 import_ifc - remove mesh_shapes
Was introduced in c3a36b7 and unused now.
2025-09-05 19:10:35 +05:00
Andrej730 1861baaaa9 import_ifc - remove type_products
It was introduced in 85e55b6 to keep track of type relationships, but seems to be deprecated awhile ago.
2025-09-05 19:10:35 +05:00
Andrej730 39253c6a6d create_element_types - remove unnecessary check
Was introduced in 0ee9329, but no longer needed since `None` values are excluded from this set after 10f8453
2025-09-05 19:10:35 +05:00
Andrej730 21137de8a0 Fix error reapplying selection during assign_class #7082
It appeared in case if user had IfcTypeProduct collection disabled.
2025-09-05 18:27:24 +05:00
Andrej730 a53017d9dc Fix error editing IfcClassification without provided ReferenceTokens after e3ea12a #7091
Actually after 2ec2ac0 there's no need for json serialization as we support working with string subitems natively.

For some reason previously it was using get_georeference_props to add attributes, I guess it a typo that happened awhile ago.
2025-09-05 17:44:07 +05:00
Thomas Krijnen 70286f2bcb Minor 2025-09-04 16:49:18 +02:00
Thomas Krijnen 26467a1d0e Check for valid stream before streaming 2025-09-04 16:49:00 +02:00
Thomas Krijnen 09f9b23153 Harmonize and complete serialization of aggregates of aggregates 2025-09-04 16:48:41 +02:00
Thomas Krijnen 6ac95e1ed3 Access to underlying storage model in python 2025-09-04 16:47:56 +02:00
Massimo Fabbro 25c0ed6759 Black 2025-09-04 16:33:03 +02:00
Massimo Fabbro f75d629990 See #6570. Now it is possible to define the rate in import csv
In order to assign the rate in the csv import, use the columns 'Rate cost schedule' and 'RateID'
2025-09-04 16:33:03 +02:00
Andrej730 b492110652 Temporarily for ifcsqlite disable calculating model offset and loading element types #7085
To keep models loadable
2025-09-04 19:09:20 +05:00
Andrej730 942cb586b2 Bonsai - fix loading ifcsqlite file after 497542d #7085 2025-09-04 19:09:20 +05:00
Andrej730 49b9f99557 ifcopenshell.sqlite - add mvd_str 2025-09-04 19:09:19 +05:00
Andrej730 15b69bfa98 sql, stream - define wrapped_data to provide more clear errors 2025-09-04 19:09:19 +05:00
Andrej730 5f964bd33c stream - remove trailing spaces 2025-09-04 19:09:19 +05:00
Andrej730 274a5cbfad sql, stream - provide schema_identifier to avoid errors 2025-09-04 19:09:19 +05:00
Andrej730 b6fa1759ef sqlite_entity - define file 2025-09-04 19:09:19 +05:00
Andrej730 f016d72787 cmake - support find_package(CONFIG) for libxml2 dependency 2025-09-04 19:09:19 +05:00
Andrej730 8c12bd0322 Reuse builder.create_axis2_placement_3d 2025-09-04 19:09:18 +05:00
Andrej730 90e6838ddb typing 2025-09-04 19:09:18 +05:00
falken10vdl 5304072892 dms2dd and dd2dms - fix doc-strings, refactor, add tests (#6763) 2025-09-04 11:55:13 +00:00
Thomas Krijnen 59a5bf2344 RocksDB zstd encryption; cache tuning; readonly open mode 2025-09-03 11:11:55 +02:00
Andrej730 d4918edcd9 Fix broken literals reorder #6718 2025-09-02 18:28:00 +05:00
Andrej730 d901506029 Reordering and removing text literals - update viewport
So user can see the change right away.
2025-09-02 18:28:00 +05:00
Andrej730 aaf980b6b3 ifcwrap cmake - override _d interface suffix in debug builds (d004410cc)
https://discourse.cmake.org/t/a-correct-way-to-add-d-debug-prefix-for-debug-python-extensions-on-windows/15132
2025-09-02 18:27:59 +05:00
Andrej730 d419e50ece active_bsdd_property - make implied type more explicit 2025-09-02 18:27:59 +05:00
Andrej730 d5ff48fbc9 Fix "Copy Attribute Name" sometimes missing from attributes context menu
Due to a possibly unbound `url` variable this button sometimes went missing https://files.catbox.moe/2r8adp.png
2025-09-02 18:27:59 +05:00
Andrej730 99ca1c7eb4 Add description for pset enum properties too
Example - https://files.catbox.moe/ysmw6v.png
2025-09-02 18:27:59 +05:00
Andrej730 df4f565176 Fix missing IFC descriptions for already added pset props
Example - https://files.catbox.moe/dg1mzk.png
2025-09-02 18:27:58 +05:00
Andrej730 ed37ac3066 resolve_data_path_to_data_attr - fix typo in doc-string 2025-09-02 18:27:58 +05:00
Andrej730 1433240ae6 Fix text edit popup UI going out of sync with general text editing UI (a98cddf) 2025-09-02 18:27:58 +05:00
Andrej730 d9fe751163 Remove update_text_value and fix tests after refactor 2025-09-02 18:27:58 +05:00
Andrej730 555621ceae Avoid storing transient ui values in BIMTextProperties #4699
To avoid crashes and either way we stored the same data twice - once bim text props (and they were updated on each data refresh) and then again in data.py. Now it's going to use just data.py
2025-09-02 18:27:57 +05:00
Andrej730 d7ddbd2b99 typing 2025-09-02 18:27:57 +05:00
Richard Brice eba3ced5fe Fixes angle unit conversion when creating horizontal alignment from PI 2025-09-01 15:32:11 -07:00
Andrej730 d36205ea8b svgfill - bump 2025-09-01 21:08:46 +05:00
Thomas Krijnen a831884ee6 Free rocksdb iterators 2025-09-01 14:32:13 +02:00
Thomas Krijnen 01b64674ab Init max_id_ 2025-09-01 13:25:48 +02:00
Thomas Krijnen 78958567cf Insert consecutive numbering test into random test 2025-09-01 13:25:37 +02:00
Thomas Krijnen e6ea58cd72 Implement get_inverse_indices on rocksdb 2025-08-31 21:27:21 +02:00
Thomas Krijnen 6c607241a2 Clear merge output 2025-08-31 21:26:54 +02:00
Thomas Krijnen 18ad13cb8b Merge remote-tracking branch 'origin/v0.8.0' into tfk-rocksdb-storage 2025-08-31 16:06:07 +02:00
Thomas Krijnen 55e54f0b37 Re-add token offset to failing declaration lookup in order to be picked up by validate.py 2025-08-31 16:01:28 +02:00
Thomas Krijnen 453949ee01 Correctly wire up get_info2 2025-08-31 15:53:01 +02:00
Thomas Krijnen e4d08ce6b7 Don't raise exception in file constructor 2025-08-31 15:52:46 +02:00
Thomas Krijnen ce02e7a2a0 HeaderEntity does not exist anymore 2025-08-31 15:51:58 +02:00
Thomas Krijnen f43ddf2cd5 Defer execution of error details 2025-08-31 15:51:34 +02:00
Thomas Krijnen 9d0eb4f994 Merge pull request #7058 from Krande/feat/IfcFixedReferenceSweptAreaSolid
feat: improved support for IfcFixedReferenceSweptAreaSolid
2025-08-31 10:57:49 +02:00
smr 67fb569669 style: fix formatting with black 2025-08-30 20:04:58 +02:00
smr da9be7cff0 Fix PythonOCC >=7.8.0 compatibility in serialize_shape function
Resolves issue #6099: PythonOCC >=7.8.0 changed WriteToString() method
signature, causing TypeError in ifcopenshell.geom.serialise().

This fix uses signature inspection to detect the method signature:
- For PythonOCC < 7.8.0: Use WriteToString() (no parameters)
- For PythonOCC >= 7.8.0: Fall back to Write() method
- Graceful handling of signature inspection failures

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-30 20:04:58 +02:00
Richard Brice a839183ac2 Fixes referent sorting 2025-08-29 14:37:17 -07:00
Richard Brice 34bf374047 Corrects nesting of referents 2025-08-29 12:48:16 -07:00
Andrej730 43c35eaf24 ifcfm - fix error running without pandas 2025-08-29 23:50:27 +05:00
Andrej730 d91362a6f7 run-cmake - use swig install dir 2025-08-29 21:13:31 +05:00
Andrej730 76e3b8dd55 Bonsai - fix error appending curve/fill area styles
It would try to append them as Blender material and would fail, just import them as ifc elements.

Noticed testing #7066
2025-08-29 19:44:04 +05:00
Andrej730 d004410ccb ifcwrap cmake - add _d debug postfix required on Windows 2025-08-29 19:44:03 +05:00
Andrej730 abbc5c2159 run-cmake.bat - use opencollada install dir
instead of providing include/library dirs explicitly
2025-08-29 19:44:03 +05:00
Andrej730 ae771cb37d build-deps.cmd - bump swig version to 4.1.0 and use cmake
4.1.0 will match build-all.py and it's the first version to use cmake, so we can quickly build swig ourselves
2025-08-29 19:44:03 +05:00
Andrej730 b1a0b7a7d0 cmake - also try to use find_package(OpenCOLLADA) 2025-08-29 19:44:03 +05:00
Andrej730 556eb128d6 build-deps.cmd - add example use 2025-08-29 19:44:03 +05:00
Thomas Krijnen dfaa8d510c authorisation -> authorization in header schema for compatibility 2025-08-29 16:08:42 +02:00
Thomas Krijnen 93c2a4fe66 That's what you get for not using a visitor 2025-08-29 14:15:58 +02:00
Thomas Krijnen df726a2d61 Initialization in various other constructor forms 2025-08-29 14:13:21 +02:00
Thomas Krijnen 2cf5011813 Missing f-string f 2025-08-29 14:12:39 +02:00
Thomas Krijnen 9330e73a70 Call process_deletion_inverse() 2025-08-29 13:48:00 +02:00
Thomas Krijnen a73c60a467 Initialize guid map in case of empty file creation 2025-08-29 13:47:48 +02:00
Thomas Krijnen f29b0d776a Resiance in unpacking 2025-08-29 11:33:47 +02:00
Thomas Krijnen e6a7c5334b Resiance in unpacking 2025-08-29 11:10:08 +02:00
Thomas Krijnen 54b448cdb4 mkdir just in case 2025-08-29 10:10:28 +02:00
Thomas Krijnen 6bbff22a45 Update yml paths 2025-08-29 10:02:15 +02:00
Thomas Krijnen 51ae3f4c5e Update CI paths 2025-08-29 09:26:23 +02:00
krande df1b748b39 minor update 2025-08-28 20:05:45 +02:00
Thomas Krijnen 01ea1f627d Fix MacOS toolset to 10.15 due to std::filesystem 2025-08-28 17:06:12 +02:00
Andrej730 0d3545c621 bim.select_library_file - shortcut to reload the library
Location - https://files.catbox.moe/an9hif.png
2025-08-28 19:11:52 +05:00
Andrej730 12cfa21d9b Fix missing project library ui data refresh
E.g. it wasn't updated on undo
2025-08-28 19:11:52 +05:00
Andrej730 c8a60cc4d5 bim.refresh_library - add description 2025-08-28 19:11:51 +05:00
Andrej730 6702e912e7 bim.save_library - add info message for more responsive ui 2025-08-28 19:11:51 +05:00
Andrej730 b5aeab6404 Remove project library from UI #7057
Example - https://files.catbox.moe/940mhn.mp4
2025-08-28 19:11:51 +05:00
krande 7eea995b88 Remove load_ifc_occ_shape and related OpenCASCADE-specific code from test_sweeps.py. Simplify tests by focusing on mesh-based geometry validation. Clean up imports and unused assertions. 2025-08-28 15:41:20 +02:00
Thomas Krijnen d9265765c5 Show hdf5 build errors 2025-08-28 15:40:38 +02:00
Thomas Krijnen d2a560d144 Try with HDF5 1.13.0 2025-08-28 15:40:21 +02:00
Thomas Krijnen 974e62290c Try without installing cmake 2025-08-28 15:34:01 +02:00
Thomas Krijnen 1a1583405c USE_RTTI=On 2025-08-28 15:28:28 +02:00
Thomas Krijnen ef10c23842 -lstdc++fs on gcc < 9 2025-08-28 15:23:19 +02:00
krande 77acfd7069 Refactor tests: update input path resolution, optimize imports, and enhance load_ifc_occ_shape.
Simplify path definitions in `test_write.py` and `test_open.py`. Replace `typing` with `collections.abc` for `Sequence` usage in `test_sweeps.py` and adjust type hints to use Python's generic collections. Add optional verbosity to `load_ifc_occ_shape` and refine geometry test assertions. Update `simple_sweep_2.ifc` fixtures for consistency with test expectations.
2025-08-28 13:16:07 +02:00
krande 79546807d9 fix lint 2025-08-28 13:15:47 +02:00
krande e14974a1b5 Add linting feature and update test configurations in pixi.toml
Introduces a new `lint` feature with `ruff` and `black` dependencies. Extends test setup with additional dependencies and tasks for building, testing, and installation. Cleans up `.gitignore` and removes unused entries from `pixi.lock`.
2025-08-28 13:15:33 +02:00
Thomas Krijnen 4b5aa1221c Run black 2025-08-28 11:35:42 +02:00
Thomas Krijnen b448bea279 build-all correct install path 2025-08-28 11:28:23 +02:00
Thomas Krijnen a219d335ea to_string() default to True 2025-08-28 11:15:53 +02:00
Thomas Krijnen 47f7afb33b Help SWIG understand header entities 2025-08-28 11:15:36 +02:00
Thomas Krijnen 3245d0af5c Serialization of header entities with #0= 2025-08-28 11:15:18 +02:00
Thomas Krijnen b6712602e2 Retain exact attribute counts in rdb as parsed 2025-08-28 11:15:05 +02:00
Thomas Krijnen 2c6956ec02 Finish (de)deserialization 2025-08-28 11:14:11 +02:00
Thomas Krijnen 322fbe27d6 Python 3.10 compatibility 2025-08-28 11:13:42 +02:00
Thomas Krijnen a65fa1e606 Fix failing inverse test 2025-08-28 09:37:09 +02:00
Andrej730 71a6bf25bc Fix error loading IFC file without contexts #7060 (8d3aa98) 2025-08-28 11:09:46 +05:00
Andrej730 43fbdf57c8 black . 2025-08-28 11:09:45 +05:00
Richard Brice 39100b7c97 Fixes problems with referents 2025-08-27 11:32:25 -07:00
krande 1cd32be2fc Refactor test_sweeps.py: remove _is_swept_shape, restructure test directories, update test fixtures, and adjust assertions for geometry validation. Extend sweep_along_curve constructor to support fixed reference direction. 2025-08-27 19:37:47 +02:00
Richard Brice c090073858 Removes assumption about which nest contains alignment layout segments 2025-08-27 07:35:49 -07:00
Thomas Krijnen c97a1faecd Initialize file schema to nullptr, wire up guid map 2025-08-27 15:14:20 +02:00
krande 9dd7b488d6 Refactor and extend swept shape tests; adjust comments and import structure
Improves formatting and readability in `test_sweeps.py`, adjusts imports and comments, and adds assertions for geometry validation in `simple_sweep_1.ifc` and `simple_sweep_2.ifc` tests. Updates code comments in `IfcFixedReferenceSweptAreaSolid`.
2025-08-27 13:55:42 +02:00
Thomas Krijnen 4dca91c56e Compile rocks with -fPIC 2025-08-27 13:25:13 +02:00
Thomas Krijnen b92871818a Fix MacOS toolset to 10.13 due to rocksdb alignment requirements 2025-08-27 13:23:43 +02:00
krande d01bf9690d Add test and input for simple_sweep_2.ifc; extend constructor for sweep_along_curve to support fixed reference swept area solids
Includes `simple_sweep_2.ifc` test input, geometry validations in `test_sweeps.py`, and a new constructor for `sweep_along_curve` to handle directrix-based sweeps.
2025-08-27 12:11:02 +02:00
krande 604e0b0d94 Update .gitignore in test directory to include *.tmp files 2025-08-27 11:53:34 +02:00
krande 8420b98f3f Simplify IfcFixedReferenceSweptAreaSolid position check logic 2025-08-27 11:52:56 +02:00
Thomas Krijnen 46693baacf No walrus 2025-08-27 11:49:05 +02:00
Thomas Krijnen c665c9d7e5 Correction for previous commit 2025-08-27 11:33:01 +02:00
Thomas Krijnen b05c83e612 Qualify return type to keep older versions of swig happy 2025-08-27 11:05:59 +02:00
Thomas Krijnen a958f1373c Eliminate some warnings 2025-08-27 11:03:16 +02:00
Thomas Krijnen b2c20b15b4 Move definitions 2025-08-27 10:32:58 +02:00
Thomas Krijnen b9b12520f7 Compile rocksdb in ci.yml 2025-08-27 10:27:57 +02:00
Thomas Krijnen 11a048bf18 Rocksdb build fixes 2025-08-27 10:22:52 +02:00
Thomas Krijnen 5a06715843 Update examples 2025-08-27 10:21:45 +02:00
krande 6d9650e826 Update CMake presets: remove schema version 4 2025-08-26 21:24:54 +02:00
krande 2369f72798 Improve IfcFixedReferenceSweptAreaSolid handling and add swept shape tests
Enhances geometry processing for swept area solids by integrating matrix transformations. Includes new utility `_is_swept_shape` for topology analysis, extends testing with `load_ifc_occ_shape`, and updates schema versions in CMake presets.
2025-08-26 21:24:40 +02:00
krande 234cb76cd7 add 1 more test 2025-08-26 20:48:05 +02:00
Thomas Krijnen 0cd5c673c3 build-all.py rocksdb 2025-08-26 19:38:42 +02:00
Richard Brice 1de5940294 Separates referent and alignment layout usages into different referents 2025-08-26 08:02:57 -07:00
krande a0cc94a614 Add test for IfcFixedReferenceSweptAreaSolid with simple sweep example
Includes `simple_sweep_1.ifc` test input and geometry validation. Updates dependencies in `pixi.lock`.
2025-08-26 16:21:29 +02:00
krande 4835829700 refactor IfcFixedReferenceSweptAreaSolid logic and adjust install-debug task 2025-08-26 16:10:00 +02:00
Thomas Krijnen e5fe2df552 Template, typename, others to make GCC happy 2025-08-26 15:59:05 +02:00
Kristoffer Andersen 5719c3db2b Merge branch 'v0.8.0' into feat/IfcFixedReferenceSweptAreaSolid 2025-08-26 14:13:53 +02:00
Thomas Krijnen 9109fcec12 Further conditional compilation 2025-08-26 14:05:34 +02:00
Thomas Krijnen 4e71ae7d85 Enable rocksdb in ci.yml 2025-08-26 14:03:38 +02:00
Thomas Krijnen 96336d6f68 Ugly conditional compilation for without rdb support 2025-08-26 13:56:03 +02:00
krande 115d3d4498 start work on improving support for IfcFixedReferenceSweptAreaSolid 2025-08-26 13:32:44 +02:00
Thomas Krijnen 6095c523d7 Run black (unrelated) 2025-08-26 13:28:52 +02:00
Thomas Krijnen 71f1a7d0a4 Merge remote-tracking branch 'origin/v0.8.0' into tfk-rocksdb-storage 2025-08-26 13:28:21 +02:00
Thomas Krijnen a0c92638d2 RDB serializer: write type declarations in case of typed refs 2025-08-26 13:25:38 +02:00
Thomas Krijnen ff3fa48332 Add test case 2025-08-26 13:25:18 +02:00
Thomas Krijnen 8888e45115 Run black 2025-08-26 12:54:23 +02:00
Thomas Krijnen 92d4a89a43 Support propsetdefset in rocksdb streamer 2025-08-26 12:54:04 +02:00
Thomas Krijnen ea53c96134 Allow inspection of rocskdb keys in python 2025-08-26 12:53:35 +02:00
Thomas Krijnen 2f62064814 Python impl function 2025-08-26 12:53:06 +02:00
Thomas Krijnen 722e819e11 Support propsetdefset in python streaming mode 2025-08-26 10:20:36 +02:00
Thomas Krijnen 862aa71a77 Left-overs after merge 2025-08-26 10:20:08 +02:00
Thomas Krijnen e920379ca3 SFINAE for BaseClass* 2025-08-26 10:19:47 +02:00
Thomas Krijnen 4011666162 Fixes to header writing 2025-08-26 10:18:13 +02:00
Thomas Krijnen 9d9e9ed4cb Merge remote-tracking branch 'origin/v0.8.0' into tfk-rocksdb-storage 2025-08-26 10:17:57 +02:00
Richard Brice 9331e89d15 Alignments can now be created with or without geometric representations 2025-08-25 19:59:07 -07:00
Bruno Perdigão 8903d6a85c Change variable name for consistency. Related to #6963 2025-08-25 20:42:28 -03:00
Bruno Perdigão cb551e1248 Fix issue with creating walls from slabs in IFC2X3 files. Related to #6963 2025-08-25 20:42:28 -03:00
Bruno Perdigão 915c38947d See #6963. Fix issue with changing extrusion angle in IFC2X3 files. 2025-08-25 20:42:28 -03:00
Bruno Perdigão 190d9f8e3f Fix issue with IfcPolyline in get_polyline_coords 2025-08-25 20:42:28 -03:00
Thomas Krijnen d2c7c1532c Implement streaming scan through file and use in rocksdb serializer and python 2025-08-25 12:45:10 +02:00
daniel-augusto f7e8643f30 Update link to install Bonsai 2025-08-24 08:23:31 +02:00
falken10vdl dccd9d4139 lock drawing titleblock (managed by lock icon in Inkscape) (#7043) 2025-08-21 15:55:19 -05:00
Thomas Krijnen d31aafac5b Update ConversionSettings.h 2025-08-21 14:06:54 +02:00
Thomas Krijnen 2949a86f09 Properly initialize stream::eof #7045 2025-08-21 10:00:44 +02:00
Ryan Schultz 4cbf551c75 small tweak to dev_environment.py 2025-08-20 13:01:42 -05:00
Andrej730 3ef5b13bf8 cmake - also try find_package(OpenCASCADE) 2025-08-19 19:06:21 +05:00
Andrej730 f1114745fb cmake - fix OCC_INCLUDE_DIR strequal check working only once
If OCC_INCLUDE_DIR is not provided, then first it would pass, but the next time wouldn't since variable value would be 'OCC_INCLUDE_DIR-NOTFOUND'.
2025-08-19 19:06:21 +05:00
Andrej730 1d2b1dcbc8 build-deps - avoid redownloading Eigen 2025-08-19 19:06:21 +05:00
Andrej730 ea360733e4 run-cmake - use hdf5 install dir instead of providing include/library dir explicitly 2025-08-19 19:06:21 +05:00
Andrej730 1103cb6c03 build-deps - use the same hdf5 version as build-all
Also use general release cmake file, so there's no need for .patch
2025-08-19 19:06:20 +05:00
Andrej730 6bf39b3d6a cmake - also use find_package to find hdf5 2025-08-19 19:06:20 +05:00
Andrej730 b971135ce4 build-deps - fix trailing spaces 2025-08-19 19:06:20 +05:00
Robin Quint ef24bb52a7 Make Door / Window Tool place doors on the correct side of a wall (#6986) 2025-08-19 13:53:45 +00:00
daniel-augusto 6286d85850 Correct highlight code block python 2025-08-19 09:17:20 +02:00
Andrej730 3d82eb954f Fix missing project custom psets reload when changing IFC filepath #7037 2025-08-18 19:48:04 +05:00
Andrej730 2951aecc14 typing 2025-08-18 19:48:04 +05:00
Andrej730 c4d54f7709 switch_representation - clear geometry cache
Noticed wall representation wasn't updating after window was added to it, because of the existing cache.
2025-08-18 19:46:59 +05:00
Andrej730 bd8cdf5a82 cmake - also use find_package to find Eigen3 2025-08-18 19:46:59 +05:00
Andrej730 53e9837858 fix file_dict typing (126accd6a) 2025-08-18 19:46:59 +05:00
Dion Moult ddbe62772d Fix bug where copy to structure feature was completely inaccessible from the UI 2025-08-18 17:30:56 +10:00
Christoph Mellüh f9dc7d5d94 Improve docs (#7005) 2025-08-18 06:14:06 +00:00
Thomas Krijnen aa97cc25d1 Support faceset face with voids in shape_builder 2025-08-16 15:02:17 +02:00
Thomas Krijnen 0088f3933f Keep ruff happy 2025-08-16 14:07:11 +02:00
Thomas Krijnen 0054b27254 Support datetime instances in edit_pset 2025-08-16 13:35:21 +02:00
Thomas Krijnen 126accd6a2 Track ifcopenshell.file creation time for unique iden 2025-08-16 13:33:10 +02:00
Andrej730 bd0e16cee5 Add status assignment to Statuses UI
Example - https://files.catbox.moe/c6ydj7.mp4

Still need to add tests and support for userdefined statuses.
2025-08-15 19:51:01 +05:00
Andrej730 f5cb2dd21f black . 2025-08-15 19:51:00 +05:00
falken10vdl b024ba05da Fix UI bug with active representation indication for occurrences (#7009) 2025-08-15 13:36:15 +00:00
Richard Brice 1fcf2fb53f Fixed zero length segment for vertical alignment. Refactors curve segment transition code 2025-08-14 13:56:36 -07:00
Andrej730 6bc318b15c Option not to draw specific linked files #6947
Example - https://postimg.cc/7GTkhGPb
2025-08-14 19:54:17 +05:00
Andrej730 40a895b5ad docs\conf.py - skip .venv 2025-08-14 19:54:17 +05:00
Andrej730 3cd2963b01 cmake - fix errors on older cmake #7023 2025-08-14 12:13:48 +05:00
Andrej730 ff3c5b849e cmake - relax CGAL_INCLUDE_DIR check on Linux #7023 2025-08-13 19:45:36 +05:00
Andrej730 8294dacaa4 Move code style notes to docs from wiki
Currently it's in Bonsai docs as this next to previously added formatter docs. Probably, should move it to ifcopenshell docs later.

C++ code style part about braces seems to be outdated.
2025-08-13 19:45:35 +05:00
Andrej730 ca03d5d0c5 bonsai/docs/make - server target 2025-08-13 19:45:35 +05:00
Andrej730 74a3e8a4e6 cmake - remove cmake_policies superseded by cmake_minimum_required
Our minimum cmake version is 3.21, so policies below use `NEW` by default already:
- CMP0048 - VERSION option support for `project`, introduced in 3.0
- CMP0074 - find_package() uses <PackageName>_ROOT variables, introduced in 3.12
- CMP0078 - UseSWIG generates standard target names, introduced in 3.13
- CMP0086 - UseSWIG honors SWIG_MODULE_NAME via -module flag, introduced in 3.14
2025-08-13 19:45:35 +05:00
Andrej730 41142c73bf cmake ifcwrap - fix CMP0148 warning
The policy is removing FindPythonInterp and FindPythonLibs, but it was introduced in 3.27, so just skip it not to break minimum cmake ver.
2025-08-13 19:45:35 +05:00
Andrej730 6c0e2ce323 cmake - fix CMP0167 warning
CMP0167 is removing FindBoost module, but it's only introduced in 3.30, switching to OLD for now.
2025-08-13 19:45:35 +05:00
Andrej730 89c54291b0 Keep CMP0177 OLD (e54dce5dc) to avoid breaking min cmake version #7023 2025-08-13 19:45:35 +05:00
Andrej730 7311777a57 build-deps.cmd - skip installing Python if same version already present on the system #6276
due to existing standard Python installer's limitation
2025-08-13 18:30:56 +05:00
Andrej730 380434f9dd build-deps - error if python installer failed #6276 2025-08-13 18:09:12 +05:00
Andrej730 4d137171ec cmake - document PYTHON_MODULE_INSTALL_DIR 2025-08-13 18:09:12 +05:00
Andrej730 8d3b8b24f8 cmake - search for LibXml2 only with IFCXML_SUPPORT #2035 2025-08-13 14:22:46 +05:00
Andrej730 9e5b667380 black . 2025-08-13 14:22:46 +05:00
Chris Mayo 61fff3d2b4 Fix ifcwrap searching for headers in system directories #3883 (#5697) 2025-08-13 07:37:58 +00:00
Massimo Fabbro 94a3d58e49 See #6570. Now the rate cost item pop up shows also the cost schedule 2025-08-13 07:32:26 +02:00
Richard Brice d57777290b Elevated segment curve transition code to a public function 2025-08-12 16:37:39 -07:00
Andrej730 ffd1d52b4e Fix build-urls note (7c2ba4b)
Apparently backticks are hiding the string.
2025-08-12 20:02:02 +05:00
Andrej730 6a42ac7733 CgalSmoothAngleDegrees - fix compilation warnings
warning C4244: 'initializing': conversion from 'double' to 'const int', possible loss of data
2025-08-12 19:05:53 +05:00
Andrej730 29ba0f3c03 IfcConvert - prompt expected user response 2025-08-12 19:05:53 +05:00
Andrej730 64a9c1f473 cmake - WITH_CGAL to ensure include dir exist 2025-08-12 19:05:53 +05:00
Andrej730 3342bd923d cmake - detect missing HDF5_LIBRARIES on win/darwin
Previously it would assign .so files on Windows as libraries and you would detect error on linking stage.
2025-08-12 19:05:53 +05:00
Andrej730 95820516cf cmake - fix error building ifcconvert without opencascade
geometry_serializer target is defined only if WITH_OPENCASCADE=ON
2025-08-12 19:05:53 +05:00
Andrej730 e230270218 cmake - error when building IfcGeomServer with WITH_OPENCASCADE=OFF 2025-08-12 19:05:53 +05:00
Andrej730 3423e6b13d cmake - remove trailing spaces 2025-08-12 19:05:52 +05:00
Andrej730 34e699687d cmake - ensure EIGEN_DIR is provided 2025-08-12 19:05:52 +05:00
Andrej730 63f7315d90 run-cmake - provide SWIG_EXECUTABLE explicitly
It seems SWIG_DIR has no effect and used as output variable from `find_package(SWIG)`.
2025-08-12 19:05:52 +05:00
Andrej730 a955d2bdee ifcwrap cmake - add hint about missing SWIG_EXECUTABLE 2025-08-12 19:05:52 +05:00
Andrej730 a4045a37f1 typing 2025-08-12 19:05:52 +05:00
Andrej730 41128a397b black . 2025-08-12 19:05:52 +05:00
Osyotr 3dbc1fddcb Fix IfcGeom build without OpenCascade (#7007) 2025-08-12 13:12:07 +00:00
falken10vdl 8c5830ddab Fix adding void if object has no layer material usage after #7010 #7019 2025-08-12 16:42:48 +05:00
Dion Moult a6a27442fb Add test case for bugfix 55e97fd1 2025-08-12 19:00:28 +10:00
Dion Moult 55e97fd170 Fix bug where append_asset would pull in openings unnecessarily
If you try to append an asset which has a relationship such as
IfcRelAssociatesClassification to a whole bunch of opening elements, all
those openings will also (incorrectly) be pulled in.
2025-08-12 18:37:25 +10:00
Christoph Mellüh 3e5a2e5eb2 Fix UI bugs for settings predefined types / assign_type to prevent invalid ifc (#7011) 2025-08-12 06:11:55 +00:00
Andrej730 b5e977d7f3 bim.activate_model not to alter objects selection 2025-08-11 18:58:43 +05:00
Andrej730 4423e0bb10 pset.get_template use fallback schema for odd schemas #6672 2025-08-11 18:39:20 +05:00
Andrej730 e54dce5dcf ifcwrap cmake - set CMP0177 to new
To fix 1k warnings running in cmake 3.30+
The new policy is that cmake is normalizing destination paths in `install` and warns if normalization has any effect on them. In our case paths after normalization should be fine, so switching it to `NEW`.
2025-08-11 18:39:20 +05:00
Andrej730 39f4abe243 An option not to print linked ifc files #6947
Location - https://files.catbox.moe/9qinpy.png
This option is also a nice way of showing the user that this feature does exist.
2025-08-11 12:49:44 +05:00
Andrej730 f60abdd18f Drawings cache options - document that optional are global
Otherwise it might be confusing as this option is displayed through "Active Drawing" UI.
2025-08-11 12:49:44 +05:00
Andrej730 9f92e4853f assign_representation - assign repr only to occurrence for profile- or layer-based types #6934 2025-08-11 12:25:32 +05:00
Andrej730 f8f48796a9 test_assign_representation - cover ifc4x3 2025-08-11 12:25:32 +05:00
Andrej730 7c2ba4b18a make build-urls - add small note with platform names 2025-08-11 12:25:32 +05:00
Andrej730 ce6505847a black . 2025-08-11 11:23:18 +05:00
falken10vdl 8b1ffea91a Enhance AddElement operator to orient the extruded ifcopening along the AXIS orientation (#7010)
* Enhance AddElement operator to orient the extruded ifcopening along the AXIS orientation

* Adjust extrusion direction based on DirectionSense for AXIS2 & AXIS3 IfcOpeningElement
2025-08-10 14:21:42 -05:00
Richard Brice 762f4ff975 Implements business 2 geometry mapping for Viennese Bend for horizontal and cant layouts 2025-08-09 14:03:19 -07:00
Andrej730 9d2a79803a Fix typo in fe130eb #7008 2025-08-09 16:02:46 +05:00
falken10vdl 2597fcb463 Remove transform orientation settings in BoundingBoxDecorator (#6994)
* Remove transform orientation settings in BoundingBoxDecorator

* Remove unused transform orientation handling in update_measure_xyz and black formatting
2025-08-08 12:01:59 -05:00
Andrej730 36b86bbb54 Apply RUF022 (sorted __all__) 2025-08-08 19:12:11 +05:00
Andrej730 858e8743ba IfcStore cache - small refactor and doc-strings 2025-08-08 19:12:11 +05:00
Andrej730 3f09dff79e Option to always cache geometry
Settings location - https://files.catbox.moe/5cjtc1.png
2025-08-08 19:12:11 +05:00
Andrej730 fe130ebb5a typing 2025-08-08 19:12:10 +05:00
Andrej730 b8f4149603 HdfSerializer::read_surface_style - use isnan for clarity 2025-08-08 19:12:10 +05:00
Andrej730 f2f28f8ba6 Use DIR_PATH subtype for properties
It adds this option to open directory in system browser using alt+click and we don't need anymore a special operator `bim.select_dir` to fill these props.

Example - https://files.catbox.moe/t8ejrs.png
2025-08-08 16:45:58 +05:00
Andrej730 12c795a482 Fix binaries urls (3d30d809d)
Should use 0.8.4 now, not 0.8.3
2025-08-08 16:34:03 +05:00
Andrej730 c2730a81d6 bim.activate_model - avoid processing same type occurrences multiple times #5696 2025-08-08 16:15:24 +05:00
Andrej730 2855e96e53 HdfSerializer::read_surface_style - fill style.instance
E.g. Bonsai is relying on geometry.materials to identify what styles object has and in this case it would skip all styles without entities.
2025-08-07 21:02:35 +05:00
Andrej730 4b7dfcdae5 HdfSerializer::read - fix nullptr dereference reading surface styles
The problem was with the line `read_surface_style(surface_styles[i], surface_style_ptrs[i]);` since `surface_style_ptrs[i]` was a nullptr.

Changed the signature to `style&` to make it more clear that it's expecting already created style struct.
2025-08-07 21:02:35 +05:00
Andrej730 67d405ba76 HdfSerializer - fix missing edges_item_ids item in cache (dd9de98)
It wasn't written, but HdfSerializer was still requiring and throwing errors if it couldn' t find it, so cache wasn't working...

Honestly, me when I realized what happened - 🫣🫣
2025-08-07 21:02:35 +05:00
Andrej730 d671d6bed1 HdfSerializer - avoid crashes when passing CgalShape 2025-08-07 21:02:35 +05:00
Andrej730 6483fee792 typing 2025-08-07 21:02:35 +05:00
Andrej730 cee034b5b2 Fix stub after 3c7e938 2025-08-07 21:02:35 +05:00
Andrej730 0132edd774 Sync stub with the wrapper #6976 2025-08-07 21:02:34 +05:00
Andrej730 ed8a31c54b Update ignored settings structs in IfcPython.i #6976 2025-08-07 21:02:34 +05:00
Andrej730 3d30d809d1 Bump IfcOpenShell build #6909 2025-08-07 21:02:34 +05:00
Andrej730 5b0503e721 Geometry.get_cache 2025-08-07 21:02:34 +05:00
Thomas Krijnen 6924012dc8 - != + 2025-08-07 10:27:37 +02:00
Thomas Krijnen 007c451a77 Fix SurfCurveSweptArea solid #6984 2025-08-07 04:18:50 +02:00
Andrej730 358395c237 bim.copy_property_to_selection - fix missing bl_options 2025-08-06 18:18:32 +05:00
Andrej730 e7652a4846 bim.copy_property_to_selection - more friendly error for unsupported value types 2025-08-06 18:18:31 +05:00
Andrej730 630cb5f2dc bim.activate_model - show time it took #5696 2025-08-06 18:18:31 +05:00
Andrej730 117cb1ba5a Switch to pypa/gh-action-pypi-publish
Though there are no particular known issues with https://github.com/ortega2247/pypi-upload-action we've used before, but it wasn't updating for 5 years now, so it's better to switch to official PyPA workflow.

Args for workflow seem to be exactly the same, so it's just a drop-in replacement.
2025-08-06 18:18:31 +05:00
Andrej730 33f2f2e49e prop_with_search - set search_threshold to 0 for relating type properties
Otherwise it had no effect anywhere.
2025-08-06 18:18:31 +05:00
Andrej730 0f6cc23c28 prop_with_search.enable_relating_type_suggestions - keep default to False
To gradually introduce it when it's needed.
2025-08-06 18:18:30 +05:00
Andrej730 ce154cc8d2 prop_with_search - move new args to kw-only for readibility 2025-08-06 18:18:30 +05:00
Andrej730 d7d592de6f typing 2025-08-06 18:18:30 +05:00
falken10vdl 2f23f3cdd7 Add suggestions for relating types in enum property search (#6962) 2025-08-06 10:03:07 +00:00
Andrej730 6757026e3e Fix missing pset templates update when changing IFC filepath #6979
E.g. when user opened .blend file and ifc filepath was pointing to a wrong destination, after they changed the filepath pset templates wouldn't reload.
2025-08-06 14:48:39 +05:00
Andrej730 2154200697 black . 2025-08-06 14:48:39 +05:00
Thomas Krijnen 6ffcf363a6 Fix geom literals #6974 2025-08-06 10:49:45 +02:00
shmoody_y bf6e02f99d fix missing parantheses 2025-08-06 09:46:26 +02:00
shmoodyyy 15a31074e8 fix leaking as_compound() calls 2025-08-06 09:46:26 +02:00
Thomas Krijnen c9eb345491 standalone_drawer.py: no openings though 2025-08-06 09:29:04 +02:00
Thomas Krijnen 7e2b9dc7f3 Warn about failure to create camera from IfcAnnotation/DRAWING in Svgserializer 2025-08-06 09:22:47 +02:00
Thomas Krijnen 7a2dc5c0c5 Prevent unnecessary trsf::form() = other #6909 #6841 2025-08-06 09:21:57 +02:00
Thomas Krijnen 51afe03b78 shared_ptr references in compile-time loop to prevent unnecessary ref-bumps 2025-08-06 09:19:38 +02:00
Thomas Krijnen be8e96d918 standalone_drawer.py: dont require drawing elements to be speified on cli 2025-08-06 09:18:10 +02:00
Thomas Krijnen 071353eddc Vertex normal smoothing in CGAL --cgal-smooth-angle-degrees #6997 2025-08-06 05:46:07 +02:00
Andrej730 d1bcd887ca Zones UI - show currently edited zone 2025-08-05 13:57:40 +05:00
Andrej730 a05bae78ff search.operators - add missing bl_options
If operator is changing blend data, then it should always provide undo option, otherwise it may lead to crashes.
2025-08-05 13:57:40 +05:00
Andrej730 31e9b125e3 Selection filters - refactor code
As most of the code can be just reused
2025-08-05 13:57:39 +05:00
Andrej730 d0d913a97b Remove dead code in search.prop 2025-08-05 13:57:39 +05:00
Andrej730 50ff363501 Remove UIList.use_filter_linked
It seems it's either was never used or it was used in some very old Blender version.
2025-08-05 13:57:39 +05:00
Andrej730 1c06d12efc Support 2f1de2f when adding bsdd properties
Previously you would still need to open bsdd ui and preload dictionaries.
2025-08-05 13:57:39 +05:00
Andrej730 eb7550b63e bim.add_bsdd_properties - add poll check 2025-08-05 13:57:39 +05:00
Andrej730 9d83eec674 typing 2025-08-05 13:57:38 +05:00
Andrej730 4cf4628e63 remove unused code 2025-08-05 13:57:38 +05:00
Andrej730 a498e75712 bim.add_element - add poll check #6985 2025-08-05 13:54:32 +05:00
Massimo Fabbro 8a4739f9c9 Running black 2025-08-05 08:56:06 +02:00
Massimo Fabbro c6093430c2 See #6570. Now rate cost item works also with categories 2025-08-05 08:56:06 +02:00
Christoph Mellüh 57658eb5df Fix Bonsai classification tests after bonsai bsdd changes (#6988) 2025-08-05 06:01:48 +00:00
Andrej730 f25ad2a9cb bsdd ui - preload properties when loading classes
It was confusing that you still needed to click on the first property, even though it was selected by defalt.
2025-08-04 21:18:15 +05:00
Andrej730 3b8b4c1566 typing 2025-08-04 21:18:15 +05:00
Christoph Mellüh d2939067bd Add Description-ContextMenu Entry to bSDD Properties (#6970)
See #6970 for example.
2025-08-04 13:52:00 +00:00
Andrej730 37c05f763e Fix IFC undo data loss in 645298e #6973
There was a contradiction - modal operators were treated as special and were always creating new transactions (`is_top_level_operator = method == "MODAL"`), but those transactions were only closed if modal returned `FINISHED` or `CANCELLED`, so in most case previous transactions were just overridden, so IFC undo data was lost.

Ping @Moult just in case
2025-08-04 18:47:08 +05:00
carlopav e00a865bce Various fixes to IfcCostSchedule PDF export (#6983)
* IfcCostSchedue PDF export: changed Output type from off to auto

* Fixed currency value

* Fix summary total if no nested structure present
2025-08-04 08:46:20 +00:00
Dion Moult 4d42512b6a Add support for integer data types in bsdd 2025-08-04 17:02:32 +10:00
Thomas Krijnen 037fd22b51 util/unit.py::calculate_unit_scale() Check for valid unit_type 2025-08-04 08:53:08 +02:00
Thomas Krijnen 1ad2c62a22 add_qto.py: MethodOfMeasurement=BaseQuantities to comply with spec text 2025-08-04 08:52:02 +02:00
Dion Moult 823eb7d199 SetFalseOrigin recipe now by default resets non-geometric spatial elements (XY values only). 2025-08-02 18:11:33 +10:00
Dion Moult 7038cbe871 ResetSpatialElementLocations patch now supports only_xy toggle.
Also rewrote the patch to use API and util functions to make it more
robust.
2025-08-02 17:54:55 +10:00
Andrej730 1cb44da76c Refactor toggling target view to a single operator 2025-08-01 20:07:59 +05:00
Andrej730 291b313d79 prop.Drawing - add some notes 2025-08-01 20:07:59 +05:00
Andrej730 cf13c6fdc1 Fix old bug with collapsing/expanding drawing list #6969
It was checking `is_expanded` for all drawings items, though it should have checked just target view items.
2025-08-01 20:07:59 +05:00
Andrej730 5bd9a58936 Zones UI - fix missing name update 2025-07-31 19:47:34 +05:00
Andrej730 ff75875045 Zones UI - add classification UI #6941 2025-07-31 19:47:33 +05:00
Andrej730 4ff0fd56e9 ClassificationsData - simplify 2025-07-31 19:47:33 +05:00
Andrej730 9cc5338602 Rename ClassificationReferencesData -> ObjectClassificationsData
To make it more clear what element's classification data it's storing.
2025-07-31 19:47:33 +05:00
Andrej730 37a62e3004 Zones UI - add psets ui #6941 2025-07-31 19:47:33 +05:00
Andrej730 9cc1347dd8 Reuse props.active_group 2025-07-31 19:47:32 +05:00
Andrej730 716919d052 typing 2025-07-31 19:47:32 +05:00
Andrej730 c82a7b708c build-all - verbose logs to print timestamps
So it will be easier to track build times from logs
2025-07-31 19:12:50 +05:00
Andrej730 5acacaa9d8 build-all - fix verbose logging
verbose logging was setting log level only for `logger`, never setting for the `logger`'s handler, so `-v` option, it seems, never worked. For simplicity now handler will just inherit log level from the `logger`.
2025-07-31 19:12:50 +05:00
Andrej730 e386c82ada build-all - add notes 2025-07-31 19:12:50 +05:00
falken10vdl 18b2364d52 Groups UI - fix crash accessing invalid collection items references #6811 (#6965) 2025-07-31 19:06:49 +05:00
falken10vdl 7cd423d423 S_Z for wall tool to change_extrusion_depth (#6935) 2025-07-29 12:59:15 -05:00
Andrej730 edd2dcc6c6 Fix bim.change_log_level console error on reregister 2025-07-29 21:26:46 +05:00
Andrej730 486e622f77 Limit active type prop width #6943
Example - https://files.catbox.moe/m49wt1.png
2025-07-29 21:26:46 +05:00
Andrej730 5ad566f42d Bonsai Mac app - allow to be called without arguments 2025-07-29 20:18:30 +05:00
Andrej730 aec286d85b Bonsai Mac app to quickly open .ifc files in Bonsai directly from Finder.
Demo for setting it up https://files.catbox.moe/1pyqps.mp4
2025-07-29 20:18:30 +05:00
Andrej730 38b594d159 dev_environment.py - fix REPO_PATH autodetection after 4a2411c05 2025-07-28 19:28:00 +05:00
Andrej730 5166416c61 build-all - add a couple of notes 2025-07-28 19:27:59 +05:00
Andrej730 c700a32b09 Fix RUF015 2025-07-28 19:27:59 +05:00
Andrej730 0cb6d9de72 typing 2025-07-28 19:27:59 +05:00
Andrej730 cdeeab4b31 black . 2025-07-28 17:03:25 +05:00
Andrej730 23944d6060 Fix small typo in 99d7f5ad7 2025-07-28 16:47:08 +05:00
Thomas Krijnen e13ba7627a Rocky8 python3.6 build-all compatibility 2025-07-28 13:27:08 +02:00
Thomas Krijnen 9e6c0758d5 Rocky8 python3.6 build-all compatibility 2025-07-28 13:23:10 +02:00
Thomas Krijnen 6932d2a268 Rocky8 python3.6 build-all compatibility 2025-07-28 13:21:43 +02:00
Thomas Krijnen 638e1ebcec Rocky8 python3.6 build-all compatibility 2025-07-28 13:17:38 +02:00
Dion Moult 106b02fad1 Allow URI browsing for IfcPatch recipes with directory names 2025-07-28 16:44:44 +10:00
Dion Moult 54522aab6a Add AGS2IFC patch recipe by David 2025-07-28 16:44:32 +10:00
Thomas Krijnen eb5df2f8c3 Simple SPF submodule 2025-07-28 05:27:22 +02:00
Richard Brice c8dbb72f69 Updated alignment stationing to account for stationing being defined on a parent alignment 2025-07-27 15:10:23 -07:00
Richard Brice e56f09071a Updates IfcOffsetCurveByDistance to be more permissive 2025-07-27 15:10:23 -07:00
Richard Brice a824141b90 Fixes IfcOffsetCurveByDistance 2025-07-27 15:10:23 -07:00
Richard Brice bb56882879 A few more fixes for zero length segments 2025-07-27 15:10:22 -07:00
Richard Brice ed0e825283 Alignment api bug fixes 2025-07-27 15:10:22 -07:00
Richard Brice c12ed46c49 Bug fixes with zero length segment and b2g mapping when project angle is not radian 2025-07-27 15:10:22 -07:00
Richard Brice f3c72920de Alignment patch recipes 2025-07-27 15:10:22 -07:00
Richard Brice 3ef7f1c141 Alignment API updates to support new patch recipes 2025-07-27 15:10:22 -07:00
Richard Brice 3e0ef46a37 Updates IfcHierarchyHelper::addRelatedObject to work with IfcRelNests 2025-07-27 15:10:22 -07:00
Bruno Perdigão 689d8d1644 Remove leftover line from 651d924759 2025-07-27 11:56:57 -03:00
Bruno Perdigão 9bf799e69e black . 2025-07-27 11:54:19 -03:00
Bruno Perdigão c27f89a109 Remove old comment 2025-07-27 11:47:43 -03:00
Bruno Perdigão 651d924759 Prevents using aggregate mode with IfcSpatialElement 2025-07-27 11:24:54 -03:00
Bruno Perdigão 17d6b8af61 Add Name to Linked Aggregates and keep product assignment after refreshing.
See #6831. Warning: this is a breaking change.
Linked Aggregate names are numbered to keep them consistent when reopening
the file instead of relying on Blender auto numbering objects with the
same name. However, for annotation purposes, the numbering is irrelevant,
and the user might want to use just the aggregate name. So it was added a
"Name" to the "BBIM_Linked_Aggregate" Pset that can be used in these cases.
When refreshing the linked aggregates, their names will be updated to reflect
the "Name" value and the product assignment will be preserved to keep
annotations in sync.
In order to adapt existing files to this new Pset structure see this gist:
https://gist.github.com/brunoperdigao/37a5b838935b15a91aa70b2bc4de325f
2025-07-27 11:24:54 -03:00
Dion Moult 4a2411c05d Document new Python based dev installation 2025-07-27 19:21:43 +10:00
Dion Moult 9f9abaadc8 Support Linux (tested and seems to work) 2025-07-27 19:21:43 +10:00
Dion Moult 99d7f5ad7a Clarify which Blender versions are supported 2025-07-27 19:21:43 +10:00
Osyotr bf7171b7ba Don't mark function that throws exception noexcept 2025-07-26 08:40:03 +02:00
Andrej730 1ac5a8d785 build-all - small refactor for readability 2025-07-25 18:22:18 +05:00
Andrej730 9004c5d153 Include build-all.py to black formatter 2025-07-25 18:22:18 +05:00
Andrej730 99cdc4da35 date.ifc2datetime - refactor for readability 2025-07-25 18:22:18 +05:00
Andrej730 3c338db364 bim.create_shape_from_step_id - include curves by default
Though it's still possible to disable it from Redo menu.
2025-07-25 18:22:18 +05:00
Andrej730 7322cc9018 bim.create_shape_from_step_id - use cursor as the location for the shapes 2025-07-25 18:22:18 +05:00
Andrej730 dcebd55031 bim.create_instance - simplify logic
Just use active object instead of the selected, move basic check to `poll`.
2025-07-25 18:22:17 +05:00
Andrej730 1d789da066 test_copy_work_schedule - cover ifc2x3 support 2025-07-25 18:22:17 +05:00
Andrej730 dd1c47f9dc sequence.add_date_time
API method to create IfcDateAndTime / IfcDatetime in schema agnostic way.
2025-07-25 18:22:17 +05:00
Andrej730 98e64c1830 sequence.duplicate_task - fix example using non-existent api 2025-07-25 18:22:16 +05:00
Andrej730 e8a4f7947d sequence.duplicate_task - fix misleading description 2025-07-25 18:22:16 +05:00
Andrej730 05a8824019 typing 2025-07-25 18:22:16 +05:00
Andrej730 cfd5d2a4eb Fix pagination issues when restarting type manager #6917 2025-07-25 16:57:40 +05:00
Andrej730 b79256ce32 mix_snap_and_axis - fix subtle bug with creating zero Vector 2025-07-25 16:57:40 +05:00
Andrej730 d8ae33dd2a Element types dropdown + search #6943
Example - https://files.catbox.moe/jv9uxt.png
2025-07-25 15:23:45 +05:00
Andrej730 b76b05fc71 sequence.copy_work_schedule #6901
Similar to e50215ddc but for IfcWorkSchedules

Button location - https://files.catbox.moe/jfd1ol.png
2025-07-24 19:39:14 +05:00
Andrej730 f5b28c0df8 util.get_work_schedule_tasks - fix critical bug with missing root tasks
Now we also use generator to mirror get_schedule_cost_items
2025-07-24 19:39:14 +05:00
Andrej730 a99bfd9294 sequence.get_root_tasks_ids - remove unused method 2025-07-24 19:39:14 +05:00
Andrej730 cbdd091d6f sequence.add_work_schedule - add missing object_type doc-string 2025-07-24 19:39:14 +05:00
Andrej730 82fcdfc160 export_duration_prop - remove dead assignment statements 2025-07-24 19:39:14 +05:00
Andrej730 cb724dbfde Work schedule UI - fix issue with some durations props not loading
E.g. IfcWorkSchedule.Duration wasn't recognized as such or IfcWorkSchedule.TotalFloat wasn't imported properly and was uneditable.

Now we also check IfcDuration type on attributes explicitly, instead of relying on hardcoded list
2025-07-24 19:39:14 +05:00
Andrej730 973b6be2aa Deduplicate ISODuration definition 2025-07-24 19:39:13 +05:00
Andrej730 7eba094a39 BIMWorkPlanProperties.editing_type - use enum 2025-07-24 19:39:13 +05:00
Andrej730 6bfa2aaf10 Work schedule UI - add missing button for disabling attributes editing 2025-07-24 19:39:13 +05:00
Andrej730 03e09a97c6 Work schedule UI - hide buttons labels to make it more tidy 2025-07-24 19:39:13 +05:00
Andrej730 6e9ec4861e bim.import_work_schedule_csv - make info message look nicer 2025-07-24 19:39:13 +05:00
Andrej730 d3bca858b0 Add import work schedule button to work schedule ui
Location - https://files.catbox.moe/sxfxv4.png
To mirror the similar UI we have in 4d, this way feature will much easier to find than checking File->Import
2025-07-24 19:39:13 +05:00
Andrej730 ba3e5ae28c Rename bim.import_csv -> bim.import_work_schedule_csv
To make name less generic
2025-07-24 19:39:12 +05:00
Andrej730 516f8cdb15 Fix broken sequence color schema UI in Blender 4.4+
We missed sequences being renamed to strips in Blender 4.4 and previous icon name broke, so UI wasn't able to load.
2025-07-24 19:39:12 +05:00
Andrej730 f3efb1601a copy_cost_schedule - add a test 2025-07-24 19:39:12 +05:00
Andrej730 f8a933e094 typing 2025-07-24 19:39:12 +05:00
sboddy 0a50a3cb24 Option to convert custom properties to ifc psets when assigning an IFC class (#6921)
Feature location - https://files.catbox.moe/cuvdan.png (assign class with alt+click modifier)
See #6921 for an example of converted props
2025-07-24 06:12:22 +00:00
Andrej730 e50215ddce cost.copy_cost_schedule #6901
A feature allowing duplicate existing IfcCostSchedule - either from API or from Bonsai UI
Button location in Bonsai - https://files.catbox.moe/ct058q.png
2025-07-23 18:57:40 +05:00
Andrej730 f24adcdadb control.assign_control - small optimization 2025-07-23 18:55:50 +05:00
Andrej730 84f6632c13 Reuse assign_control instead of creating IfcRelAssignsToControls 2025-07-23 18:55:50 +05:00
Andrej730 c82191f40b typing 2025-07-23 18:55:49 +05:00
Andrej730 3dde609519 enable/disable editing representation items to affect all selected objects
To simplify the process when you need to review representation items / their styles for multiple objects.
2025-07-23 18:55:49 +05:00
Andrej730 ed65c039dc Test for missing platforms
Needed to ensure all necessary platforms are covered when build is bumped
2025-07-22 18:07:55 +05:00
Andrej730 dd5d997d47 ifcopenshell-python workflows - include py313 2025-07-22 18:06:20 +05:00
Andrej730 d6a3900f3e ifcopenshell-python - support python 3.13 2025-07-22 18:06:20 +05:00
Andrej730 64d3951d5e installation.rst - add Python 3.13 urls 2025-07-22 18:06:20 +05:00
Andrej730 0ef255bc3c Fix linking project missing offsets for instances of complex geometry
After ba2456a if main IFC project had an offset and linked object had more than 333 faces, then it was imported at it's original location instead, missing an offset.

Also processing occurrences should be now more optimized, since we reuse the same verts buffer instead of recreating it 10 times.
2025-07-22 18:06:20 +05:00
Andrej730 8f5905c801 ifcopenshell_wrapper.pyi - document Element attributes 2025-07-22 18:06:19 +05:00
Andrej730 7ac7190d57 typing 2025-07-22 18:06:19 +05:00
Andrej730 06ad541c56 troubleshooting.rst - update Blender version 2025-07-22 18:06:19 +05:00
Andrej730 b4740b6949 append_asset to also match material sets by the name #6762 2025-07-21 18:10:11 +05:00
Andrej730 d66dd1be18 Button that allows changing linked ifc project filepath
Example - https://files.catbox.moe/usc5cu.png
2025-07-21 18:10:11 +05:00
Andrej730 adfe56c777 typing 2025-07-21 18:10:11 +05:00
carlopav dcf8329b04 Pdf ifc cost schedule export improvements (#6884)
* Export_IfcCostSchedule_to_PDF_improvements

* IfcCostSchedule CSV export: Added ItemIsASum column

New column in the ifc export that tracks if IfcCostItem is a sum, also added a new static method to the IfcDataGetter class.

* IfcCostSchedule CSV export: Added cost quantities column

Cost quantities are a serialsed list containing the name of the quantity and the quantity value.

* IfcCostScheduel PDF export: add options to fine tune export

New options include nested_structure_depth, should_print_cover, should_print_description, should_print_rates, should_print_summary, should_print_cost_ids.

Also pass project currency to typst (still not used).

Added footer with "proudly created with IfcOpenShell".

Updated Cover with formatting and IfcCostSchedule Description
2025-07-21 11:34:00 +05:00
Richard Brice d49a3486b9 Commented out debugging code for alignment 2025-07-18 14:47:14 -07:00
Richard Brice 78759a63f2 Updates helmert curve business2geometry mapping (again) 2025-07-18 12:29:28 -07:00
Richard Brice 913076de94 Updates helmert curve business2geometry mapping 2025-07-18 09:47:59 -07:00
Andrej730 e318cbd9e6 dev_environment.py - process broken symlinks 2025-07-18 20:17:04 +05:00
Andrej730 2f1de2f104 Autoload active bsdd from IFC file
Now we store in the IFC file list of active bsdd user was using in Bonsai.
So when you open IFC file it automatically marks dictionaries as active and there's no need to go to bsdd UI, unless there are new dictionaries to add/remove.

Example - https://files.catbox.moe/kzwa2n.mp4
2025-07-18 20:17:04 +05:00
Andrej730 0e74ac8eea dev_environment.py - support Mac 2025-07-18 20:17:04 +05:00
Andrej730 31ec4820fc dev_environment.py - readable errors in case bonsai path wasn't found
Since we added lookup for multiple paths, it was failing with confusing "Could not find Bonsai path in expected locations" even if the problem was with BLENDER_PATH.
2025-07-18 20:17:03 +05:00
Andrej730 917e7f9f15 dev_environment scripts - bump Blender version 2025-07-18 20:17:03 +05:00
Andrej730 2f0014a489 Mac compilation instructions - update Python version 2025-07-18 20:17:03 +05:00
Andrej730 92340f159d Mac compilation instructions - include eigen
Otherwise compilation doesn't work
2025-07-18 20:17:03 +05:00
Richard Brice a392a1fbfb Adds alignment as offset curve 2025-07-17 10:48:42 -07:00
Andrej730 728f9e2c04 util.shape - replace ShapeType with W.Triangulation for accuracy 2025-07-17 19:58:48 +05:00
Andrej730 2edfe1e5d8 profile.add_parameterized_profile - add profile_type arg
To create more valid profiles by default. Noticed then Bonsai creates new profiles, it doesn't set ProfileType, leading to validation errors.
2025-07-17 19:58:48 +05:00
Andrej730 0b48120a66 bim.create_all_shapes - allow selecting library to use 2025-07-17 19:58:48 +05:00
Andrej730 577d46eb70 typing 2025-07-17 19:58:47 +05:00
Andrej730 83a3813f53 debug operators - remove unnecessary undo step 2025-07-17 19:58:47 +05:00
Bruno Perdigão dd14f33c0b Allow "Refresh Linked Aggregate" to be called when uppermost aggregate is selected. 2025-07-16 17:52:48 -03:00
Bruno Perdigão b305e2354b Fix issue with DuplicateMoveLinkedAggregate object selection.
When dealing with multiple aggregates, the operator was not selecting
the right aggregate to move.
2025-07-16 17:52:48 -03:00
Andrej730 afb2742c2f standalone_drawer - print example args 2025-07-16 18:55:38 +05:00
Andrej730 55d533309e Change Python log level from UI
Location - https://files.catbox.moe/4umtyc.png

E.g. can be useful to narrow down some issues during ifc import
2025-07-16 18:55:37 +05:00
Andrej730 00f7871386 BIM_UL_topics - move to bcf module 2025-07-16 18:55:37 +05:00
Andrej730 f15a23483e typing 2025-07-16 18:55:37 +05:00
Andrej730 f14b4c467d Revert "Bump IOS" #6909
This reverts commit a4dd1c3463.
2025-07-16 16:36:16 +05:00
Dion Moult 4a9cf433d1 Fix bug in IfcTester thanks to Sayan where parsing XML text using ET would expand namespaces and therefore break namespaces during decode 2025-07-16 18:14:45 +10:00
Andrej730 866362c6ed More readable error creating a drawing with underlay but no active style #4870 2025-07-16 12:31:10 +05:00
Andrej730 0dc17a2141 Revert optional pyradiance 41e6478 #6633
Since issue is resolved upstream and there's no need to keep import optional.
2025-07-16 11:22:45 +05:00
Andrej730 d55e7faf2a Fix ifc4x3 breaking import of csvs that have enum values after c9847ca #6708 2025-07-15 18:01:57 +05:00
Andrej730 52762f828c Save all properties from Preferences UI as actual preferences
Previously some of them were saved only for current .blend file, moving them to preferences will make it more consistent with usual Blender UX. If needed we'll be able to add some way to fine-grain them later.

There's also a temporary patch that's going to migrate old .blend-props to new preferences-props to make process less disruptive.
2025-07-15 17:47:38 +05:00
Andrej730 1d0868eb18 bim.attribute_search_values - enable by default if possible
Since release just happened, it's more safe to try out propagating attribute search feature everywhere.
2025-07-15 17:47:37 +05:00
Andrej730 9461c6369e ci-bonsai-daily - use Blender 4.5 build 2025-07-15 17:47:37 +05:00
Andrej730 0f3b570800 Fix get_segment_length bug with non-parametrized profiles (f9c4b6a)
`settings` wasn't defined, so `create_shape` was always resulting in an error. Also, `create_shape` is returning `Triangulation` in this kind of cases, so there's no `.geometry`.

Also removed IfcCircleProfileDef if-check since it's covered by IfcParameterizedProfileDef.
2025-07-15 17:47:37 +05:00
Andrej730 30cbfad871 Fix code typo in 40f92d1 2025-07-15 17:47:37 +05:00
Andrej730 262739f37a owner.remove_role - fix error handling resource level rel (fe1e307)
It's probably was just an overlook in the original commit - it was referring to `settings["organisation"]`, though `"organization"` was never passed, leading to an error. And probably by accident remove_role tests were using the same tests as remove_organization, so the issue went under the radar for a while.
2025-07-15 17:47:37 +05:00
Andrej730 03fa850ce2 Fix old bug in FixArchiCADToRevitDoorSwings (1d74306)
It was using variable `f` that was never defined
2025-07-15 17:47:36 +05:00
Andrej730 8d2c0d0785 Fix old error setting up bcf camera in some cases (0d6cacd)
`cam_height` and `cam_width` were used in `setup_camera()` but never defined.
2025-07-15 17:47:36 +05:00
Andrej730 742a9df311 Fix error starting import_ifc profiling (in 515bfd1) 2025-07-15 17:47:36 +05:00
Andrej730 c95a0e8ed5 Fix error in generating error message in 8e9d4be
`profile` variable was never defined in this context
2025-07-15 17:47:36 +05:00
Andrej730 a28478c193 Fix bim.align_product operator (after 2db6b86)
It was using `core` in it's code though it was never defined.
2025-07-15 17:47:36 +05:00
Andrej730 b521901c90 Fix error message when filtering more than 50 selected objects (after c4ffc06)
name variable was undefined leading to an error
2025-07-15 17:47:35 +05:00
Andrej730 20f8737fb3 generate_furniture_library - remove unused methods
We have them in demo library either way
2025-07-15 17:47:35 +05:00
Andrej730 f18c93c9ee typing 2025-07-15 17:47:35 +05:00
Richard Brice a461281b1e Fixes problem moving alignment representation from parent to child alignment. Forgot to assign the ObjectPlacement 2025-07-14 11:09:02 -07:00
Andrej730 2d3d747d49 Move props from 'Other' preferences tab to preferences #6733
To prevent users confusion since it's a general Blender UX to expect here general preferences, not per-blend file settings.
2025-07-14 18:53:11 +05:00
Andrej730 d165cd2692 Update material classification UI on changing selected materials #6902 2025-07-14 18:53:11 +05:00
Andrej730 3f0e30245b Fix TestSelectSimilarContainer after 553003e 2025-07-14 18:53:11 +05:00
Andrej730 c111aafd3a Fix TestAddContext after 2698ba6 2025-07-14 18:53:11 +05:00
Andrej730 465bd23d6f import_attributes2 -> import_attributes
import_attributes were removed in 76f0b57ff
2025-07-14 18:53:10 +05:00
Andrej730 c7d3e00dca typing 2025-07-14 18:53:10 +05:00
Andrej730 72af88a4b3 black . 2025-07-14 18:53:10 +05:00
Richard Brice 73b76ba666 Adds IfcPolyline representation for alignment. Also some general cleanup 2025-07-13 16:34:52 -07:00
Dion Moult e93a66be49 Update VERSION 2025-07-13 20:25:14 +10:00
Dion Moult a4dd1c3463 Bump IOS 2025-07-13 19:55:21 +10:00
Andrej730 6d8e513f97 Temporary hack for path tags without 'd' attr #6871 #6876 2025-07-11 18:24:00 +05:00
Andrej730 baeaa073df dimensionality - add description 2025-07-11 18:24:00 +05:00
Andrej730 f07391181d context-ids, context-types, context-identifiers - add descriptions
Hope I don't miss anything, but couldn't find any references to ContextTypes, ContextIdentifiers and they seem to have no effect.
2025-07-11 18:23:59 +05:00
Andrej730 722f71b3b3 ifcgeom/ConversionSettings.h - fix duplicated ContextIds derived type
I guess it only affected how `defineOption` worked. Noticed the issue when was looking through `ifcconvert --help` and `context-ids` were duplicated 3 times.
2025-07-11 18:23:59 +05:00
Andrej730 76e4ec0069 bim.select_uri_attribute - simplify data_path eval 2025-07-11 18:23:59 +05:00
Andrej730 df18124bec vs-cfg.cmd - update error message
To make it a bit more easier to understand what to do in cases like below (the solution is to provide generator explicitly: `run-cmake.bat vs2022-x64 -DADD_COMMIT_SHA=ON -DVERSION_OVERRIDE=ON`).

```
run-cmake.bat -DADD_COMMIT_SHA=ON -DVERSION_OVERRIDE=ON

vs-cfg.cmd: The used CMake version does not support generator `-DADD_COMMIT_SHA` - cannot proceed.
```
2025-07-11 18:23:59 +05:00
Andrej730 370488cd27 docs conf.py - update year 2025-07-11 18:23:59 +05:00
Andrej730 4bbc463c8f ifcopenshell-python\docs\requirements.txt 2025-07-11 18:23:59 +05:00
Andrej730 4a11a117ad Fix bim.activate_model hiding all elements #6893
It was an overlook with using by accident bim.disable_status_filters instead of bim.enable_status_filters in bim.activate_status_filters, but it was also kind of unexpectedly introduced in 7858cb1.

But thinking about it, bim.activate_model shouldn't activate Statuses UI either way, since it might bring their filters they had before but explicitly disabled.
2025-07-11 18:23:58 +05:00
Andrej730 19be8107b3 Fix Ruff UP037 (quoted-annotation) 2025-07-11 18:23:58 +05:00
Andrej730 e1976d5bfd Fix Ruff UP013 (convert-typed-dict-functional-to-class)
Apparently `type` is okay and doesn't break things in even in Python 3.12
2025-07-11 18:23:58 +05:00
Andrej730 0fcc47508a Structural UI - refactor common code to tool, fix bugs
Also revert previous change in UI - `draw_attributes` doesn't cover it and there indeed should be special handling.
2025-07-10 19:42:31 +05:00
Andrej730 76f0b57ff1 Migrate to import_attributes2 2025-07-10 19:42:30 +05:00
Andrej730 1d8ee406af Fix alignment.__all__ missing create_segment_representations 2025-07-10 19:42:30 +05:00
Andrej730 05cb06a28e typing 2025-07-10 19:42:30 +05:00
Andrej730 8a6eb1b60f Update IfcApplication attributes export after 5866994 2025-07-10 19:42:30 +05:00
Andrej730 37d4ee97e7 alignment - fix missing imports 2025-07-10 19:42:29 +05:00
Andrej730 ef5d1448da Fix is_null not updating when adding new attribute subitems #6869 2025-07-10 19:42:29 +05:00
Massimo Fabbro eed42b8fac Fix #6711. Forgot to change the space elevation 2025-07-09 22:27:31 +02:00
Thomas Krijnen 1f0ac8fdb9 submodule 2025-07-09 20:45:39 +02:00
Andrej730 1b1a1f143a bim.attribute_search_values - enable it in more places
Since this feature can be generally useful, let's try it out to see the cases when it should be disabled.

Additionally to Materials UI, it's now enabled in object attributes, materials, profiles, styles and explorer ui.
2025-07-09 19:02:27 +05:00
Andrej730 9649c23a3b bim.attribute_search_values - more clear description 2025-07-09 19:02:27 +05:00
Andrej730 0ad5ace35f bim.attribute_search_values - support not just scene props 2025-07-09 19:02:27 +05:00
Andrej730 f7fdb8cc81 bim.attribute_search_values - rearrange props for readability 2025-07-09 19:02:27 +05:00
Andrej730 41e64781d8 Skip pyradiance import if it fails #6633 2025-07-09 19:02:27 +05:00
Andrej730 6ea7ee84a6 Remove prop.GlobalId
It seems it was unused since 6f55cd5
2025-07-09 19:02:27 +05:00
Andrej730 e7b86ae5b0 bim.add_group - use dynamic description to clarify when it's adding subgroups
It was kind of confusing since the icon and everything else was the same.
2025-07-09 19:02:27 +05:00
Andrej730 f6035609c9 Groups UI - use natsort 2025-07-09 19:02:27 +05:00
Andrej730 76feeaccc9 typing 2025-07-09 19:02:26 +05:00
Andrej730 af02a6b3a6 Fix UP037 (quoted-annotation) 2025-07-09 19:02:26 +05:00
Andrej730 832e68cb6f Fix Ruff UP034 (extraneous-parentheses) 2025-07-09 19:02:26 +05:00
Andrej730 a8268e8323 Replace deprecated typing.Sequence (40f92d15c) 2025-07-09 19:02:26 +05:00
Andrej730 5a4ad69bf7 black . 2025-07-09 19:02:26 +05:00
Richard Brice 40f92d15c3 Alignment api update (#6817)
* Some basic COGO survey points functions

* Update alignment api

Includes defining alignment segment by segment, automatic geometry definitions, and automatric stationing and referents

* Fixes bonsai import alignment from csv

* Adds DMS angle conversion functions to COGO api

* Updated per @civilx64 review comments

* Fixes problem with segment representations

* Fixes problem with segment transition codes

* Allows for compound vertical and horizontal curves

* Implements callbacks for referent naming

* Renames angle_from_bearing to bearing2dd for consistency with ifcopenshell.util.geolocation.dms2dd. Removes angle_from_dms because it duplicates dms2dd

* Documents register_referent_name_callback

* Fixes all sorts of problems with Cant/SegRefCurve implementation

* refactor referent unit tests to use a fixture for test setup

* lint with black

---------

Co-authored-by: Scott Lecher <civilx64@gmail.com>
2025-07-08 10:09:14 -07:00
Andrej730 ad8d02bfed Groups UI - support renaming groups directly from UI
Example - https://files.catbox.moe/u4b918.mp4
2025-07-08 21:20:59 +05:00
Andrej730 5866994b84 Intergrate explorer UI to support editing some props like #6869
Example - https://files.catbox.moe/ujhlwv.mp4
2025-07-08 21:20:59 +05:00
Andrej730 2ec2ac0e5c Attributes UI to support attributes with string subitems
Example - https://files.catbox.moe/oew1ue.mp4
2025-07-08 21:20:58 +05:00
Andrej730 c7555652d7 Bulk Rename Pset Props - show how many props were affected 2025-07-08 21:20:58 +05:00
Andrej730 5a7ce6d68b bim.bulk_remove_psets - show how many psets were removed
Also removed exception handling to catch that bug sneaking in, if it ever returns.
2025-07-08 21:20:58 +05:00
Andrej730 ad8913a979 Move bulk properties to GlobalPsetProperties 2025-07-08 21:20:58 +05:00
Andrej730 188b6a03a8 Attribute.is_uri - move to Attribute.special_type 2025-07-08 21:20:57 +05:00
Andrej730 7f3860b025 util.attribute - add tests 2025-07-08 21:20:57 +05:00
Andrej730 d08756d1b4 typing 2025-07-08 21:20:57 +05:00
Andrej730 525ef2b77b Explorer UI - add is_loaded toggle 2025-07-07 19:11:39 +05:00
Andrej730 fca2bf7aa8 Search filters - add example to criteria descriptions
To give users some default value to get familiar with the tool.
Example - https://files.catbox.moe/d1zh5n.png
2025-07-07 19:11:39 +05:00
Andrej730 ff82262490 Reuse get_active_sheet_item 2025-07-07 19:11:38 +05:00
Andrej730 c82351476a SheetBuilder - move references to local scope
Previously it was set as sheet builder attribute, but was never used as such.
2025-07-07 19:11:38 +05:00
Andrej730 d4f32802aa Show warnings if some sheets related files are missing
Previously when you would load/open/create sheets and some files were missing you would get traceback errors.

Also removed warnings for missing sheets svgs since they can go missing if someone is opening ifc project and want to regenerate sheets. We'll be able to return them in the future, if needed, but they will need some refinement.
2025-07-07 19:11:38 +05:00
Andrej730 d7668c3e3f drawing.get_sheet_identification 2025-07-07 19:11:38 +05:00
Andrej730 1445f91289 Fix very old bug with IfcPersonAndOrganization enum not loading (6ce8a36) 2025-07-07 19:11:37 +05:00
Andrej730 44e27f706a Owner UI - further decouple data.py from Blender entities 2025-07-07 19:11:37 +05:00
Andrej730 416ebde333 Fix names lists are not updated immediately
Similar to addresses problem in #6869
2025-07-07 19:11:37 +05:00
Andrej730 40dcd393c6 Fix addresses not updating immediately in IfcPerson UI
Found by @sboddy in #6869

Caused by trying to remove Blender entities from owner/data.py
2025-07-07 19:11:37 +05:00
Andrej730 4fda916c2f Fix duplicated assignments 2025-07-07 19:11:37 +05:00
Andrej730 acb9953ce3 dev_environment.py - add comments and small changes 2025-07-07 19:11:36 +05:00
Andrej730 4154356288 bim.operator - document resetting screen behaviour 2025-07-07 19:11:36 +05:00
Andrej730 54488bddbb bim.attribute_search_values - use enumproperty for data_type 2025-07-07 19:11:36 +05:00
Andrej730 8f21866248 typing 2025-07-07 19:11:36 +05:00
Thomas Krijnen f3b63aae76 Use should_use_presentation_style_assignment 2025-07-06 18:39:21 +02:00
Thomas Krijnen 3f05bab4e5 Shape builder: allow translate() on tesselated face sets 2025-07-06 18:35:19 +02:00
Thomas Krijnen 8534333092 Update doc comment 2025-07-06 18:34:50 +02:00
Ryan Schultz 5f2b4c96a6 fixes #6874 2025-07-06 10:26:12 -05:00
Massimo Fabbro 00836ec983 Fix #6736. Better use of non-SI units in creating spaces and coverings 2025-07-05 13:59:04 +02:00
Andrej730 fb78f75541 Basic IFC Entities explorer UI
A generic UI to allow editing simple entities like #6869 without creating an entire edit attributes UI inside edit attributes UI.
Still work in progress and should be connected to attributes UI.

Example - https://www.imgchest.com/p/agyv9lpq978
2025-07-04 19:48:12 +05:00
Andrej730 5948282ed0 bim.add_address - display it in more readable way
Before - https://cdn.imgchest.com/files/4gdcxp5j9l4.png
After - https://cdn.imgchest.com/files/yrgcnzgj5n4.png
2025-07-04 19:34:12 +05:00
Andrej730 47b81a6f89 bim.save_search - prefer only SEARCH IfcGroups by default #6857
Previously it was asking for a name to use to save search and users might type anything they find convenient at the moment, but it was possible that this name was used already by something important (for example drawing's IfcGroup) and would change it's description and assign objects there unexpectedly.

Now it will target IfcGroups with SEARCH ObjectType by default and only if user confirms, it will target all IfcGroups available (to keep the search a powerful tool for advanced users that allows them to populate any IfcGroup they want with items).

There's also a temporary patch in place  - when you load/save search Bonsai will try to find old search IfcGroups with ObjectType = None and update their ObjectType, this needed to make sure transition works seamlessly for the simple cases.
2025-07-04 19:34:12 +05:00
Andrej730 8ae08cb90e bim.save_search - not to fail silently 2025-07-04 19:34:11 +05:00
Andrej730 7796856119 typing 2025-07-04 19:34:11 +05:00
falken10vdl f75045f0c5 See #6570. Now it is possible to remove the csv cost file link.
This is a followup to that issue. In this particular case, a remove csv link button is added next to the refresh csv link button.
2025-07-04 12:35:17 +02:00
Andrej730 e52af2baad Iterator.validate_iterator_state to avoid crashes using next() and get()
Just to avoid accidental crashes using .get() / .next() when using them from Python - in cases when iterator was initialized but there were no elements or if iterator got exhausted.
2025-07-03 18:49:41 +05:00
Andrej730 da4ae4c2f2 Fix typo in 2a199cf 2025-07-03 18:48:30 +05:00
Andrej730 28043a8e5d ifc2sql - skip creating geometry if iterator failed to initialize 2025-07-03 18:48:30 +05:00
Andrej730 0e8fb44301 Remove unused Iterator.task_result_index_ (c78b289) 2025-07-03 18:48:08 +05:00
Andrej730 b97dca5d47 typing 2025-07-03 18:48:08 +05:00
Andrej730 207db459a7 Iterator.h - remove redundant typename (eeaf04c) 2025-07-03 18:48:07 +05:00
Andrej730 026eebf39b pyproject.toml - remove enableTypeIgnoreComments
As Pylance now allows inserting pyright ignore comments without it 🎉

https://github.com/microsoft/pylance-release/issues/7220
2025-07-03 18:48:07 +05:00
carlopav 5f5c0b41d5 Basic infrastructure for IfcCostSchedule PDF export with typst (#6860) 2025-07-03 13:18:03 +00:00
falken10 3055dfa1a6 clean up from developer's feedback + black formatting 2025-07-03 05:51:59 +02:00
falken10 b59bdb585b Refactor cost documents following developrs advice 2025-07-03 05:51:59 +02:00
falken10 ccd97c66ae refactor and black formatting 2025-07-03 05:51:59 +02:00
falken10 e6747b258c Remove CostSchedulesMapping and added csv_filepaths to data.py 2025-07-03 05:51:59 +02:00
falken10 6aa6803490 Added relative CSV file paths 2025-07-03 05:51:59 +02:00
falken10 72fbe3a6d9 Refactor cost schedule CSV filepath to use document references 2025-07-03 05:51:59 +02:00
Andrej730 68a602573b ifcopenshell.geom.iterator - more descriptive error in __init__ #6865 2025-07-02 18:14:34 +05:00
Andrej730 1e06dfcb76 Fix console errors when project is not loaded 2025-07-02 18:14:34 +05:00
Andrej730 3a0a912022 Use property_unset instead of in and del 2025-07-02 18:14:34 +05:00
Andrej730 b16fb7d917 bim.pip_install - add dynamic description 2025-07-02 18:14:34 +05:00
Andrej730 94d2d32d18 typing 2025-07-02 18:14:34 +05:00
falken10vdl e743db27f4 Draw attributes with search (#6849)
See example in #4325
2025-07-02 11:11:29 +05:00
Thomas Krijnen bb329affb8 settings: DeferProcessingFirstElement, MaxOffset, MaxOffsetDeviation, ApplyOffset; taxonomy: centroid funcs; iterator get_tasks + items() funcs; geom.map_shape() 2025-07-01 21:10:24 +02:00
Bruno Perdigão 6c4e4e5f91 Partial solution for #6775.
The issue happens when a wall has a "ATPATH" connection and has a
negative direction sense. It mixes the profile points in an incorrect
order. This commit seems to fix it, but maybe there is a better solution.
2025-06-30 19:50:41 -03:00
falken10 a31aa6053e black formatting 2025-06-30 18:25:41 -03:00
falken10 b90f146a68 update gizmo based on selected items 2025-06-30 18:25:41 -03:00
falken10 f67dca8de0 Enhance label rendering in BoundingBoxDecorator to prevent text overlaps 2025-06-30 18:25:41 -03:00
falken10 a686d70908 Updated based on feedback from @brunoperdigao 2025-06-30 18:25:41 -03:00
falken10vdl 38fe7fea65 Update workspace.py cosmetic remove nl from previous edits 2025-06-30 18:25:41 -03:00
falken10 b26890f74b black formating 2025-06-30 18:25:41 -03:00
falken10 2c16247943 moved to viewport overlays 2025-06-30 18:25:41 -03:00
falken10 53fc7bce0c clenaup 2025-06-30 18:25:41 -03:00
falken10 f5db905223 Separate decorator from operator to follow other modules in model / project 2025-06-30 18:25:41 -03:00
falken10 3557b11e64 same style as polyline texts 2025-06-30 18:25:41 -03:00
falken10 c420402334 black . formating 2025-06-30 18:25:41 -03:00
falken10 589c562cba refactor everyting within the class MeasureXYZDimensionsTool 2025-06-30 18:25:41 -03:00
falken10 d3f2711fe4 Moved everything to explore tool 2025-06-30 18:25:41 -03:00
falken10 8b4305360e updated to cope for multiple selection and better looking using trihedrons 2025-06-30 18:25:41 -03:00
falken10 1213bbdd73 set exact same color for bounding box edges as gizom axis 2025-06-30 18:25:41 -03:00
falken10 c3380daa19 better layout with colored bounding box 2025-06-30 18:25:41 -03:00
falken10 7aa87907d7 Add local orientation operator and UI toggle for colored dimensions 2025-06-30 18:25:41 -03:00
Andrej730 8cfd6b1754 Unify doc-strings (remove type/rtype)
As this information is already provided in type hints and we don't need to maintain it in two places.
2025-06-30 18:55:14 +05:00
Andrej730 fc10915d2b ifcopenshell.validate - remove simple_spf dependency (689289b)
Moved it to `TYPE_CHECKING` since it's currently used just for typing.

Was breaking validation in Bonsai since it doesn't provide all submodules with IfcOpenShell https://github.com/IfcOpenShell/IfcOpenShell/issues/6723#issuecomment-3016223786

Also added a simple test so github workflow would catch a simple error like this.
2025-06-30 18:08:34 +05:00
Andrej730 c23c21cb88 black . 2025-06-30 18:08:29 +05:00
Geert Hesselink 260bc80a4b update simple_spf submodule 2025-06-30 10:11:40 +02:00
Thomas Krijnen d7cf803fdf Don't use anonymous namespace for geometry_conversion_result 2025-06-29 20:04:44 +02:00
Thomas Krijnen 4488044a68 yum install xz 2025-06-29 19:58:37 +02:00
skemaikin 21a4db7823 serialize roughnessFactor
add roughnessFactor for gltf serialization
2025-06-29 14:24:52 +02:00
Ryan Schultz d300454118 Option to select only immediate children in Spatial Decomposition panel 2025-06-28 15:00:23 -05:00
Ryan Schultz 553003e664 Closes #6748: An option, when running bim.select_similar_container() to only select those objects in the immediate container 2025-06-28 13:16:51 -05:00
Ryan Schultz 524561a398 similar to #6748: option to select only immediate children, not recursively 2025-06-28 12:07:22 -05:00
Ryan Schultz 16f82683c8 closes #6843 - made merge by distance a little more tolerable 2025-06-28 10:07:54 -05:00
Ryan Schultz 4dbec59b9c Fix #6840: Add search to profile selection, when creating a new extrusion type 2025-06-28 09:17:40 -05:00
falken10vdl dcf69c46e5 Update PLAN_LEVEL annotation (#6844)
* Update PLAN_LEVEL annotation

* Length of line segment based on scale

---------

Co-authored-by: Ryan Schultz <ryan@openingdesign.com>
2025-06-27 09:48:12 -05:00
Andrej730 611e83ff1e Remove unused code for additional ifc files in the drawings
Code isn't used for over 3 years now and it's quite simple, so it's easy to restore if we'll need it again.
Noticed when started to investigate what was the use for `include_query` and `exclude_query` and turned out they basically had no effect for all this time.
2025-06-27 18:51:15 +05:00
Andrej730 bdcebd0f98 document.add_information - error handling in case project is not found 2025-06-27 18:51:15 +05:00
Andrej730 9278974d98 Reuse get_linked_models_document 2025-06-27 18:51:15 +05:00
Andrej730 b3a708c06c typing 2025-06-27 18:51:15 +05:00
falken10vdl 0b05c3bcfc Z-coordinate in PlanLevelDecorator relative to spatial container if exists. Absolute otherwise (#6845)
* Z-coordinate  in PlanLevelDecorator relative to spatial container if exists. Absolute otherwise
2025-06-27 08:20:50 -05:00
Piotr Smolira fef6ef76ed Update code_examples.rst
Added example to iterate through entire project.
2025-06-27 11:37:47 +02:00
Piotr Smolira e39d62b35a Update code_examples.rst
Added example about iterating entire model.
2025-06-27 11:37:47 +02:00
Thomas Krijnen f1827d02ca Retain non-uniform scaling by assigning to gtrsf mat directly #6841 2025-06-27 09:54:13 +02:00
Andrej730 65ccc635d4 Fix sheeter issue after 7440c321b 2025-06-27 10:58:28 +05:00
falken10vdl 2698ba69d5 Display TargetScale in Contexts UI / edit target scale denominator (#6816) 2025-06-27 05:48:14 +00:00
Andrej730 efb3b9d255 Add eevee shadows props to shading_styles.json #6847 2025-06-26 20:19:41 +05:00
Andrej730 b0ec185c34 Fix removing occurrences when removing type object #3931 2025-06-26 19:57:10 +05:00
Andrej730 0ca92f6a1d Bonsai preferences - add 'bsdd' label to make bsdd props more recognizable 2025-06-26 19:57:09 +05:00
Andrej730 6e4b784652 bsdd props ui - small tweaks 2025-06-26 19:57:09 +05:00
Andrej730 c764da3511 Status Filter - add missing row alignment in UI 2025-06-26 19:57:09 +05:00
Andrej730 c0d97051fd Status Filters operators - add undo step to prevent Blender crashes
In Blender if operator is editing any Blender data it must have `UNDO` option, otherwise undo might lead to a crash.
2025-06-26 19:57:09 +05:00
Andrej730 2a199cf8a7 Status Filters - add explicit button to refresh status filter
Button location - https://files.catbox.moe/yuk2e6.png
See the reasoning in https://github.com/IfcOpenShell/IfcOpenShell/pull/6826#issuecomment-3004090797
2025-06-26 19:57:08 +05:00
Andrej730 b5dacfd621 Fix console errors toggling ifc status (same as e92520b77) 2025-06-26 19:57:08 +05:00
Andrej730 1a67ce87a1 light.feature - more test fixes 2025-06-26 19:57:08 +05:00
Andrej730 b7db741474 typing 2025-06-26 19:57:08 +05:00
Andrej730 7b1aa207d8 Add a warning in case user set a large drawing resolution #6686
Example - https://files.catbox.moe/0ygukk.png
2025-06-26 16:28:52 +05:00
Stephen Boddy 9b58d4aa47 Minor refinements for 931d8e6 2025-06-26 10:12:55 +05:00
Stephen Boddy bc2d67220e Improve fix for #5563 based on feedback:
- Remove INFO - No statuses selected,
- Remember and set last status on disable-reenable
- Moved duplicated code into shared tool.Sequence class method
2025-06-26 10:12:55 +05:00
Stephen Boddy 7858cb128e Fix #5563 inconsistent behaviour of Status filter 2025-06-26 10:12:55 +05:00
Bruno Perdigão 0d859bd4ee See #6837. Fix handling of connections when splitting walls. 2025-06-25 19:00:25 -03:00
Andrej730 360afe68aa sheeter - replace by_id with by_guid
No functional changes, just to make it more idiomatic (both `by_id` and `by_guid` end up doing `ifc_file[xxx]` under the hood).
2025-06-25 19:01:41 +05:00
Andrej730 b6af68bfe6 data/templates/titleblocks/README.md
Basic readme about folder contents. Will need to move it more general documentation later.
2025-06-25 19:01:41 +05:00
Andrej730 7440c321b6 sheeter - use more strict data access where it's implied 2025-06-25 19:01:41 +05:00
Andrej730 73b5c2f1ae sheeter - simplify namespace access using constants 2025-06-25 19:01:41 +05:00
Andrej730 485ce22ca7 bim.select_all_sheets - fix a typo 2025-06-25 19:01:41 +05:00
Andrej730 e92520b777 Fix value errors in update callback
Blender is requiring update callback to return `None`, otherwise it prints `ValueError: the return value must be None`.
2025-06-25 19:01:40 +05:00
Andrej730 00414a1590 bim.assign_scene_units - expose operator to ui 2025-06-25 19:01:40 +05:00
Andrej730 6b6bf248ff typing 2025-06-25 19:01:40 +05:00
Andrej730 03fcd59c5a black . 2025-06-25 19:01:40 +05:00
Andrej730 5e89748ba6 unit - remove unnecessary ifc operators 2025-06-25 19:01:39 +05:00
Stephen Boddy c5987bca3d Fix #4588 fix broken rev cloud styles in sheets. 2025-06-25 18:59:42 +05:00
Bruno Perdigão 94f98b1e0e Fix issue where edge intersection snap were not being calculated. 2025-06-24 18:17:24 -03:00
Thomas Krijnen 38dcdde7ae submodule 2025-06-24 22:12:38 +02:00
Thomas Krijnen 95f8af01f0 submodule 2025-06-24 22:03:13 +02:00
Thomas Krijnen 8f0d053049 Factor out code into Iterator.cpp 2025-06-24 22:03:13 +02:00
Andrej730 caccfd2516 unit operators - add some descriptions 2025-06-24 19:08:43 +05:00
Andrej730 b4c4efcf5b unit.unassign_unit - smal doc-string fix 2025-06-24 19:08:43 +05:00
Andrej730 fe81dc7f21 Units UI - match icons in enum with icons in ui list
To build a visual association
Example (previously enum had no icons)
https://files.catbox.moe/0ks3jj.png
https://files.catbox.moe/y1yrv5.png
2025-06-24 19:08:42 +05:00
Andrej730 4f77c41bd5 calculate_unit_scale - small optimization 2025-06-24 19:08:42 +05:00
Andrej730 47b077b555 Fix sheets related tests 2025-06-24 19:08:42 +05:00
Andrej730 845e034614 test_feature - fix non-unique function name 2025-06-24 19:08:42 +05:00
Andrej730 82d020b20d bim light tests - fix after f684a6058
Since defaults were updated
2025-06-24 19:08:42 +05:00
Andrej730 cd73f80894 Fix tool test_drawing after 992ad8e 2025-06-24 19:08:41 +05:00
Andrej730 705a924f41 Fix context's TestImportAttributes after e4a50b3 2025-06-24 19:08:41 +05:00
Andrej730 097e03d6f5 Fix TestGenerateSheetIdentification (b20997d) 2025-06-24 19:08:41 +05:00
Andrej730 4a69df1f6b Classification source - automatically update on changes in bsdd ui 2025-06-24 19:08:41 +05:00
Andrej730 df69ca27da Remove duplicated active_dictionary prop (22f10e5) 2025-06-24 19:08:41 +05:00
Andrej730 b3778facda Fix core drawing tests after be65774 2025-06-24 19:08:41 +05:00
Andrej730 c333535ae5 Blender 4.5 - prevent infinite loading of previews
Related - https://projects.blender.org/blender/blender/issues/140903
2025-06-24 19:08:40 +05:00
Andrej730 fcaeb920ec typing 2025-06-24 19:08:40 +05:00
Andrej730 50d3cab1ec Fix regression with thumbnails update #6839 (be1836f) 2025-06-24 19:08:40 +05:00
Andrej730 4574351817 Light UI - detect Sun Position addon activation/deactivation more reliably 2025-06-23 19:06:16 +05:00
Andrej730 623997b40d Revert unintended prop_with_search change (98c479f1b) 2025-06-23 19:06:16 +05:00
Andrej730 8f7b965a58 Light UI - add our own 'coordinates' property
To ensure when it's changed - latitude and longitude update will follow. Previously we were just displaying sun position addon's `coordinates' prop.
2025-06-23 19:06:16 +05:00
Andrej730 c1e6e7d736 light module true_north prop - use Blender angle subtype 2025-06-23 19:06:16 +05:00
Andrej730 f684a6058c Light UI - quickly select current time/pick location from Google Maps
Location - https://files.catbox.moe/ew9tgd.png ("Now" and "Pick" buttons)
2025-06-23 19:06:15 +05:00
Andrej730 1a80e3f1a1 bim.enum_property_search - note on activate_init 2025-06-23 19:06:15 +05:00
Andrej730 a76af3c2ba validate IfcApplication.UR2 - check that both version and app name are not None (263d238f9)
Otherwise it will be caught by regular validation checks
2025-06-23 19:06:15 +05:00
Andrej730 28bee52dff Blender 4.5 - deprecate GPUShader constructor
Now it should be replaced with `gpu.shader.create_from_info`
2025-06-23 19:06:15 +05:00
Andrej730 58449368fb radiance_exporter_properties -> BIMRadianceExporeterProperies
For consistency with other props
2025-06-23 19:06:15 +05:00
Andrej730 30c33518f0 typing 2025-06-23 19:06:14 +05:00
Andrej730 3a06afae25 black . 2025-06-23 19:06:14 +05:00
falken10vdl 98c479f1bd Create instance context menu (#6830) 2025-06-22 07:09:57 -05:00
Ryan Schultz d875baefde #5709 - Partly addresses RCP camera flipping around. (still hacky though) 2025-06-21 10:14:09 -05:00
Ryan Schultz 9149bb0fdc whoops, accidently pushed. 2025-06-21 08:11:01 -05:00
Ryan Schultz f3c86d7fcc added a few to ifc_classes_suggestions.json 2025-06-21 08:08:50 -05:00
Ryan Schultz 64aeef7103 Automatically detect bonsai_path 2025-06-21 07:59:51 -05:00
Andrej730 cd1bda5311 regenerate_wall_representation - remove debug prints 2025-06-20 18:48:38 +05:00
Andrej730 67ae9fced0 bim.extend_walls_to_polyline_point - fix poll errors selecting non-ifc objects
E.g.
```
  File "\bonsai\bim\module\model\wall.py", line 142, in poll
    if not tool.Ifc.get_entity(obj).is_a("IfcWall"):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'is_a'
```
2025-06-20 18:48:37 +05:00
Andrej730 22fdb324ac Restore daily builds 2025-06-20 18:48:37 +05:00
Andrej730 263d238f9c ifcopenshell.validate - fix IfcApplication.UR2 validation
Previously we were checking for just ApplicationFullName, without considering Version.

https://github.com/buildingSMART/IFC4.3.x-development/issues/966
2025-06-20 18:48:37 +05:00
Andrej730 c6fd02869b ifcopenshell.validate - check json_logger more explicitly 2025-06-20 18:48:37 +05:00
Andrej730 b4d41790a5 ifcopenshell.validate - fix mixed up rule names (IfcApplication.UR) 2025-06-20 18:48:37 +05:00
Andrej730 e18346d4ea bim.remove_application - remove unneccessery info from the tooltip
Since now user can edit applications and see that info there.
2025-06-20 18:48:36 +05:00
Andrej730 c724b2a888 Applications UI - also show app versions
So apps with different version would be identifiable by a glance.
2025-06-20 18:48:36 +05:00
Andrej730 d05f320665 Bonsai - prevent duplicating IfcOpenShell organization for new IfcApplications 2025-06-20 18:48:36 +05:00
Andrej730 6599f74d11 Make Bonsai IfcApplication identifier unique
To avoid validation errors.
2025-06-20 18:48:36 +05:00
Andrej730 4f03c7e03e OwnerData.can_add_user - remove as unnecessary 2025-06-20 18:48:36 +05:00
Andrej730 946cae4065 ifcgit.git_diff - save diff to temp file on alt-click 2025-06-20 18:48:35 +05:00
Andrej730 98145fbbd9 Purge/merge IfcPersonAndOrganizations 2025-06-20 18:48:35 +05:00
Andrej730 74598b805b Purge/merge IfcPerson entities 2025-06-20 18:48:35 +05:00
Andrej730 90ab846a18 typing 2025-06-20 18:48:34 +05:00
Andrej730 5ec77b1b1c black . 2025-06-20 18:48:34 +05:00
Bruno Perdigão 8d079ce0cb Remove unused code. 2025-06-19 16:38:22 -03:00
Bruno Perdigão fb9edb733b Refactor MeasureDecorator to use model PolylineDecorator code. 2025-06-19 16:33:51 -03:00
Andrej730 42b777b1f0 application ui - support changing organization 2025-06-19 19:28:34 +05:00
Andrej730 a968cad4cc core/tool tests for application methods 2025-06-19 19:28:34 +05:00
Andrej730 7ab03109b9 typing 2025-06-19 19:28:33 +05:00
Andrej730 6782729ed8 black . 2025-06-19 19:28:33 +05:00
Ryan Schultz 9dc75ece44 Fix #6593 - preference to turn on/off cut decorator 2025-06-18 21:36:04 -05:00
Andrej730 cbd78506ce Fix mistake in 96bdda305 - expose IfcApplication purge to UI
Noticed a mistake when merge was included twice for applications, instead of including purge+merge.
2025-06-18 19:13:59 +05:00
Andrej730 9af15aeb0b Simple application UI for editing attributes
Example - https://files.catbox.moe/i0wgid.png

Previously before 71d469a27 we produced a lot of IfcApplications on live-builds because of the version differences, now it's possible to edit them from UI - fix the differences and merge them using 106323847
2025-06-18 19:12:12 +05:00
Andrej730 934c9e1485 test_edit_organisation - add ifc4x3 tests 2025-06-18 19:12:12 +05:00
Andrej730 bbebdd56ca owner.edit_application 2025-06-18 19:12:12 +05:00
Andrej730 b1bfe5c3b3 tool.ifc.run - replace with direct api calls 2025-06-18 19:12:11 +05:00
Andrej730 a72e1231f2 test_ids - use more generic exception to fix tests on xmlschema>=4.0
In xmlschema 4.0 it started to throw a more generic XMLSchemaValidationError - I guess there are many things that can trigger validation check and in the new version some other issue gets there first.
2025-06-18 19:12:11 +05:00
Andrej730 47da4ef3ae Fix overlook in 67b539aba 2025-06-18 19:12:11 +05:00
Andrej730 08a8afba5b ifcopenshell-python - fix 3.9 support (replace match statements) 2025-06-18 19:12:10 +05:00
Andrej730 44e5f89119 ruff 0.12 - ignore UP045
Kind of acts the same as UP007 asking to convert all Optional[xxx] to X | None
2025-06-18 19:12:10 +05:00
Andrej730 c68b0c7280 typing 2025-06-18 19:12:10 +05:00
Andrej730 8c5affaae6 linter github workflow - use uv for acquiring black 2025-06-18 19:12:09 +05:00
Andrej730 bd4b80bdc2 linter github workflow - use correct minimum required versions
Previously it was using Python 3.12 for everything, therefore syntax errors from Python 3.9 (e.g. `match` statement in ifcopenshell-python) went under the radar.
2025-06-18 19:12:09 +05:00
Andrej730 21f5363c74 Bonsai - cache get_user and get_application for a speed-up 2025-06-17 18:44:32 +05:00
Andrej730 71d469a271 Bonsai - use main version part to avoid creating too many IfcApplications 2025-06-17 18:41:20 +05:00
Andrej730 96bdda305e Bonsai - purge unused IfcApplications and IfcOrganizations 2025-06-17 18:41:20 +05:00
Andrej730 1063238479 Bonsai - merge identical IfcOrganizations, IfcApplications
Added an utility to merge organizations and application that have exactly the same data. Noticed working with different files that sometimes they have these data duplicated - I guess reasons vary (revit exporter, our bug - c58b84d), but it's nice to be able to clean up redundant data.
Though still need to add some UI to change IfcApplications, so user could also get rid of them in case if they have small differences.

Feature location - https://files.catbox.moe/pwymx1.png

@theoryshaw in file from #6784 there were 2481 identical organizations and 1234 identical applications 😅
2025-06-17 18:41:20 +05:00
Andrej730 d1337cff02 Refresh applications UI on changes (bd1871bd4) 2025-06-17 18:41:19 +05:00
Andrej730 f26f2780e9 owner.ui - check props explicitly instead of relying on ifc data update 2025-06-17 18:41:19 +05:00
Andrej730 2e3c733c0d IfcParseWrapper - exclude instances_by_reference
As it does exactly the same as get_inverse()
2025-06-17 18:41:19 +05:00
Andrej730 ff09cd0a56 IfcParseWrapper - instance_by_guid -> by_guid
It seems they have exactly the same signatures and it makes sense to just rename instance_by_guid to by_guid, instead of implementing it separately.
2025-06-17 18:41:19 +05:00
Andrej730 df91f475c1 entity_instance constructor - skip setting None value 2025-06-17 18:41:19 +05:00
Andrej730 a733f36576 CMake - set C++17 as the minimum required version (34676a567)
Currently IfcOpenShell doesn't compile for C++14 (it stumbles upon `invoke_result_t` in XmlSerializer.cpp) and I'm not sure if it's needed.
2025-06-17 18:41:18 +05:00
Andrej730 9282ccabb3 typing 2025-06-17 18:41:18 +05:00
Thomas Krijnen 404c39873d Update WASM example app 2025-06-17 11:50:02 +02:00
Thomas Krijnen 34a1bc6f04 WASM build changes #6794 2025-06-16 21:18:14 +02:00
Andrej730 15112211c1 add_application not to add deprecated IfcTelecomAddress in ifc4x3 #6806 2025-06-16 19:57:00 +05:00
Andrej730 e3bbec6394 entity_instance constructor and destructor micro optimizations 2025-06-16 19:55:25 +05:00
Andrej730 bd1871bd44 Basic IfcApplications UI
Just so you can view IfcApplications in the project from UI

Example - https://files.catbox.moe/15a72n.png
2025-06-16 19:55:25 +05:00
Andrej730 a75f6a5804 typing 2025-06-16 19:55:25 +05:00
Andrej730 a12bb343ca Fix RUF015 (next() instead of list comprehensions[0])
https://docs.astral.sh/ruff/rules/-iterable-allocation-for-first-element/
2025-06-16 19:55:25 +05:00
Thomas Krijnen b486b32c8d WASM build changes 2025-06-14 18:05:29 +02:00
Thomas Krijnen 5e7893dbb3 Update build-all.py 2025-06-14 15:38:28 +02:00
Thomas Krijnen c8d74a560c Nix build retry downloads 2025-06-13 18:15:23 +02:00
Andrej730 9b8357c5ec entity_instance.__hash__ - reuse id() value for optimization 2025-06-13 19:33:30 +05:00
Andrej730 67b539aba1 remove_representation - optimization
In some cases remove_representation got 2x times faster (when there were a lot representation items that are not IfcTessellatedFaceSets).

getattr with attribute that might not be present on the element could be much slower then checking it's class explicitly.
2025-06-13 19:33:29 +05:00
Andrej730 176c5cc0fb typing 2025-06-13 19:33:29 +05:00
Thomas Krijnen 152c94a7d6 Update cgal for compilation on clang 19 https://github.com/CGAL/cgal/pull/8330 2025-06-13 16:06:08 +02:00
Thomas Krijnen 4b92d7d076 cgal: Dont proceed when not valid after triangulation #6735 2025-06-13 13:33:42 +02:00
Cristian Ritter d10c176bb6 re-adding u32string if ASCII instead of use only Boost.Locale 2025-06-13 10:39:59 +02:00
Bruno Postle 3503d41b3f Minor fix for the CMake package_source target 2025-06-13 09:11:09 +01:00
Esteban DUGUEPEROUX 34676a567e #6803: Update IfcOffsetCurveByDistance to be compitable on Windows with MSVC and C++20
In addition add option to be able to build IfcOpenShell against other C++ standard than C++17
2025-06-13 09:43:13 +02:00
Thomas Krijnen f5a46ffb7c pyodide: try 0.28.0a3 2025-06-12 20:48:52 +02:00
Cristian Ritter 94452b4a7a change deprecated wstring_convert to Boost.Locale and fix #6779 issue 2025-06-12 08:52:38 +02:00
Thomas Krijnen 2c0b1691ae -lexceptions.js #6794 2025-06-11 16:45:06 +02:00
Andrej 60c71c145b IfcFile::inverse_attr_record - add a note 2025-06-11 19:39:46 +05:00
Andrej d0f4dd00c7 getInverse -> get_inverses_by_declaration
Similar to getTotalInverses rename, to prevent confusing with get_inverse.
2025-06-11 19:39:46 +05:00
Andrej eee94f53a4 get_inverse, get_inverse_indices, get_total_inverses - prevent possible crashes
When passing entity without an id (e.g. IfcBaseType)
2025-06-11 19:39:46 +05:00
Andrej 6bb028696d getTotalInverses -> get_total_inverses_by_id
Rename method to avoid confusion with get_total_inverses
2025-06-11 19:39:46 +05:00
Andrej 3499c50d7d entity_instance.__getattr__ - small optimization for inverse attrs
Stop iterating early and don't build a list to make it a bit more optimized.

Though I'm unsure if anyone is really using `unpack_non_aggregate_inverses`
2025-06-11 19:39:46 +05:00
Andrej cd952d7e54 typing 2025-06-11 19:38:24 +05:00
Thomas Krijnen 2741acf4fe Fix compilation 2025-06-11 10:39:02 +02:00
Thomas Krijnen 69b6c41791 Use u32string throughout in character decoder 2025-06-10 20:33:21 +02:00
myoualid d1306d7a27 pyodide fatal error example #6794 2025-06-10 19:31:09 +01:00
Andrej 2bb373c1b2 bim.remove_representation - show operator time if it took more than 10 sec #6784 2025-06-10 18:54:37 +05:00
Andrej b4bc7ec371 remove_deep2 optimization for cases when the same entity is referenced by multiple other in the subgraph #6784 2025-06-10 18:54:37 +05:00
Andrej 1fecd77121 Fix a typo 2025-06-10 18:54:37 +05:00
Andrej c9b41a1499 Warning for joining non-mesh-like representation items #6793 2025-06-10 18:54:36 +05:00
Andrej b1ae213349 Fix bim.unassign_structural_load_case (redundant argument) 2025-06-10 18:54:36 +05:00
Andrej 5d632eae3d opencdeserver - fix bug with DocumentVersions initialization 2025-06-10 18:54:36 +05:00
Andrej 1608677d40 ifcopenshell.api.run to use explicit kwargs instead of unpacking 2025-06-10 18:54:35 +05:00
Andrej a37d46ca3d typing 2025-06-10 18:54:33 +05:00
Thomas Krijnen 862119834f Submodule 2025-06-09 21:37:13 +02:00
Thomas Krijnen 4d7453f9a4 Increase SVG precision to prevent self-intersections on detailed polygons 2025-06-09 21:31:55 +02:00
Thomas Krijnen a4f06f69cc Update pyodide to 0.27.7 #6794 2025-06-09 20:36:37 +02:00
Andrej 24f693e0bb ExpandedGroups - encapsulate in BIMGroupProperties 2025-06-09 18:03:25 +05:00
Andrej 32088fb95a Bonsai - fix cjio dependency (3d77fc7) 2025-06-09 18:03:22 +05:00
Andrej 812baa1c04 ifctester pyproject.toml - document flask dependency 2025-06-09 18:03:22 +05:00
Andrej 6862523c75 pyproject black - select all src folders by default, exclude explicitly 2025-06-09 18:03:22 +05:00
Andrej 8b4683aef1 replace api.run with static methods 2025-06-09 18:03:19 +05:00
Andrej 02d359d0e6 Fix Ruff UP035 (also deprecated annotation symbols) 2025-06-09 18:03:19 +05:00
Andrej 7d4176d105 Fix Ruff UP006 (deprecated annotation symbols) 2025-06-09 18:03:18 +05:00
Andrej 6eb45917fe fix typo 2025-06-09 18:03:15 +05:00
Andrej 3f4656600e typing 2025-06-09 18:03:15 +05:00
Andrej 7034c0b18a Fix typo (5ba82d7) 2025-06-09 18:03:14 +05:00
Andrej 97ece7c20b black . 2025-06-09 18:03:14 +05:00
Massimo Fabbro 5ba82d7764 See #5155. Update doc accordingly 2025-06-08 10:29:28 +02:00
falken10 8e8b44a744 Resource should not increment quantity in cost schedule 2025-06-08 10:23:00 +02:00
Massimo Fabbro 8b9927b77b See #6570. Better variable name 2025-06-08 10:22:12 +02:00
Andrej 09f6991565 cost items ui - update current index on item deletion
To make it less awkward to remove multiple items starting from the last.

Before - https://files.catbox.moe/wce56c.mp4
After - https://files.catbox.moe/wv1jhs.mp4
2025-06-06 19:06:47 +05:00
Andrej 14e8fad841 bim.contract / expand cost items - remove unused prop 2025-06-06 19:06:47 +05:00
Andrej c76785e02c tool.cost - refactor expand/contract rates methods
So they will be more similar
2025-06-06 19:06:46 +05:00
Andrej 7808dd535d Fix contracted cost item removal logic
It was removing checking for cost item index, though container is storing cost item ids.
2025-06-06 19:06:46 +05:00
Andrej 72cf77690e Prevent removing rel when is still valid after IfcCostItem removal #6769 2025-06-06 19:06:46 +05:00
Andrej bf4a3f074f typing 2025-06-06 19:06:46 +05:00
Andrej a374a7e3ff bonsai pyproject.toml - document dev dependencies 2025-06-06 13:11:59 +05:00
Andrej b6267e4ad1 Fix issue with occurrences when reassigning IfcTypeProduct class #6781 (977d814) 2025-06-06 13:11:59 +05:00
Andrej f21b34ffc1 reassign_class - safe check to prevent errors like #6781 2025-06-06 13:11:58 +05:00
Andrej 6de16bf658 bim.reassign_class - add simple test to cover cases like #6781 2025-06-06 13:11:58 +05:00
Andrej 9f17b9fd86 reassign_class - calculate occurrence_class just once for the entire loop 2025-06-06 13:11:58 +05:00
Andrej 781df9e3d8 Fix incorrect glob separator (8c9ccfd) 2025-06-06 11:57:46 +05:00
Andrej 8c9ccfdaae Fix #6760 2025-06-06 11:22:05 +05:00
Andrej 3892ac56a4 Skip 26b21dd test if non-standard schema is not available (e.g. in github ci) 2025-06-05 19:05:28 +05:00
Andrej ba6674299c ifocpenshell-python makefile - shortcut to get current build urls 2025-06-05 19:05:28 +05:00
Andrej fc0624692f test_sql - use Ifc2Sql patcher for readability 2025-06-05 19:05:28 +05:00
Andrej d6b5c73d4a ifcpatch - fix doc-string (b07b0e4be) 2025-06-05 19:05:28 +05:00
Andrej f622d2f961 ifc2sql - consider .ifcsqlite suffix 2025-06-05 19:05:27 +05:00
Andrej 3a66a1c754 geom settings - add new settings from 439f9c1 2025-06-05 19:05:27 +05:00
Andrej d0741cd495 Fix error using X hotkey on empty collection #6696 2025-06-05 19:05:27 +05:00
Andrej 0d39f8df28 Safer BlendData access
To avoid issues like #6771 when we by accident find an ID data-block from linked .blend file.
2025-06-05 19:05:27 +05:00
Andrej 87265d052b typing 2025-06-05 19:05:27 +05:00
Thomas Krijnen 5af7c9a32d Clarify Compound of Solids behaviour in create_solid_from_faces() #6780 2025-06-05 10:22:28 +02:00
Andrej 1ce9a4c68e ifc2sql - fix mysql errors inserting values into shape table 2025-06-04 19:10:52 +05:00
Andrej 930d58cf69 ifc2sql - fix issue inserting mysql json attributes
It seems mysql doesn't have automatic conversion from other types to json, so we stringify it for compatibility.
2025-06-04 19:10:51 +05:00
Andrej 926785c5ec ifc2sql - fix should_get_inverses for mysql 2025-06-04 19:10:51 +05:00
Andrej 274e19dcb9 ifc2sql - warn user if ifc database already exists 2025-06-04 19:10:51 +05:00
Andrej 7f0f93f726 ifc2sql - close cursor too
Important on Windows if someone is using Patcher explicitly and `self.c` is not garbage collected and file stays locked and cannot be moved.
2025-06-04 19:10:51 +05:00
Andrej b07b0e4bea ifc2sql - fix regression with missing resulting database filepath (9055f14) #6758 2025-06-04 19:10:50 +05:00
Andrej a0e4bdcbef ifcpatch - fix ifc2x3 bootstrap (c58b84d)
After c58b84d append_asset requires user to be a valid IFC entity.
2025-06-04 19:04:32 +05:00
Andrej 2da183bfa6 bpy._typing -> bpy.stub_internal
https://github.com/nutti/fake-bpy-module/issues/362
2025-06-04 19:04:31 +05:00
Andrej adf8a1f4e0 ci - run all ifcopenshell packages tests regardless of errors in some 2025-06-04 19:04:31 +05:00
Andrej e1ec422bb1 common.mk - explicitly specify sh as default shell 2025-06-04 19:04:31 +05:00
Andrej c51e36dbca ifcpatch - a static way to use ifcpatch 2025-06-04 19:04:31 +05:00
Andrej b393c120f1 ifcpatch pyproject - list optional dependencies 2025-06-04 19:04:31 +05:00
Andrej 3c7e938d90 IfcGeomWrapper - add missing property for edges_item_ids 2025-06-04 19:04:31 +05:00
Andrej a614fac71a typing 2025-06-04 19:04:31 +05:00
Andrej 5a211c67eb black . 2025-06-04 19:04:30 +05:00
Andrej 6ea53d54ba ruff to ignore src/ifcconvert/cityjson submodule 2025-06-04 11:02:08 +05:00
Dion Moult b9b5aefd5e Fix bSDD to properly use names and codes 2025-06-04 12:11:34 +10:00
Ryan Schultz e1c1b828ad Have save/cancel filter on top as well--helps with long filters. 2025-06-03 07:29:19 -05:00
Thomas Krijnen 3180004a28 WKT serializer: adapt section height to geometry height and emit height as geo:length 2025-06-02 13:30:06 +02:00
Thomas Krijnen 2ea2dc303c OSX action: try with pip's awscli 2025-06-02 11:28:19 +02:00
Thomas Krijnen 0aae57620f Temporary Python 3.9 compatibility 2025-06-02 08:42:47 +02:00
Thomas Krijnen 5c681d729c vc path 2025-06-01 13:55:53 +02:00
Thomas Krijnen 802ab8c296 vs2022 2025-06-01 13:39:00 +02:00
Thomas Krijnen 2ebe7046d3 windows-2022 2025-06-01 10:00:33 +02:00
Thomas Krijnen 3562d89f01 Win S3 upload: try without --recursive but loop in ps 2025-06-01 09:53:17 +02:00
Thomas Krijnen 1155b52375 Black 2025-06-01 09:23:10 +02:00
Thomas Krijnen 2d67440085 Draw.py don't assert just only take outer boundary in arrangement 2025-06-01 09:22:40 +02:00
Thomas Krijnen cc3f2aa28d Expose mirror-y in draw.py 2025-06-01 09:21:59 +02:00
Massimo Fabbro 390349aa7a See #6570. Better cost item rate identification
Now show cost item rate shows the Identification and not the ID for better understanding
2025-05-31 15:58:42 +02:00
Massimo Fabbro eade620581 Add calculating functions for Qto_CourseBaseQuantities for IfcCourse elements 2025-05-31 14:57:46 +02:00
Thomas Krijnen 88ac0a0f6c Wrong preprocessor statement #6765 2025-05-31 14:14:43 +02:00
Bruno Perdigão a531bd8c1f Fix. Uninstall Bonsai Decorators if they are not selected at start 2025-05-30 16:20:42 -03:00
Andrej f44769c138 ifc2sql - add example for should_expand 2025-05-30 18:13:18 +05:00
Andrej a6e3cc667c ifc2sql - add missing should_get_inverses description 2025-05-30 18:13:17 +05:00
Andrej 59b17fc593 ifcopenshell_wrapper.pyi 2025-05-30 18:13:17 +05:00
Andrej fb1b5bea51 ifcopenshell.file - use IFC4X3 instead of IFC4X3_ADD2 for simplicity 2025-05-30 18:13:11 +05:00
Andrej e8aa508405 Add 'advanced' optional ifcopenshell dependencies
To list all other optional dependencies.
2025-05-30 18:13:11 +05:00
Andrej 363083104b Add 'tabulate' to optional ifcopenshell dev dependencies
Used in test_rules and test_wall_opening.
2025-05-30 18:13:11 +05:00
Andrej 2798bf3b68 ifcopenshell.api.geometry to fail more gracefully with fake-bpy
If user has fake-bpy-module for type hints, it will fail with `ImportError: cannot import name 'Vector' from 'mathutils' (unknown location)` instead of `ModuleNotFoundError`.
2025-05-30 18:13:11 +05:00
Andrej e41c4bf7ae Separate mathutils tests 2025-05-30 18:13:11 +05:00
Andrej 3bdce4fbc3 Make zip strict argument optional to support Python 3.9 2025-05-30 18:13:11 +05:00
Andrej ad7473ff1f Make dataclasses args optional to support Python 3.9 #6725 2025-05-30 18:13:10 +05:00
Andrej 3d77fc7c7d ifccityjson - more specific depdendency
API in cjio 0.10 changed (`load` method was moved elsewhere) and for now we just specify that we require older cjio version.
2025-05-30 18:13:10 +05:00
Andrej 92a222cda7 typing 2025-05-30 18:13:10 +05:00
Andrej cc60794293 edit style for rep item - fallback in case user has no styles #6764
Or if style was removed in the process of editing. And it seems now UI will never appear broken that way.

Previously - https://files.catbox.moe/exhkln.png
Currently - https://files.catbox.moe/r36be8.png
2025-05-30 17:01:11 +05:00
Kristoffer Andersen c7b4033f6f Update conda_build_config.yaml
try to fix conda daily
2025-05-29 21:18:19 +02:00
Andrej 1ab288de0b ifc5d - fix <py3.11 compatibility issue (6499ac4) 2025-05-29 19:14:43 +05:00
Andrej 48f62c0b5b ifcopenshell_wrapper.pyi - update from the latest build
I guess previously I used some of my local builds, so some symbols were missing.
2025-05-29 19:14:43 +05:00
Andrej 5fc549453c validate_stub - add wrappers constants 2025-05-29 19:14:43 +05:00
Andrej bd5f5a30b3 validate_stub - also skip object 2025-05-29 19:14:43 +05:00
Andrej baf3edca13 ifcopenshell.validate - fix Python 3.9 support (25eecde) 2025-05-29 19:14:42 +05:00
Andrej c23e973575 Fix moved cost.remove_cost_item_value (b272210) 2025-05-29 19:14:42 +05:00
Andrej a5801e439f edit_attributes - fix Python 3.9 support (39fd9ce) 2025-05-29 19:14:42 +05:00
Andrej 4e65c33bae Bonsai make - use ifcjson master instead of fork
https://github.com/IFCJSON-Team/IFC2JSON_python/pull/3 got merged
2025-05-29 19:14:42 +05:00
Andrej c3652a56ee dev_environment.py #6754 2025-05-29 19:14:42 +05:00
Andrej e1b3b68a8b gitignore jquery.min.js (320a4cf) 2025-05-29 19:14:42 +05:00
Andrej dbce4c5d98 bcf - add missing requests dependency 2025-05-29 19:14:42 +05:00
Andrej 0663c5130a typing 2025-05-29 19:14:42 +05:00
Andrej ea7ced738a Introduce Ruff github CI with some basic linter rules
And also to help catching syntax errors on older Python versions.
2025-05-28 18:24:13 +05:00
Andrej 7cde9629f8 Fix Ruff UP034 (extraneous-parentheses)
https://docs.astral.sh/ruff/rules/extraneous-parentheses/
2025-05-28 18:24:13 +05:00
Andrej 5f5ba72919 Fix Ruff UP003 (taking type of primitive)
https://docs.astral.sh/ruff/rules/UP003
2025-05-28 18:24:13 +05:00
Andrej feebc701fa Fix Ruff UP008 (super-call-with-parameters)
https://docs.astral.sh/ruff/rules/super-call-with-parameters/
2025-05-28 18:24:13 +05:00
Andrej 5ab14f1e4e Fix Ruff UP022 (replace-stdout-stderr)
https://docs.astral.sh/ruff/rules/replace-stdout-stderr/
2025-05-28 18:24:12 +05:00
Andrej f289b55766 Fix Ruff UP010 (unnecessary-future-import)
https://docs.astral.sh/ruff/rules/unnecessary-future-import/
2025-05-28 18:24:12 +05:00
Andrej 3976b77ee1 Fix Ruff UP033 (lru-cache-with-maxsize-none)
https://docs.astral.sh/ruff/rules/lru-cache-with-maxsize-none/
2025-05-28 18:24:12 +05:00
Andrej 7259dd625f Fix Ruff UP013 (convert-typed-dict-functional-to-class)
https://docs.astral.sh/ruff/rules/convert-typed-dict-functional-to-class/
2025-05-28 18:24:12 +05:00
Andrej 03f5ee653b Fix Ruff UP017 (datetime-timezone-utc)
https://docs.astral.sh/ruff/rules/datetime-timezone-utc/
2025-05-28 18:24:12 +05:00
Andrej 62a0c258b2 Fix Ruff UP012 (unnecessary-encode-utf8)
https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8/
2025-05-28 18:24:11 +05:00
Andrej c838139fdc Fix Ruff UP024 (os-error-alias)
https://docs.astral.sh/ruff/rules/os-error-alias/
2025-05-28 18:24:11 +05:00
Andrej a42a95adcb Fix Ruff UP037 (quoted-annotation)
https://docs.astral.sh/ruff/rules/quoted-annotation/
2025-05-28 18:24:11 +05:00
Andrej 3b9d6ed145 Fix Ruff UP009 (utf8-encoding-declaration)
https://docs.astral.sh/ruff/rules/utf8-encoding-declaration/
2025-05-28 18:24:11 +05:00
Andrej 3c4105cbc5 Fix Ruff UP011 (lru-cache-without-parameters)
https://docs.astral.sh/ruff/rules/lru-cache-without-parameters/
2025-05-28 18:24:11 +05:00
Andrej 302423bfdb Fix Ruff UP004 (useless-object-inheritance)
https://docs.astral.sh/ruff/rules/useless-object-inheritance/
2025-05-28 18:24:11 +05:00
Andrej 6dbf86382f Fix Ruff UP018 (native-literals)
https://docs.astral.sh/ruff/rules/native-literals/
2025-05-28 18:24:11 +05:00
Andrej 3b50993b21 ifc2ca, bcf, opencdeserver - add Python 3.9 support
Was breaking due to `|` operator used in annotations instead of `Union`
2025-05-28 18:24:11 +05:00
Andrej a8634a561a ifcopenshell.util.mvd_info - fix breaking Python 3.9 support (cbe8fc1)
due to `|` operator used in annotations instead of `Union`
2025-05-28 18:24:10 +05:00
Andrej a16b8fa376 Fill ifcopenshell_wrapper.pyi with symbols #6684
As described in #6744 partial stub wrapper is completely replacing the type information from the wrapper, so having partial stub is making things worse than they were before.
This commit is adding all available symbols from the wrapper to the stub and allows to gradually include type information to the stub.
It also adds a safe net to ensure stub and wrapper won't go out of sync.
2025-05-28 18:24:10 +05:00
Andrej a25698734a Address PR feedback from #6719 2025-05-28 18:24:10 +05:00
Andrej 1c1bf56893 typing 2025-05-28 18:24:10 +05:00
Andrej ceeb7ca355 black . 2025-05-28 18:24:10 +05:00
Martin15135215 6b77147d45 Create ifcopenshell_wrapper.pyi
stub file for swig-generated ifcopenshell_wrapper python file
2025-05-28 12:29:10 +00:00
Dion Moult a929ab0c4f Big bSDD overhaul for properties and classifications. See description.
* bSDD now supports a couple more args when querying the API.
 * Fetching properties via the classification UI has been removed
 * The bSDD dictionary selector has been merged into the classification
source dropdown
 * The bSDD dictionary selector merged into the property set name
dropdown
 * You can now search for properties in the bSDD directly when adding
properties
 * You can browse properties via groups or classifications (based on
assigned classifications)
 * You can browse properties via keyword (with some limitations due to
the API)
 * You can selectively choose which properties you then want to add.
Only basic support right now.
2025-05-28 20:51:08 +10:00
Iagoba Apellaniz e9eb5f892a Update installation.rst to point to the latest release 2025-05-28 07:25:26 +00:00
Dion Moult 72ef055946 Add tests for boundary 2025-05-27 10:38:38 +10:00
Ryan Schultz 32e4a06fe4 fix: #6749: use shift + click to remove that selection from the selection set.
changed bim.select_similar.calculate_sum to `ctrl + click` instead, since `shift + click` is a UI pattern used in vanilla blender when selecting/deselecting things.
Also refactored into helper methods.
2025-05-26 18:18:18 -05:00
Massimo Fabbro 02af46c99f Fix #6700. Cleanup 2025-05-26 17:56:13 +02:00
Massimo Fabbro 085fc8ca1c Fix #6700
It seems that with new shapely release the buffer behavior has changed so now it seems to work again
2025-05-26 17:56:13 +02:00
Dion Moult 93d36501a3 Fix #3994. Regression where space boundaries would not be created due to shape var being garbage cleaned. 2025-05-26 23:04:51 +10:00
Dion Moult a74f1c6e08 Fix #6513. Bug where OBJ not found when adding element.
This was actually fixed earlier already due to restructuring of
structural element authoring (i.e. the representation_template items now
always has OBJ unless it is a structural item)
2025-05-26 16:45:35 +10:00
Dion Moult 8766cad37e bSDD searches now work on type classes as well as predefined types 2025-05-26 16:34:31 +10:00
Sayanjyoti Das 320a4cf4fa Update installation scripts on documentation 2025-05-26 13:57:52 +10:00
Sayanjyoti Das 77ed64a900 Bundle jQuery at build time instead of fetching from a CDN 2025-05-26 13:57:52 +10:00
Sayanjyoti Das b17c6dde85 fix jquery CDN links 2025-05-26 13:57:52 +10:00
falken10vdl b0b7bbf95f Update data.py to get data sorted
Then later is easier to read in lists
2025-05-26 13:56:03 +10:00
Dion Moult 873fe6a87f Shift down grouping below spatial 2025-05-26 13:55:38 +10:00
talukderpushpak2000 31dc3fe002 Initial Commit 2025-05-26 13:53:58 +10:00
Martin15135215 697b034c22 Add annotation for file.header 2025-05-26 13:52:29 +10:00
Dion Moult 810e8df6fe Fix #6640. Fix invalid association of annotations to grids.
There was already some half written code with this intent it seems, so I
just finished it up.
2025-05-26 13:49:06 +10:00
Dion Moult d6cc1ff9e9 Fix #2999. You can now edit topology representation items. 2025-05-26 12:41:55 +10:00
Dion Moult 242d70c311 Fix set update in loop bug when trying to filter elements by spatial container 2025-05-26 10:47:05 +10:00
Massimo Fabbro 327899ca62 See #6570. Small fix for previuos commit 2025-05-25 08:00:54 +02:00
Massimo Fabbro 482512085c See #6570. Small fix 2025-05-25 08:00:54 +02:00
Massimo Fabbro 12774607f3 See #6570. Now it is possible to assign a cost rate from a non schedule of rate cost schedule 2025-05-25 08:00:54 +02:00
Massimo Fabbro 242d0ffb3f See #6570.Minor fix 2025-05-25 08:00:54 +02:00
Massimo Fabbro 2bef2a0219 See #6570. More consistent cost rate assignment
Now when a cost rate is assigned to a cost item, it creates also a relation between them, making the relation more consistent. It is also shown in the UI
2025-05-25 08:00:54 +02:00
Ryan Schultz 8cb871a6a2 Better convention: Using poll() method for b452348748
Thank you @Andrej730.
per https://github.com/IfcOpenShell/IfcOpenShell/commit/b452348748629a6e6dad6df24e21bfad2c203043#r157689504
2025-05-24 07:53:45 -05:00
Andrej730 fb5358e54e clash ui - add basic header for the found clashes
Example - https://i.imgur.com/JjKIUZX.png

Also show indices, so it will be easier to communicate a specific clash to someone.
2025-05-23 18:45:07 +05:00
Andrej730 deae4e659b clash ui - expose clash type to UI
Example - https://imgur.com/a/Wdyg3pn
2025-05-23 18:45:07 +05:00
Andrej730 29bd89324a ifcopenshell.geom.tree.get_clash_type 2025-05-23 18:42:55 +05:00
Andrej730 087608a5f5 clash ui - show clearance, tolerance using blender units for readibility 2025-05-23 18:42:55 +05:00
Andrej730 bc5a291321 ifcclash - remove 'objects' dict item
It seems to be part of legacy code that's no longer used since 18c38b3
2025-05-23 18:42:55 +05:00
Andrej730 88befea174 typing 2025-05-23 18:42:55 +05:00
Andrej730 441e2ddbd6 black . 2025-05-23 18:42:55 +05:00
Dion Moult 09e07c80c5 Implement recursive contract / expand of the spatial tree 2025-05-23 17:35:15 +10:00
Orion Sehn e3ddccdb11 updating documentation to make it clear to run the setup script on windows with blender closed. 2025-05-23 11:38:25 +05:00
Orion Sehn 621f6e7a31 fix to default directory on dev_environment.bat assuming you weren't using the daily build 2025-05-23 11:38:25 +05:00
Bruno Perdigão 0052570fdb See #6166. First implementation of polyline extend walls. 2025-05-22 23:47:11 -03:00
Bruno Perdigão 55e2171cac Remove print statement 2025-05-22 23:16:48 -03:00
Bruno Perdigão 1f8967d5b8 See #6240. Fix input handling for "close polyline". 2025-05-22 23:16:25 -03:00
falken10vdl 0410cec21b Added Quickstart guides for Linux and Windows IDEs using VSCode (#6494)
* Added Quickstart guides for Linux and Windows IDEs using VSCode

* added some tips to Linux QS

* Added point 15

* extra picture for step 15

* Added windows part

* updated windows vscode launch settings

* added info about branch rebase for PRs

* updated dev_environment to cope for some errors
2025-05-22 09:46:41 -05:00
Andrej730 08ab48887a clash - allow running a quick clash without saving results to some file explicitly
It's available on alt+click.
Example - https://imgur.com/a/wctjHnq
2025-05-22 18:09:28 +05:00
Andrej730 97bb587772 Bump bonsai build #6620
Besides the pending issues also resolves #6589 and error in #6196
2025-05-22 17:08:46 +05:00
Ryan Schultz b452348748 Select all instances that share the same attribute value as any of the selected objects 2025-05-21 22:58:34 -05:00
Andrej730 60c18628c5 clash ui - display "clashes are not loaded" to avoid confusion with "no clashes found"
Example - https://imgur.com/a/5a6cuEG
2025-05-21 18:43:03 +05:00
Andrej730 5bb769448d bim.execute_ifc_clash - show results in Bonsai UI for bcf file too
Previously results would show up only if you'd save .json, creating confusion since UI is showing "0 Clashes Found" though there were clashes.
2025-05-21 18:43:03 +05:00
Andrej730 ca890d2f9b clash ui - make filters expandable for readibility
Example - https://imgur.com/a/ZeVeF3u
2025-05-21 18:43:03 +05:00
Andrej730 99782a2813 bim.select_clash_source - hide internal props from user
to avoid confusion
2025-05-21 18:43:02 +05:00
Andrej730 d48406006f clash ui - move file selection button closer to filepath field
To make the type of the field more apparent.
2025-05-21 18:43:02 +05:00
Andrej730 0405b5c61f clash ui - deduplicate ui code 2025-05-21 18:43:02 +05:00
Andrej730 c9eea76e57 bim.execute_ifc_clash - more user-friendly error when one of the filepaths do not exist 2025-05-21 18:43:02 +05:00
Andrej730 cc73143ac1 clash - typing fixes and some refactor 2025-05-21 18:43:02 +05:00
Andrej730 84b0abfb60 ci-ifcopenshell-python - include submodules #6723 2025-05-21 18:43:02 +05:00
Andrej730 13ea2ba8d2 ifcopenshell-python makefile - set sh as the main shell explicitly 2025-05-21 18:43:02 +05:00
Andrej730 d148ab4f31 Fix error switching to custom title block #6685 2025-05-21 18:43:02 +05:00
Andrej730 c7a030cc2d typing 2025-05-21 18:43:01 +05:00
Andrej730 718254fe5e Fix regression parsing iso duration with floats (d1b1b08) #6715 2025-05-21 12:16:07 +05:00
Andrej730 41227b89c8 Fix subtle bug with operators precedence in eabdb5d
`+` has a higher precedence than `or`, so it resulted in the error below

```
Traceback (most recent call last):
  File "\bonsai\bim\module\spatial\prop.py", line 86, in update_active_container_index
    tool.Spatial.load_contained_elements()
  File "\bonsai\tool\spatial.py", line 312, in load_contained_elements
    cls.load_contained_elements_by_type(container)
  File "\bonsai\tool\spatial.py", line 321, in load_contained_elements_by_type
    results = cls.get_container_elements_grouped_by_type(container)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\tool\spatial.py", line 294, in get_container_elements_grouped_by_type
    element_type.is_a() + "/" + element_type.Name or "Unnamed"
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
TypeError: can only concatenate str (not "NoneType") to str
```
2025-05-20 19:06:25 +05:00
Andrej730 2547ee9ab5 bonsai.crash.txt
There seems to be cases when Blender might crash too unexpectedly.
E.g. #6686 - during viewport render system is running out of resources and crashing without leaving blender.crash.txt, leaving everyone clueless. Which is arguably a bug in Blender (both crash and lack of any crash report), but at least we'll have a fallback for this case.

What bonsai.crash.txt does - it's created in system temp folder with the current Python traceback, just before some dangerous operation. If operation didn't crashed Blender, then file will be unlinked. If crash did occurred, it might be the only clue for users and devs on what actually happened.
2025-05-20 19:06:25 +05:00
Andrej730 d22f1bcd71 'viewport' render type - add a note 2025-05-20 19:06:24 +05:00
Andrej730 0c2158089d disable update_has_underlay if update_props is disabled
Otherwise it was trying to load drawing styles too early, when drawing was not yet active. And then they were reloaded again during ActivateDrawingBase. Occurred after c2860e6, before this commit issue was kind of hidden.
2025-05-20 19:06:02 +05:00
Thomas Krijnen ccafc203b5 submodule 2025-05-20 10:05:21 +02:00
Andrej730 0efc2d25f1 Fix for assign_class and object with modifiers in Blender <4.4 #6701 2025-05-20 12:24:35 +05:00
Andrej730 ac50f002f0 Fix confused blender and pset props in 9586869 2025-05-19 19:28:55 +05:00
Andrej730 66f4c957ea black . 2025-05-19 19:28:55 +05:00
Dion Moult 67016d6f90 See #2999. Reimplement basic creation of structural items. 2025-05-19 17:36:12 +10:00
Thomas Krijnen 439f9c14ce OcctNoCleanTriangulation CacheShapes PermissiveShapeReuse setting; Cgal conditional copy during triangulation; occt cheaper check for triangulation existance #6712 2025-05-18 22:14:22 +02:00
Dion Moult 404bf13a18 Update colour by property test to reflect new behaviour of only showing geometry not empties
ALL (feature) TESTS PASS YESS
2025-05-18 19:23:34 +10:00
Dion Moult 3a37bcdcaa Update test cases to reflect new drawing activation UI 2025-05-18 19:09:29 +10:00
Dion Moult 992ad8e24a See #4699. Continue refactoring logic from drawing decorator into DecoratorData. 2025-05-18 15:32:55 +10:00
Dion Moult 1de2515fcd More bSDD tests to cover all current functionality 2025-05-18 12:05:33 +10:00
Thomas Krijnen 4bc88eac2f ifdefs around geometry handling for 4.3 rc schemas #6710 2025-05-17 16:01:28 +02:00
Dion Moult 22f10e5549 Fix #6669. bSDD now supports test dictionaries, refactor domain to dictionary, support zero length keyword searches, multi-dict support, and basic tests.
Feature tests can now have more sophisticated per UIList item spies.
2025-05-17 21:28:12 +10:00
Andrej730 8e34c1d7df Fix error using bim.updating_representation for object with material set
Possibly occurred after 4c255cc, but haven't investigated deeper.

@BIMvoice
The error you were reporting about Split Along Edge operator was caused by this issue, should be fixed now too.
See https://jmp.sh/hgJEHsgH

Example error traceback:
```
Error: Python: Traceback (most recent call last):
  File "C\bonsai\bim\ifc.py", line 487, in execute_ifc_operator
    result = getattr(operator, "_execute")(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C\bonsai\bim\module\geometry\operator.py", line 541, in _execute
    self.update_obj_mesh_representation(context, obj)
  File "C\bonsai\bim\module\geometry\operator.py", line 666, in update_obj_mesh_representation
    tool.Ifc.link(new_representation, data)
  File "C\bonsai\tool\ifc.py", line 230, in link
    IfcStore.link_element(element, obj)
  File "C\bonsai\bim\ifc.py", line 258, in link_element
    tool.Geometry.get_mesh_props(obj).ifc_definition_id = element.id()
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C\bonsai\tool\geometry.py", line 92, in get_mesh_props
    return mesh.BIMMeshProperties
           ^^^^^^^^^^^^^^^^^^^^^^
ReferenceError: StructRNA of type Mesh has been removed
```
2025-05-16 19:43:42 +05:00
Andrej730 4369baa226 bim.split_along_edge - improve descriptions, add error handling 2025-05-16 19:43:42 +05:00
Andrej730 7941d71feb SvgWriter - make required arguments more explicit 2025-05-16 19:43:42 +05:00
Andrej730 68d967c2e5 pyproject.toml - enableTypeIgnoreComments=false 2025-05-16 19:43:41 +05:00
Andrej730 4ea9a598c7 operator.drawing - remove unnecessary ifc operators 2025-05-16 19:43:41 +05:00
Andrej730 06d1c81954 black . 2025-05-16 19:43:41 +05:00
Andrej730 aa5f08880b typing 2025-05-16 19:43:41 +05:00
Ryan Schultz 9e6320d545 A preference to list those classes that are not affected by the 'cut decorator'. 2025-05-15 21:45:53 -05:00
Bruno Perdigão f39d3d4b9c Fix polyline plane method decorator to show properly.
The `plane_method` where not being cleared after canceling or confirming
the polyline operator.
2025-05-15 21:28:31 -03:00
Bruno Perdigão 5c72cf35bd See #6208. Change wall merge tolerance for more consistent behavior. 2025-05-15 19:08:04 -03:00
Bruno Perdigão b9a435e1c3 Fix polyline tool calculation when dealing with 180 degrees angles. 2025-05-15 17:41:32 -03:00
Bruno Perdigão 92f2559ce0 See #6536. Recalculate profile only for selected objects. 2025-05-15 17:41:32 -03:00
Bruno Perdigão acf9713943 Fix aggregate decorator after #6537. 2025-05-15 17:41:32 -03:00
Andrej730 a77125ff12 bim.add_drawing - document camera placement behaviour in description
See https://i.imgur.com/VfOjGHk.png
2025-05-15 20:01:02 +05:00
Andrej730 c8841bcb6a Add a test for be65774 2025-05-15 20:01:01 +05:00
Andrej730 b20997dea8 Fix tests missing assert statement - add assert and fix them 2025-05-15 19:45:11 +05:00
Andrej730 292aca6685 Remove unnecessary IFC operators 2025-05-15 19:45:11 +05:00
Andrej730 3a824ec969 Allow adding arrays to openings and spatial elements 0b8fb41 0e37528 2025-05-15 19:45:11 +05:00
Andrej730 bea9f42f87 Annotator.add_text - remove ancient dead code
It was deprecated a while ago in 43869c3, when we stopped using curves for text annotations. bim.resize_text was also using curve annotations and now also was unused
2025-05-15 19:45:11 +05:00
Andrej730 e4a50b32ce typing 2025-05-15 19:40:44 +05:00
Andrej730 76611024b6 Remove drawing styles attributes prop (a50c633cf) 2025-05-15 10:30:35 +05:00
Andrej730 92ee82374c EPset_Drawing.Metadata - add description
See https://i.imgur.com/0fR9fRj.png
2025-05-14 19:40:46 +05:00
Andrej730 af81aa1fae Reapply 06f1477 to fix not appearing IFC Description button
Not that skipping non-string properties was a bad idea, but inserting it right at the beginning was - non-string IFC properties were missing IFC descriptions because of it. Moved it past `Attribute` check to avoid this issue.

For anyone hearing about this feature for the first time - https://imgur.com/a/dNRao3R

I assume this was also the issue that was encountered in #5892
2025-05-14 19:40:45 +05:00
Andrej730 16f9f91561 util.doc - statically type json structures 2025-05-14 19:40:45 +05:00
Andrej730 3a52a848ae draw_custom_context_menu - small refactor to improve readibility 2025-05-14 19:40:45 +05:00
Andrej730 a50c633cf4 Remove drawing styles attributes
It's been awhile since they were unused (2c301d7) and now they're replaced with EPset_Drawing.Metadata
2025-05-14 19:40:45 +05:00
Andrej730 6251750133 common method for getting active drawing style 2025-05-14 19:40:45 +05:00
Andrej730 acef6379e8 drawing styles - add descriptions to render types, remove NONE type
NONE type removed as it was unused and basically meant the same as 'VIEWPORT'.

Example - https://i.imgur.com/7r6CJdg.png
2025-05-14 19:40:45 +05:00
Andrej730 c2860e6e25 drawing.operator not to use DrawingsData 2025-05-14 19:40:44 +05:00
Andrej730 b8e5cd740a Use common method for getting active drawing entity 2025-05-14 19:40:44 +05:00
Andrej730 9188dc60ab typing 2025-05-14 19:40:44 +05:00
Thomas Krijnen 8ce56db0c3 Align preprocessor flags #6706 2025-05-14 13:09:17 +02:00
Andrej730 b91b1401f4 util.get_aggregate - make it more readable (5597095) 2025-05-13 17:44:42 +05:00
Andrej730 0e37528915 Skip IfcOpeningElements arrays during base import, setup constraint on opening load #6688 2025-05-13 17:23:46 +05:00
Andrej730 9991c4aa56 IfcImporter.create_generic_elements - prevent argument mutation
as it may have unexpected consequences
2025-05-13 17:23:46 +05:00
Andrej730 0ef3983035 bim.show_opening - simplify code 2025-05-13 17:23:46 +05:00
Andrej730 0f6e6a48f4 bim.show_openings - expand description 2025-05-13 17:23:45 +05:00
Andrej730 3d225beafd Add notes on Tekla accommodations (7c3870595) 2025-05-13 16:59:12 +05:00
Andrej730 6a91bbb720 typing 2025-05-13 16:59:12 +05:00
Hannes 1f23e4ba18 Fixed typo in __init__.py
See https://github.com/IfcOpenShell/IfcOpenShell/issues/6625
2025-05-13 13:18:24 +02:00
Andrej730 2ebcffc7d4 Geometry changes will be lost - show warning only for IFC objects
Previously it would also occur for vanilla Blender objects not connected to IFC.
2025-05-13 13:26:54 +05:00
Andrej730 3d4321f713 Prevent class assignment in non-object mode #6697
Example - https://i.imgur.com/KQYQLQZ.png
2025-05-13 13:26:54 +05:00
Andrej730 f8799305e1 black . 2025-05-13 13:26:54 +05:00
Dion Moult 7c38705958 Accommodate invalid missing mapped representations and items coming from Tekla (2023) 2025-05-13 13:09:37 +10:00
Bruno Perdigão f6fc0cfa0f See #6537. Fix object display type when exiting aggregate mode. 2025-05-12 22:01:40 -03:00
Richard Brice 686e9c946b Adds object placement to stationing referent. 2025-05-12 16:14:53 -07:00
sboddy 3085072751 Improve drawing activation as per #6653 (#6659)
Drawings are now activated in a bit different way - not by the camera button located above the drawings list, but by using the camera indicator next to each drawing. Which allows do change active drawing very quickly. All activation options (shift+, alt+) are also available from this indicator.

Now - https://imgur.com/a/DmnWkul

Before - https://imgur.com/a/zjPDkPa
2025-05-12 19:46:34 +05:00
Andrej730 0328be4093 Drawing styles - remove deprecated properties / property values
Deprecated properties:
- scene.render.engine + BLENDER_EEVEE
- scene.render.simplify_shadows
- scene.render.simplify_shadows_render
- space.overlay.backwire_opacity
- space.overlay.show_edges
- space.overlay.show_occlude_wire
- scene.display.shading.wireframe_color_type + MATERIAL
2025-05-12 19:10:04 +05:00
Andrej730 6218d3902e bim.activate_drawing_style - show warnings if some property failed to be set
Otherwise errors were passing silently (just console errors) and remained unfixed. 'PYTEST_VERSION' is needed to be even more strict when we're running pytests, which allows us to catch outdated Blender properties in time.

Example - https://i.imgur.com/K7Trkxf.png
2025-05-12 19:10:04 +05:00
Andrej730 be1836fa48 Mark thumbnails as outdated instead of updating them right away
As user may never open them in type manager
2025-05-12 19:08:46 +05:00
Andrej730 22b5db8a1e ci-black-formatting - print diff 2025-05-12 19:08:46 +05:00
Andrej730 4268e1376c Address PR review changes #6660 2025-05-12 19:08:46 +05:00
Andrej730 e2c1a54e0a typing 2025-05-12 19:08:46 +05:00
falken10vdl d1be660469 Update type manager preview on updating paramteric door/window type (#6656) 2025-05-12 12:41:02 +05:00
Kristoffer Andersen 3ae5227b57 Update ci-ifcopenshell-conda-daily.yml
remove env var
2025-05-11 19:59:05 +02:00
Kristoffer Andersen cdc994ca76 Update ci-ifcopenshell-conda-daily.yml
move rattler build output dir outside of build dir
2025-05-11 19:58:27 +02:00
Kristoffer Andersen 0ad4087f0a Update ci-ifcopenshell-conda-daily.yml
remove dotnet to save space on ubuntu runner
2025-05-11 19:28:12 +02:00
Kristoffer Andersen 4b7ca648c6 Update ci-ifcopenshell-conda-daily.yml
try to get even more space on ubuntu ci runner
2025-05-11 19:23:28 +02:00
Kristoffer Andersen 17bd6e6b0c Update ci-ifcopenshell-conda-daily.yml
fix missing comma
2025-05-11 19:12:34 +02:00
Kristoffer Andersen 7b80803cbe separate osx-x86 and osx-arm64 for the conda daily builds (#6694)
* separate osx-x86 and osx-arm64 for the conda daily builds

* remove running this in PR. No need.
2025-05-11 18:59:52 +02:00
Kristoffer Andersen eaf67d83f9 Update ci-ifcopenshell-conda-daily.yml
strip daily conda build version date string
2025-05-11 16:04:21 +02:00
Kristoffer Andersen 41f754e15b Update ci-ifcopenshell-conda-daily.yml
Update conda ci
2025-05-11 15:53:29 +02:00
Kristoffer Andersen b7cdb86327 use rattler-build to speed up daily conda builds and fix deps (#6692)
* use rattler-build to speed up daily conda builds and add typing_extensions

* minor update
2025-05-11 09:37:02 +02:00
falken10vdl 809a20dc99 system info copied when clicking in Bonsai Version (#6660) 2025-05-09 16:09:37 -05:00
Andrej730 f5e41d18c6 drawing.operator - reuse blender.get_view3d_space 2025-05-09 19:26:28 +05:00
Andrej730 60a8c45ad7 Fix IFC operators issues for drawing styles operations (38cf88d) 2025-05-09 19:26:28 +05:00
Andrej730 73f98bfe4b Remove 2 years old fallback for missing ShadingStyles prop in drawing's pset (38cf88d) 2025-05-09 19:26:28 +05:00
Andrej730 958686958b drawing.prop - reuse generic pset update callback 2025-05-09 19:26:28 +05:00
Andrej730 e0b61c5794 Fix drawing styles update on underlay toggle after 9329390 2025-05-09 19:26:28 +05:00
Andrej730 5aa5552759 Fix drawing test after be657748f 2025-05-09 19:26:27 +05:00
Andrej730 82a19cee7b generate_drawing_matrix - simplify logic 2025-05-09 19:26:27 +05:00
Andrej730 43d4adbd9d Fix tests after specifying types more precisely in def9352ad 2025-05-09 19:26:27 +05:00
Andrej730 1d3c71985f typing 2025-05-09 19:26:27 +05:00
Andrej730 381fca0812 black . 2025-05-09 19:26:27 +05:00
Dion Moult 0f37eca333 Fix bug in IFC4X3 when convering properties to quantities 2025-05-09 15:24:30 +10:00
Dion Moult 6bf9b8b0c9 Fix bug where appending assets could accidentally create duplicate contexts 2025-05-09 15:24:17 +10:00
Bruno Perdigão 9361cfee28 See #6536. Update cardinal point when editing IfcMaterialProfileSetUsage. 2025-05-08 22:06:48 -03:00
Bruno Perdigão 1c205d494a See #6332. Fix issue where imperial precision were being used by metric formatting. 2025-05-08 19:15:51 -03:00
Ryan Schultz 4d1d224a34 fix #6683 - When placing Level (Plan) annotation, have it take on the 'z' dimension of the 3d cursor, verses the front plane of the drawing camera 2025-05-08 17:04:34 -05:00
Andrej730 4976af5e66 drawing.create_camera - remove setting location line that had no effect
Apparently it had no effect from the beginning in 074fe0d and lost any use in 6a8292d, when we started to base position on current cursor's location.
2025-05-08 19:23:24 +05:00
Andrej730 be657748f3 Align new Model drawings to viewport by default
Previously it was creating not very useful top-down camera at `(0,0,0)`, now it should be more intuitive.

Example - https://imgur.com/a/GHrvCSJ
2025-05-08 19:23:24 +05:00
Andrej730 def9352ade typing 2025-05-08 19:23:23 +05:00
Josef Wienerroither a20002ecca Update links and version info ifcmax.rst 2025-05-08 14:42:50 +02:00
Andrej730 b7a0f230ad Fix confused target_view callbacks (1619ae854)
Fix using the same function name twice leading to DocProperties using camera callback too.
2025-05-08 15:50:00 +05:00
Andrej730 76529a06bb Fix resetting perspective camera on drawing activation (1619ae854) 2025-05-08 15:41:34 +05:00
Andrej730 dcdae67a2d Fix typo in 1619ae854 2025-05-08 15:41:34 +05:00
Andrej730 5a7a368169 ifcopenshell.file.Transaction - add static typing 2025-05-08 15:41:34 +05:00
Thomas Krijnen ec13294430 python39 compatibility 2025-05-08 08:37:41 +02:00
Andrej730 653b88ba18 Bonsai - make undo errors visible to user
In theory there are possible undo errors, when some step wasn't registered in undo system and undo then won't be able to undo change from IFC. The problem is, those errors could be very dangerous but they occur in background, undetected by users, they're only visible as console traceback.

After this commit we'll try to detect them and set `last_error`, which will show usual Bonsai error panel in Properties.

@theoryshaw just in case, as you will probably find this kind of error 😁

Example traceback user might see in system console (or in their error report from "Copy Error Message").
```
last_error: Undo transaction operations:
- {'action': 'create', 'value': {'id': 1560, 'type': 'IfcGrid', 'GlobalId': '05Y8D_Ja12HfiEbmc$D3WN', 'OwnerHistory': None, 'Name': None, 'Description': None, 'ObjectType': None, 'ObjectPlacement': None, 'Representation': None, 'UAxes': None, 'VAxes': None, 'WAxes': None, 'PredefinedType': None}}
- {'action': 'edit', 'id': 1560, 'index': 2, 'old': None, 'new': 'Grid'}
- {'action': 'edit', 'id': 1221, 'index': 4, 'old': ({'id': 1297}, {'id': 1247}, {'id': 1220}, {'id': 1272}), 'new': ({'id': 1272}, {'id': 1247}, {'id': 1220}, {'id': 1560}, {'id': 1297})}
- {'action': 'create', 'value': {'id': 1561, 'type': 'IfcCartesianPoint', 'Coordinates': (0.0, 0.0, 0.0)}}
- {'action': 'create', 'value': {'id': 1562, 'type': 'IfcDirection', 'DirectionRatios': (0.0, 0.0, 1.0)}}
- {'action': 'create', 'value': {'id': 1563, 'type': 'IfcDirection', 'DirectionRatios': (1.0, 0.0, 0.0)}}
- {'action': 'create', 'value': {'id': 1564, 'type': 'IfcAxis2Placement3D', 'Location': {'id': 1561}, 'Axis': {'id': 1562}, 'RefDirection': {'id': 1563}}}
- {'action': 'create', 'value': {'id': 1565, 'type': 'IfcLocalPlacement', 'PlacementRelTo': None, 'RelativePlacement': {'id': 1564}}}
- {'action': 'edit', 'id': 1565, 'index': 0, 'old': None, 'new': {'id': 66}}
- {'action': 'edit', 'id': 1560, 'index': 5, 'old': None, 'new': {'id': 1565}}
- {'action': 'create', 'value': {'id': 1566, 'type': 'IfcGridAxis', 'AxisTag': 'A', 'AxisCurve': None, 'SameSense': True}}
- {'action': 'edit', 'id': 1560, 'index': 7, 'old': None, 'new': ({'id': 1566},)}
- {'action': 'create', 'value': {'id': 1567, 'type': 'IfcCartesianPoint', 'Coordinates': (-2.0, 0.0)}}
- {'action': 'create', 'value': {'id': 1568, 'type': 'IfcCartesianPoint', 'Coordinates': (22.0, 0.0)}}
- {'action': 'create', 'value': {'id': 1569, 'type': 'IfcPolyline', 'Points': ({'id': 1567}, {'id': 1568})}}
- {'action': 'edit', 'id': 1566, 'index': 1, 'old': None, 'new': {'id': 1569}}
- {'action': 'create', 'value': {'id': 1570, 'type': 'IfcGridAxis', 'AxisTag': 'B', 'AxisCurve': None, 'SameSense': True}}
- {'action': 'edit', 'id': 1560, 'index': 7, 'old': ({'id': 1566},), 'new': ({'id': 1566}, {'id': 1570})}
- {'action': 'create', 'value': {'id': 1571, 'type': 'IfcCartesianPoint', 'Coordinates': (-2.0, 10.0)}}
- {'action': 'create', 'value': {'id': 1572, 'type': 'IfcCartesianPoint', 'Coordinates': (22.0, 10.0)}}
- {'action': 'create', 'value': {'id': 1573, 'type': 'IfcPolyline', 'Points': ({'id': 1571}, {'id': 1572})}}
- {'action': 'edit', 'id': 1570, 'index': 1, 'old': None, 'new': {'id': 1573}}
- {'action': 'create', 'value': {'id': 1574, 'type': 'IfcGridAxis', 'AxisTag': 'C', 'AxisCurve': None, 'SameSense': True}}
- {'action': 'edit', 'id': 1560, 'index': 7, 'old': ({'id': 1566}, {'id': 1570}), 'new': ({'id': 1566}, {'id': 1570}, {'id': 1574})}
- {'action': 'create', 'value': {'id': 1575, 'type': 'IfcCartesianPoint', 'Coordinates': (-2.0, 20.0)}}
- {'action': 'create', 'value': {'id': 1576, 'type': 'IfcCartesianPoint', 'Coordinates': (22.0, 20.0)}}
- {'action': 'create', 'value': {'id': 1577, 'type': 'IfcPolyline', 'Points': ({'id': 1575}, {'id': 1576})}}
- {'action': 'edit', 'id': 1574, 'index': 1, 'old': None, 'new': {'id': 1577}}
- {'action': 'create', 'value': {'id': 1578, 'type': 'IfcGridAxis', 'AxisTag': '01', 'AxisCurve': None, 'SameSense': True}}
- {'action': 'edit', 'id': 1560, 'index': 8, 'old': None, 'new': ({'id': 1578},)}
- {'action': 'create', 'value': {'id': 1579, 'type': 'IfcCartesianPoint', 'Coordinates': (0.0, -2.0)}}
- {'action': 'create', 'value': {'id': 1580, 'type': 'IfcCartesianPoint', 'Coordinates': (0.0, 22.0)}}
- {'action': 'create', 'value': {'id': 1581, 'type': 'IfcPolyline', 'Points': ({'id': 1579}, {'id': 1580})}}
- {'action': 'edit', 'id': 1578, 'index': 1, 'old': None, 'new': {'id': 1581}}
- {'action': 'create', 'value': {'id': 1582, 'type': 'IfcGridAxis', 'AxisTag': '02', 'AxisCurve': None, 'SameSense': True}}
- {'action': 'edit', 'id': 1560, 'index': 8, 'old': ({'id': 1578},), 'new': ({'id': 1578}, {'id': 1582})}
- {'action': 'create', 'value': {'id': 1583, 'type': 'IfcCartesianPoint', 'Coordinates': (10.0, -2.0)}}
- {'action': 'create', 'value': {'id': 1584, 'type': 'IfcCartesianPoint', 'Coordinates': (10.0, 22.0)}}
- {'action': 'create', 'value': {'id': 1585, 'type': 'IfcPolyline', 'Points': ({'id': 1583}, {'id': 1584})}}
- {'action': 'edit', 'id': 1582, 'index': 1, 'old': None, 'new': {'id': 1585}}
- {'action': 'create', 'value': {'id': 1586, 'type': 'IfcGridAxis', 'AxisTag': '03', 'AxisCurve': None, 'SameSense': True}}
- {'action': 'edit', 'id': 1560, 'index': 8, 'old': ({'id': 1578}, {'id': 1582}), 'new': ({'id': 1578}, {'id': 1582}, {'id': 1586})}
- {'action': 'create', 'value': {'id': 1587, 'type': 'IfcCartesianPoint', 'Coordinates': (20.0, -2.0)}}
- {'action': 'create', 'value': {'id': 1588, 'type': 'IfcCartesianPoint', 'Coordinates': (20.0, 22.0)}}
- {'action': 'create', 'value': {'id': 1589, 'type': 'IfcPolyline', 'Points': ({'id': 1587}, {'id': 1588})}}
- {'action': 'edit', 'id': 1586, 'index': 1, 'old': None, 'new': {'id': 1589}}
Traceback (most recent call last):
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\ifcopenshell\file.py", line 352, in undo
    transaction.rollback()
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\ifcopenshell\file.py", line 167, in rollback
    element = self.file.by_id(operation["id"])
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\ifcopenshell\file.py", line 510, in by_id
    return self[id]
           ~~~~^^^^
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\ifcopenshell\file.py", line 497, in __getitem__
    return entity_instance(self.wrapped_data.by_id(key), self)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\ifcopenshell\ifcopenshell_wrapper.py", line 8884, in by_id
    return _ifcopenshell_wrapper.file_by_id(self, id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Instance #1565 not found

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\bonsai\bim\ifc.py", line 426, in callback
    tool.Ifc.get().undo()
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\ifcopenshell\file.py", line 354, in undo
    raise UndoSystemError("Error during transaction undo.", transaction) from e
ifcopenshell.file.UndoSystemError: Error during transaction undo.
```
2025-05-07 18:54:57 +05:00
Andrej730 f8489779f6 Fix missing IFC undo for all activate drawing operations
Very dangerous bug that could create a situation when .blend will go out of sync with IFC leading to unpredictable issues.
Example issue:
1. Create a drawing and activate it.
2. Create a grid.
3. Activate the drawing again.
4. Undoing just drawing activation here would work fine - annotations would be still floating in IFC without objects, but that would be fixed on the next drawing activation

To make it more dangerous undo grid creation. Then you'll get the traceback similar to the one below. The most dangerous part of it, that user won't see an error, it will just pop up in the system console silently.
```
Traceback (most recent call last):
  File "\bonsai\bim\handler.py", line 244, in undo_post
    IfcStore.undo(until_key=props.last_transaction)
  File "\bonsai\bim\ifc.py", line 533, in undo
    transaction["rollback"](transaction["data"])
  File "\bonsai\bim\ifc.py", line 449, in <lambda>
    operator, rollback=lambda d: tool.Ifc.get().undo(), commit=lambda d: tool.Ifc.get().redo()
                                 ^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\file.py", line 345, in undo
    transaction.rollback()
  File "\ifcopenshell\file.py", line 161, in rollback
    element = self.file.by_id(operation["id"])
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\file.py", line 498, in by_id
    return self[id]
           ~~~~^^^^
  File "\ifcopenshell\file.py", line 485, in __getitem__
    return entity_instance(self.wrapped_data.by_id(key), self)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\ifcopenshell_wrapper.py", line 8884, in by_id
    return _ifcopenshell_wrapper.file_by_id(self, id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Instance 1565 not found
```
2025-05-07 18:54:57 +05:00
Andrej730 64df82a76b ifcopenshell.file - save last failed transaction for introspection 2025-05-07 18:54:57 +05:00
Andrej730 af4fbd6750 Document features available for perspective camera in it's description
See https://i.imgur.com/8ZPJ8ag.png
2025-05-07 18:54:56 +05:00
Andrej730 1619ae8543 Expose camera type to UI and automatically update IFC camera type on drawing activation
Noticed fixing #6670 that though example project in this issue had camera named "PERSPECTIVE" but it was saved to IFC as orthogonal and there is no straightforward way to change it, besides changing Blender camera props and updating representation.

Example - https://imgur.com/a/GQ9A3EK

It's kind of exposed to UI now, but there's still bunch of issues with it to address.
2025-05-07 18:54:56 +05:00
Andrej730 41eadf735e add_representation - more readable error on using panoramic camera 2025-05-07 18:54:56 +05:00
Andrej730 172775d4ed Fix constant camera representation update because of the float garbage values
Similar issue to 82f25f5

Basically matrix is a little bit different every time you activate drawing even if user made no changes to camera position. My guess is basically all float values stored by Blender somewhere deep as float32 but when you access matrix world, Blender converts them to Python floats (which are float64) and some garbage values introduced along the way creating this noise.
2025-05-07 18:54:56 +05:00
Andrej730 d539cad1c2 Fix mistake in fd30a6b #6670 2025-05-07 18:54:56 +05:00
Andrej730 94cf56e080 typing 2025-05-07 18:54:56 +05:00
Geert Hesselink cf253824ca update latest simple_spf submodue 2025-05-07 15:48:01 +02:00
Andrej730 9c73f17303 add pytest-bdd to bonsai daily cli 2025-05-06 20:08:09 +05:00
Andrej730 a6f523039b bonsai pytest.ini - specify plugins explicitly
To make it possible to run the tests with PYTEST_DISABLE_PLUGIN_AUTOLOAD set, which is very useful if you don't want to start Blender anytime you run any tests on your system.
2025-05-06 20:07:44 +05:00
Andrej730 c2f9bfeb8d Fix bim search tests after 0b22333 2025-05-06 20:07:44 +05:00
Andrej730 3ab1c2e0f9 outliner.delete - make errors from attempt to delete locked object less scary
Traceback errors give users an impression that some broke and maybe project now is in some invalid state and they should ctrl-z immediately, error reports are much more friendly.

Before - https://i.imgur.com/N4fUU1M.png
After - https://i.imgur.com/6On1Be0.png
2025-05-06 19:03:05 +05:00
Andrej730 0ed964daa2 object.delete, outliner.delete - move to common method is_batch logic 2025-05-06 19:03:04 +05:00
Andrej730 03f619a77c aggregate decorator indicator - make it more intuitive
Example - https://imgur.com/a/RoFQKa1
2025-05-06 19:03:04 +05:00
Andrej730 e5ad35e2c8 bim.add_aggregate - use more common way to get all selected objects 2025-05-06 19:03:04 +05:00
Andrej730 297f15737d bim.add_aggregate - remove unused 'obj' property (c51aa91) 2025-05-06 19:03:03 +05:00
Andrej730 374b95efdf bim.add_aggregate - update description 2025-05-06 19:03:03 +05:00
Andrej730 744ed522b6 Fix error duplicating just an IfcElementAssembly (d2b05ea)
Example error traceback:
```
Traceback (most recent call last):
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\bonsai\bim\module\geometry\operator.py", line 1044, in execute
    return OverrideDuplicateMove.execute_duplicate_operator(self, context, linked=False)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\bonsai\bim\module\geometry\operator.py", line 1055, in execute_duplicate_operator
    IfcStore.execute_ifc_operator(operator, context)
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\bonsai\bim\ifc.py", line 458, in execute_ifc_operator
    result = getattr(operator, "_execute")(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\bonsai\bim\module\geometry\operator.py", line 1047, in _execute
    return OverrideDuplicateMove.execute_ifc_duplicate_operator(self, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\bonsai\bim\module\geometry\operator.py", line 1085, in execute_ifc_duplicate_operator
    old_to_new, new_active_obj = tool.Geometry.duplicate_ifc_objects(
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\bonsai\tool\geometry.py", line 2131, in duplicate_ifc_objects
    tool.Root.recreate_aggregate(old_to_new)
  File "C:\Users\Andrej\AppData\Roaming\Blender Foundation\Blender\4.4\extensions\.local\lib\python3.11\site-packages\bonsai\tool\root.py", line 397, in recreate_aggregate
    tool.Blender.select_and_activate_single_object(bpy.context, tool.Ifc.get_object(new_aggregate[0]))
                                                                                    ~~~~~~~~~~~~~^^^
TypeError: 'NoneType' object is not subscriptable
```
2025-05-06 19:03:03 +05:00
Andrej730 f4bc3fffa3 bim.override_move - rename for clairty and add description 2025-05-06 19:03:02 +05:00
Andrej730 06a2cecb51 typing 2025-05-06 15:15:03 +05:00
Andrej730 b0f2785e99 black . 2025-05-06 11:11:07 +05:00
Thomas Krijnen c6c852c7f6 NB: fix get_cartesiantransformationoperator3d() 2025-05-05 21:47:57 +02:00
Geert Hesselink 5d920d5e31 header_entity type -> attr check 2025-05-05 20:54:19 +02:00
Geert Hesselink 2b522b71cb hasattr to isinstance() 2025-05-05 20:54:19 +02:00
Geert Hesselink d00c3735ec Update src/ifcopenshell-python/ifcopenshell/validate.py
Co-authored-by: Thomas Krijnen <t.krijnen@gmail.com>
2025-05-05 20:54:19 +02:00
Geert Hesselink bbdc9c45dd use repr(), compatible f.header 2025-05-05 20:54:19 +02:00
Geert Hesselink 5eb9cdf40d handle header entity string reversal 2025-05-05 20:54:19 +02:00
Geert Hesselink 689289bb60 validate ifcopenshell.simple_spf.file 2025-05-05 20:54:19 +02:00
Geert Hesselink d401e4c948 set set/get_description, add view_definitions & tests 2025-05-05 16:18:09 +02:00
Geert Hesselink cbe8fc1ebd mvd info to module, add testing, setattr & getattr 2025-05-05 16:18:09 +02:00
Geert Hesselink 9f11568aff Allow for dots in mvd value 2025-05-05 16:18:09 +02:00
Geert Hesselink 968e193f99 abort string when None, more explicit error handling 2025-05-05 16:18:09 +02:00
Geert Hesselink 2d06a79842 handle emptry description field 2025-05-05 16:18:09 +02:00
Geert Hesselink 808a16ba4a parsed mvd description in ifcopenshell.file 2025-05-05 16:18:09 +02:00
Andrej730 a67a6034a5 Use mesh.separate for vanilla Blender objects #6658 (0b22333)
mesh.separate works completely different in EDIT mode, previously we only supported it from object mode
2025-05-05 18:45:09 +05:00
Andrej730 8fe1a63339 Bonsai docs - add page to list hotkeys
See https://docs-unstable.bonsaibim.org/reference/hotkeys.html
2025-05-05 18:45:08 +05:00
Andrej730 1ce78f3c65 Override Shift-X and Shift-Del with IFC Delete
To prevent users from creating weird state of IFC model by using non-ifc `object.delete` triggered by those hotkeys by default.
2025-05-05 18:45:08 +05:00
Andrej730 57b35c68e4 IFC delete - just reuse object.delete if no IFC file active
So it will be possible for this operator to completely override object.delete
2025-05-05 18:45:08 +05:00
Andrej730 ff57b91691 typing 2025-05-05 18:45:08 +05:00
Andrej730 6e15219fad black . 2025-05-05 18:34:47 +05:00
Andrej730 979964f211 Merge branch 'falken10vdl-patch-2' into v0.8.0 2025-05-05 18:33:15 +05:00
falken10vdl 4ce2f81479 Skip non MESH and CURVE object listing elements for coloring #6657
So non MESH or CURVE objects are not listed in the Colour by property.

Now all unrelated empty objects are excluded from the coloring section as they were just taking space, see - https://imgur.com/sPA8I5V
2025-05-05 18:31:19 +05:00
Thomas Krijnen dbdde52435 validate.py Add test files 2025-05-05 14:21:19 +02:00
Thomas Krijnen 84568f34f0 validate.py be more specific in distinguishing type decl and entity refs 2025-05-05 14:20:47 +02:00
Geert Hesselink fe9c548ae0 Valid template header default (#6610)
* Valid template header default

* consistent version in tempalte file

* schema-dependent mvd
2025-05-05 13:56:40 +02:00
Andrej730 1714516a81 Fix bim.override_move issue with aggregates #6648 (c9fc543) 2025-05-05 14:59:31 +05:00
Andrej730 c4c3a2056b overridden delete operators - add descriptions 2025-05-02 19:58:24 +05:00
Andrej730 fad35b14f2 Fix dangerous bug with bim.override_outliner_delete
Essentialy outliner.delete should do the same as object.delete, but in our case the main implementation was in object.delete while outliner.delete was missing very important parts - e.g. handling arrays.

So if user could have remove part of an array without errors, leaving pset data invalid. See #6590, #6547.
Found this by trying to debug issues above.

Now outliner.delete will call object.delete explicitly, so the two stay connected.

I also had an idea that may be it somehow can produce #6632/#6619, but couldn't find a way to reproduce it. So it's still uncertain.
2025-05-02 19:58:24 +05:00
Andrej730 2382f8d7f8 color by property - add operators descriptions 2025-05-02 19:58:23 +05:00
Andrej730 9ae7a68c43 Display actual Bonsai version for live repo (reuse last commit date) 2025-05-02 19:58:23 +05:00
Andrej730 7a5e5fe602 Reuse get_last_commit_hash
Noticed that hash wasn't updating from live git repo because of this.
Also update commit data only when running the package, not extension.
2025-05-02 19:58:23 +05:00
Andrej730 839b2c9c1f typing 2025-05-02 19:58:23 +05:00
Andrej730 4aaaf6e8f5 Fix ifc2x3 errors editing IfcSurfaceStyleShading #6624 2025-05-02 12:32:49 +05:00
Andrej730 1b38b03532 new operator - bim.select_entity_by_guid
I find myself often having element guid copied (either from other viewer or from text editor or from elsewhere) and to find it in scene I needed to create a new search group, add a filter, paste guid and then search for it. So decided to add a shortcut for this that just takes guid from the clipboard and runs the search for it.

Location - https://i.imgur.com/3c5rm1N.png
2025-05-01 19:32:53 +05:00
Andrej730 cbf0fa88eb Reenable black formatting workflow
Since 3b1e893 black formatter workflow basically had no use since it wasn't reporting any issues (no one checks workflow logs unless workflow failed) and wasn't reliable for catching syntax errors either (black formatter catches syntax errors only when they get in the way of it's formatting the code, but now we delegate to python itself to catch syntax errors, see 406962287c).

And we also have some docs on how to apply black formatter - https://docs.bonsaibim.org/guides/development/code_style.html
2025-05-01 19:32:52 +05:00
Andrej730 6961ca8ce7 Fix bug creating a drawing if linked model schema doesn't match the main model schema
Co-Authored-By: Thomas Krijnen <1096535+aothms@users.noreply.github.com>
2025-05-01 19:32:52 +05:00
Andrej730 d758d4aef5 Windows - fix opening paths with special characters #6630 2025-05-01 19:32:52 +05:00
Andrej730 84240c870c More consistent Windows Bonsai .ifc file association
Rely on `winreg` instead of running powershell scripts with cmd commands + .reg file + weird workflow with the need to retype cmd command. Also use HKCU instead of HKCR because it doesn't require admin rights.

If someone hearing about this feature for the first time, here's a short demo - https://imgur.com/a/dfG44pY (icon appears too but after explorer restart).
2025-05-01 19:32:52 +05:00
Andrej730 4483d8e958 Fix typo 2025-05-01 19:32:52 +05:00
Thomas Krijnen 70440050db Bounds checking in variant array 2025-04-30 20:43:43 +02:00
Thomas Krijnen bc7527a73b Defensiveness against empty faces 2025-04-30 20:43:27 +02:00
Thomas Krijnen c8ad1ba0ee Fix faceset helper on advanced brep oriented edges #6604 2025-04-30 20:43:13 +02:00
Andrej730 c7a29d5604 Fix invalid IfcGrid cartesian points (774a770)
They were saved as 4d coordinates, not 2d.
2025-04-30 19:36:22 +05:00
Andrej730 814c16d3ee IfcGrid - add placement by default to avoid invalid IFC 2025-04-30 19:36:22 +05:00
Andrej730 3bedbfb82c Operator to run git diff on current ifc file
Short demo - https://imgur.com/a/TvnztNy
2025-04-30 19:36:22 +05:00
Andrej730 07f42b9126 typing 2025-04-30 19:36:21 +05:00
Andrej730 5b1da583d9 black . 2025-04-30 19:36:21 +05:00
Thomas Krijnen c624162f09 partial_success_is_success #6589 2025-04-30 14:53:53 +02:00
FabioPiccinini bc221cfa99 Use tool.Blender.get_view3d_area() to allow the use of separate windows (#6617) 2025-04-30 17:29:05 +05:00
c4rlosdias 5d02afa47e clear list of entities failed when execute Tester 2025-04-30 17:27:06 +05:00
Andrej730 406962287c ci-black-formatting - check syntax errors explicitly 2025-04-30 15:22:09 +05:00
Andrej730 241f7679b0 create_axis_curve - fix typo 2025-04-30 14:24:04 +05:00
Thomas Krijnen 0001071185 partial_success_is_success #6589 2025-04-29 22:03:18 +02:00
Thomas Krijnen 8d476c792d todo notes #6589 2025-04-29 21:43:49 +02:00
Thomas Krijnen 97c7aefad7 One more self-intersection check in cgal kernel #6589 2025-04-29 21:39:08 +02:00
Andrej730 34cafc761a Use actual text position instead of local pos rendering drawings text decorations
E.g. it's important if text is part of parametric array and it's local position may be constant, but it's constrainet by parent's position.
2025-04-29 19:26:43 +05:00
Andrej730 3fbde8db28 mesh.add_grid - display props in Blender project units
Example - https://i.imgur.com/koLiH7U.png
2025-04-29 19:26:42 +05:00
Andrej730 0b8fb41ac4 bim.add_array - guard from unexpected element types
So we can gradually expand it with the things we do know to support.
2025-04-29 19:26:18 +05:00
Andrej730 dc46afc227 Setup array constraints for annotations that use paramatric arrays
Previously you was able to add parametric array to annotations but constraint would be missing on file reload.
2025-04-29 19:26:18 +05:00
Andrej730 b8ee1d4d8d import_ifc - skip setup_arrays for annotations #6636 2025-04-29 19:26:18 +05:00
Andrej730 ecf461e1e0 typing 2025-04-29 19:26:17 +05:00
Andrej730 1856eeddeb Fix missed cases of loading unloaded linked files in 9316e0b (#6403) 2025-04-29 15:20:45 +05:00
Andrej730 afb2b9fdea Fix issues printing drawing with projects linked by relative path
The fix in f9bf889 wasn't related to this problem and was targetting another bug.
2025-04-29 15:20:45 +05:00
Andrej730 af2cb2896a Revert f9bf889 #6605
As this fix is no longer needed and covered by more general resolve_uri refactor
2025-04-29 15:20:45 +05:00
Andrej730 e792cf8fa0 get_uri, resolve_uri - refactor #6605
1) Use pathlib for consistency
2) Ensure consistent output - always use posix format and resolve paths (but keep the symlinks)
2025-04-29 15:20:45 +05:00
Thomas Krijnen 7b71e2ce2a Don't set xstep.cascade.unit as it appears to result in scaling during export #6623 2025-04-29 10:53:01 +02:00
Thomas Krijnen ce72337d3a Mark settings as internal #6623 2025-04-29 10:52:27 +02:00
Bruno Postle 0e9ca541c4 Linux escape double-quotes in filenames #6630
Special chars ('#{)$ were already escaped, but " wasn't
2025-04-28 21:34:05 +01:00
Andrej730 784576b249 IFC Join - support joining non-ifc Blender objects into representation items
Short demo - https://imgur.com/a/o9MJiIr
2025-04-28 19:14:21 +05:00
Andrej730 5e26e55a8c edit_meshlike_item - fix missing item object name update 2025-04-28 19:14:21 +05:00
Andrej730 1b110c4a84 reuse ifc.link for meshes 2025-04-28 19:14:20 +05:00
Andrej730 b94629133c geometry.name_item_object 2025-04-28 19:14:20 +05:00
Andrej730 55e270c135 IFC Join - fix error joining representation items (6ce4b5d)
It was trying to reaccess already removed ifc_definition_id leading to an error. Now we update id with a new item.
2025-04-28 19:14:20 +05:00
Andrej730 308d628b1e IFC Join - prevent joining rep items into non items
Because it was removing representation item object leaving Bonsai in confusing state, which may lead to errors later
2025-04-28 19:14:20 +05:00
Andrej730 5e16588eb7 IFC Join - prevent possible ghost ifc objects after join
Skip ifc objects of different type as they will be ignored by object.join either way and removing them produced ghost ifc objects.
2025-04-28 19:14:20 +05:00
Andrej730 e919a0643f IFC Join - add description 2025-04-28 19:14:19 +05:00
Andrej730 9835ef977f IFC Join - add poll check similar to object.join 2025-04-28 19:14:19 +05:00
Andrej730 10f84537de typing 2025-04-28 19:14:19 +05:00
Massimo Fabbro f9a0081b33 Fix bug in reload link ifc where in Windows gives an error if relative path is used 2025-04-28 06:22:13 +02:00
Massimo Fabbro 11462c388a Purge unecessary code 2025-04-28 06:22:13 +02:00
Ryan Schultz 4bcd9639f4 whoops 2025-04-27 16:55:45 -05:00
Ryan Schultz b856c40fe7 small tweak to previous commit 2025-04-27 16:54:34 -05:00
Ryan Schultz dd1c529544 Fix #6601 - If you duplicate something it makes the duplicate the active object.
also bulk deselect all objects_to_remove to speed things up a little.
2025-04-27 13:12:07 -05:00
Andrej730 c9fbec4d46 Revert "Bump IOS build in Bonsai" #6589
This reverts commit 50e7728f95.
2025-04-25 19:47:17 +05:00
Andrej730 c9437329ef IFC Mesh Separate - fix bug in 52af302bef separating multiple elements
Forgot to clear selection after processing each object, it could have led to incorrect results since mesh.separate is applied to the selection later.
2025-04-25 19:47:17 +05:00
Andrej730 a09e971674 IFC Mesh Separate - fix not updated items decorator after some item was separated
Noticed fixing bug from #6285
2025-04-25 19:47:17 +05:00
Andrej730 8ac04e32e5 bim.import_representation_items - add description 2025-04-25 19:47:16 +05:00
Andrej730 0634dc83d4 IFC Mesh Separate - fix bug when separating an item wouldn't change separated item
Mentioned by Ryan in #6285
2025-04-25 19:47:16 +05:00
Andrej730 5dc4b18d3f IFC Mesh Separate - reload representation just once if multiple items got separated 2025-04-25 19:47:16 +05:00
Andrej730 f84bca8017 IFC Mesh Separate - fix bug when new separated mesh wasn't relinked to a new ifc item 2025-04-25 19:47:16 +05:00
Andrej730 31a6c91c4b core.duplicate_drawing - remove debug print statements and unused code 2025-04-25 19:47:16 +05:00
Andrej730 30242d859e Fix core test for drawing duplication (0b1c049) 2025-04-25 19:47:16 +05:00
Andrej730 330799c799 core tests - very readable error for unpredicted return values
Previously:
E       TypeError: Object of type Prophecy is not JSON serializable

Now:
E           TypeError: Failed to serialize call: '{'name': 'duplicate_ifc_objects', 'args': ([<Prophecy for 'bonsai.core.tool.Ifc'>],), 'kwargs': {}}'.
E           Possibly due to unpredicted return value for some call.
E           See the list of the recent calls without return values:
E           - {'name': 'get_object', 'args': ('annotation',), 'kwargs': {}}
E           - {'name': 'run', 'args': ('group.assign_group',), 'kwargs': {'group': 'new_group', 'products': ['new_drawing']}}
E           - {'name': 'run', 'args': ('group.edit_group',), 'kwargs': {'group': 'new_group', 'attributes': {'Name': 'unique_name', 'ObjectType': 'DRAWING'}}}
E           - {'name': 'run', 'args': ('group.unassign_group',), 'kwargs': {'group': 'group', 'products': ['new_drawing']}}
2025-04-25 19:47:15 +05:00
Andrej730 e2c2234199 core tests - more readable errors
E.g. it shows now:
AttributeError: Interface 'bonsai.core.tool.Drawing' has no attribute 'weird_method'.

Instead of:
Prophecy <class 'abc.Drawing'> has no attribute weird_method
2025-04-25 19:47:15 +05:00
Andrej730 34efa9f459 typing 2025-04-25 19:47:15 +05:00
Andrej730 261de9b2be entity_instance.__getattr__ - document some attributes conversion to Python 2025-04-25 19:47:15 +05:00
Andrej730 52af302bef IFC Mesh Separate - add to object mode menu too for discoverability + support multiple selected elements
Short demo - https://imgur.com/a/PIuJ9Rq
2025-04-24 19:54:36 +05:00
Andrej730 529c74f6a9 create_camera - small optimization with util.shape 2025-04-24 19:54:36 +05:00
Andrej730 fd30a6b5eb create_camera - small optimization with early return 2025-04-24 19:54:35 +05:00
Andrej730 82f25f50cc Fix resaving camera to IFC on every drawing activation (32899eb)
`camera_props.update_representation` basically always returned True leading to `bim.update_representation` call on camera on every drawing activation. It was always True because `create_camera` wasn't setting `representation` and some other related camera props.

Changes:
- create_camera now setting representation
- ortho_scale, rather_x and raster_y now explicitly is tied to width, height and drawing scale props, not on depsgraph update. Depsgraph update wasn't allowing to set these props in time for create_camera to record representation correctly
- depsgraph update now only in charge of ortho_scale (just to be sure user won't touch it by hand) and scene.render resolution
2025-04-24 19:54:35 +05:00
Andrej730 d0dc31588d typing 2025-04-24 19:54:35 +05:00
Andrej730 68f71c715e Fix invalid cprops after camera data is recreated
Mentioned in  #5676, discoverd after 476604202a.

`bim.update_representation` removes previous `camera.data` and adds a new one making cprops invalid possibly leading to either invalid prop values or crashes (https://projects.blender.org/blender/blender/issues/137889).
2025-04-23 19:22:31 +05:00
Andrej730 6913060f0c bim.expand_target_view - remove trailing space from description 2025-04-23 19:22:31 +05:00
Andrej730 4427c73816 bim.override_mesh_separate - handle possible mode mismatch more gracefully
Other options LOOSE_PARTS and MATERIAL do support object mode.
2025-04-22 20:05:32 +05:00
Andrej730 d188155fac bim.override_mesh_separate - fix bug with skip_save
Previously you would use bim.override_mesh_separate from UI with any of the available `type` options, then running operator separately would leading to running this operator from F3 to always choose this options (possibly leading to errors in objects mode)
2025-04-22 20:05:31 +05:00
Andrej730 598dfd75e7 bim.override_origin_set - use operator_enum for menu 2025-04-22 20:05:31 +05:00
Andrej730 5c63cd7981 bim.override_mesh_separate - use operator_enum, hide Blender Separate
as it's now integrated in IFC separate and using Blender Separate for ifc elements is not safe
2025-04-22 20:05:31 +05:00
Andrej730 0b22333b69 bim.override_mesh_separate - integrate mesh.separate
mesh.separate will be used for all other selected non-ifc objects.

Included some code to support multple objects but there are still a few issue with it, I'll look into soon.
2025-04-22 20:05:31 +05:00
Andrej730 69481c2d63 bim.override_mesh_separate - fix bug separating elements (7bc4b51)
`obj` variable was used but never passed to `separate_element`

```
Error: Python: Traceback (most recent call last):
  File "\bonsai\bim\ifc.py", line 458, in execute_ifc_operator
    result = getattr(operator, "_execute")(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\bim\module\geometry\operator.py", line 105, in _execute
    self.separate_element(element)
  File "\bonsai\bim\module\geometry\operator.py", line 175, in separate_element
    new_objs = [obj]
                ^^^
NameError: name 'obj' is not defined
```
2025-04-22 20:05:31 +05:00
Andrej730 671c887201 bim.override_mesh_separate - invoke menu if called without argument
Mimicking default mesh.separate behaviour.

@Gorgious56 I don't know if you've seen this before, but you might be interested - I've found a way to figure if operator wasn't called without any arguments.
2025-04-22 20:05:30 +05:00
Andrej730 0a6fbeccb0 bim.override_mesh_separate - use original Blender enum and description 2025-04-22 20:05:30 +05:00
Andrej730 4b3ca11c12 typing 2025-04-22 20:05:30 +05:00
Andrej730 f9bf8897bc Fix error linking ifc files with relative filepaths going upwards
Mentioned in https://github.com/IfcOpenShell/IfcOpenShell/pull/6540#issuecomment-2820938852
2025-04-22 16:37:05 +05:00
Andrej730 932939099a Add target_view prop to camera
This property was already set in 50b41f5 but Blender property was missing. Though nowit's not very useful as it just writes value to pset.
2025-04-22 16:37:05 +05:00
Andrej730 8d31d93531 typing 2025-04-22 16:37:05 +05:00
Andrej730 5c4f157624 readable_ifc_duration - add doc-string and note 2025-04-21 19:00:25 +05:00
Andrej730 f87c694432 Fix issue with custom diagram scale (1d5891f)
It was referring to non-existent prop "custom_diagram_scale"
2025-04-21 19:00:25 +05:00
Andrej730 38eedffd80 tool.Ifc - add some doc-strings 2025-04-21 19:00:25 +05:00
Andrej730 305439d27e Link.name - fix description
After f8828d3 we store linked filepath in .ifc project, so we don't support path relative to .blend anymore.
2025-04-21 19:00:24 +05:00
Andrej730 908bf02098 ifc5d - strip " Cost" suffix when importing csv
" Cost" is a suffix is added on export, so it makes to get rid of it on import.
2025-04-21 19:00:24 +05:00
Andrej730 c6176d364f ifc5d - use filename for imported schedule name
So it will be in sync with how export works.

Removed non_sor_fields is unrelated - forgot to remove before.
2025-04-21 19:00:24 +05:00
Andrej730 068814c095 bim.assign_document - add to documents UI 2025-04-21 19:00:24 +05:00
Andrej730 476604202a typing 2025-04-21 19:00:24 +05:00
Andrej730 558bda1aea black . 2025-04-21 19:00:23 +05:00
Dion Moult 426f1b91f2 See #2783. Don't show 0 durations for clarity. 2025-04-21 22:59:14 +10:00
Dion Moult d1b1b08174 See #2783. Duration parsing no longer uses isodate to remain faithful to formatting. 2025-04-21 22:39:23 +10:00
Thomas Krijnen c1513190d4 Debug build_win.yml 2025-04-21 13:17:14 +02:00
Andrej730 50e7728f95 Bump IOS build in Bonsai
New build resolves #6529 #6576
2025-04-21 13:57:25 +05:00
Andrej730 4e00a8d596 bonsai Makefile - specify shell explicitly
To avoid Windows trying to use cmd
2025-04-21 13:57:25 +05:00
Massimo Fabbro 266cc32336 Add calculating functions for earthworks 2025-04-21 10:48:00 +02:00
Andrej730 f8ad05cb54 Use isodate to parse iso durations #2783
Related #6585

Co-Authored-By: sboddy <12862430+sboddy@users.noreply.github.com>
2025-04-21 12:45:40 +05:00
Andrej730 311f9b96e7 black . 2025-04-21 12:45:40 +05:00
Dion Moult 56bfe80b3b Fix #6501. Fix #6104. Fix #6189. You can now change wall offset convention after drawing walls.
People kept on getting confused with the align tool thinking it changed
the baseline to reference line offset whereas it actually just aligned
the object bodies. This tool now does exactly that.

Also start refactoring the "DumbWall" classes into the tools so we can
test them properly.
2025-04-21 17:17:09 +10:00
Dion Moult 2db6b860b2 See #6501. Fix bug where wall alignment didn't strictly check for poll requirements prior to executing operator. 2025-04-21 15:38:26 +10:00
Ryan Schultz 5af2c3914a When \n stopped the world. fix previous commit.
```
os: Windows
os_version: 10.0.19045
python_version: 3.11.7
architecture: ('64bit', 'WindowsPE')
machine: AMD64
processor: Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
blender_version: 4.2.1 LTS
bonsai_version: 0.0.0
bonsai_commit_hash: f8ebc2d
bonsai_commit_date: 2025-04-20T10:30:03-05:00
last_actions:
last_error: Traceback (most recent call last):
  File "C:\Users\Ryan Schultz\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\.local\lib\python3.11\site-packages\bonsai\bim\module\project\operator.py", line 1003, in finish_loading_project
    bpy.ops.bim.load_project_elements()
  File "c:\Program Files\Blender Foundation\Blender 4.2\4.2\scripts\modules\bpy\ops.py", line 109, in __call__
    ret = _op_call(self.idname_py(), kw)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Error: Python: Traceback (most recent call last):
  File "C:\Users\Ryan Schultz\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\.local\lib\python3.11\site-packages\bonsai\bim\module\project\operator.py", line 1063, in execute
    bonsai.bim.schema.reload(self.file.schema_identifier)
  File "C:\Users\Ryan Schultz\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\.local\lib\python3.11\site-packages\bonsai\bim\schema.py", line 67, in reload
    ifc = IfcSchema(schema_identifier)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ryan Schultz\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\.local\lib\python3.11\site-packages\bonsai\bim\schema.py", line 43, in __init__
    self.load_pset_templates()
  File "C:\Users\Ryan Schultz\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\.local\lib\python3.11\site-packages\bonsai\bim\schema.py", line 57, in load_pset_templates
    self.psetqto.templates.append(ifcopenshell.open(path))
                                  ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ryan Schultz\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\.local\lib\python3.11\site-packages\ifcopenshell\__init__.py", line 183, in open
    return file(f)
           ^^^^^^^
  File "C:\Users\Ryan Schultz\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\.local\lib\python3.11\site-packages\ifcopenshell\file.py", line 295, in __init__
    raise exc(msg)
ifcopenshell.Error: Syntax error during parse, check logs
Location: c:\Program Files\Blender Foundation\Blender 4.2\4.2\scripts\modules\bpy\ops.py:109

ifc: projection lines.ifc
schema: IFC4
preprocessor_version: IfcOpenShell 0.0.0
originating_system: Bonsai 0.8.3-alpha250417-f3228c3
```
2025-04-20 11:20:05 -05:00
Ryan Schultz f8ebc2d156 Property in EPset_Drawing for SVG classes that 'rise to the top'. per: https://community.osarch.org/discussion/comment/22689/#Comment_22689 2025-04-20 10:30:03 -05:00
Thomas Krijnen f3228c31f8 Debug build_win.yml 2025-04-20 08:42:03 +02:00
Dion Moult 86d481f4f8 Revert "Fix #4130. Skip invalid topology."
This reverts commit bb598d848a.
2025-04-20 15:07:45 +10:00
Ryan Schultz 05f79c844a For cut lines through terrain. I still plan to make these a preference, however. 2025-04-19 12:46:52 -05:00
Thomas Krijnen b87a7b3d0a cgal kernel - conditionally reorient extrusion basis #6529 2025-04-19 18:50:51 +02:00
Massimo Fabbro e54acd83f8 See #5149
Now it is possible to assign a resource also to a cost item in a schedule of rates
2025-04-19 16:40:47 +02:00
Massimo Fabbro f8e52c8a12 See #6570. Add a button to refresh an imported csv file
Now the imported csv filepath is stored so it is possible to refresh the cost schedule without the need of reimporting it
2025-04-19 16:40:24 +02:00
Dion Moult 0608f92bc4 See #4699. Potentially fix crashes by only loading IFC data once and caching in decorator. 2025-04-19 21:19:18 +10:00
Dion Moult df18108406 Add tests for sheet creation and drawing / sheet generation 2025-04-19 17:36:21 +10:00
Thomas Krijnen b64dcfd4b8 Fix compilation on schemas prior to ifc4 #6549 2025-04-19 09:21:22 +02:00
Dion Moult d1493b4234 Fix #5571. No longer create "RASTER" document references. Process all images at sheet creation time.
I think this was overengineered and a bad decision. RASTER is a
technical detail, not a semantic label (in contrast with whether it's a
title or a drawing).
2025-04-19 16:53:14 +10:00
Dion Moult fb34af9162 Fix #6575. Regression in moving aggregates. 2025-04-19 15:30:46 +10:00
Dion Moult bb598d848a Fix #4130. Skip invalid topology. 2025-04-19 15:25:13 +10:00
Dion Moult 502cf6f439 Standalone script to generate drawings for debugging 2025-04-19 14:59:54 +10:00
Dion Moult 9875fce579 Revert "See #6574. Bump IOS."
This reverts commit 90198115b6.
2025-04-19 14:58:07 +10:00
Dion Moult 90198115b6 See #6574. Bump IOS. 2025-04-19 14:29:20 +10:00
Dion Moult 4896a69981 Add test cases for drawing duplication and shapely fill mode. 2025-04-19 13:42:36 +10:00
Dion Moult 3390f58c88 Fix failing tests 2025-04-19 08:19:25 +10:00
Andrej730 917d28a7b1 ifc5d cost schedule export - guess unit from quantity type 2025-04-18 19:25:46 +05:00
Andrej730 bebaa4d1bd ifc5d cost import - fix unexpected columns assigned as values
Mentioned in #5492 - id, index and lots of others were assigned as values at import.
2025-04-18 19:25:46 +05:00
Andrej730 93a4f4980a Revert ddd7dff75e
I guess after all it's not very reliable idea since it's possible to have a cost schedule without quantities (even non-SoR) and it's giving users false assumptions that they don't need to worry about "Is Schedule of Rates" flag in some cases.
2025-04-18 19:25:46 +05:00
Andrej730 1e30eae1d7 ifc5d - continue refactor 2025-04-18 19:25:46 +05:00
Andrej730 ff90396bcf typing 2025-04-18 19:25:46 +05:00
Dion Moult a030b84fc5 Typo 2025-04-18 19:50:03 +10:00
Dion Moult 0b1c049e81 Fix #5137. Fix bug where duplicated drawings didn't duplicate properly. Duplicating drawings now shares code with regular object duplication.
Previously code wasn't shared and duplication was reimplemented in an
incomplete way. Now it's shared which means that it's also more
sophisticated (i.e. does all the linked aggregate magic).

Also the duplicate code seems super complicated especially with arrays
and linked aggregates. Moving it into a tool makes it more reusable and
we can test it more granularly in the future.
2025-04-18 19:47:54 +10:00
Dion Moult 74390c0529 Fix bug where duplication outside IFC projects didn't use native Blender operators.
Historically we overrode the operator, so we had to reinvent native
functionality. Now we only override the hotkey, so we can reuse native
functionality. This also means that things we failed to reinvent like
duplicating unlinked animation data now works properly. This bit me when
I was doing animation work and Bonsai's duplicate messed things up.
2025-04-18 18:28:15 +10:00
Thomas Krijnen 21d39d8a23 Use exact topology points at parametric range bounds to guarantee welding #4487 2025-04-18 10:08:57 +02:00
Thomas Krijnen ad0f62f88f Don't terminate on invalid placement location #4883 2025-04-18 09:17:19 +02:00
Andrej730 85d8fa49ab ifc5d - add examples for other formats 2025-04-17 19:07:20 +05:00
Andrej730 c5f4b53555 bim.export_cost_schedules - fix bug with overridden prop value
E.g. if you would call this operator for 1 specific cost schedule, Blender would remember it's value and would keep on using it even if operator is going to be called outside this schedule
2025-04-17 18:55:42 +05:00
Andrej730 016cfa94d2 export_cost_schedules - fix confusing filename
Mentioned in #6545

Override filename to be always empty, so user won't have an expectation that csvs will be saved as a single file (currently they're always saved to a directory).
2025-04-17 18:55:41 +05:00
Andrej730 007af80234 ifc5d readme - add notes for possible missing columns 2025-04-17 18:55:41 +05:00
Andrej730 576a206d5b Fix typo 2025-04-17 18:55:41 +05:00
Andrej730 4cf6411a61 ifc5d.csv2ifc - add tests for sample files 2025-04-17 18:55:41 +05:00
Andrej730 37a0b3f6a9 Csv2Ifc - move arguments to init for a simpler setup 2025-04-17 18:55:41 +05:00
Andrej730 209caec49a csv2ifc import - rename required column from hierarchy to index #5492
To prevent confusion with 'Hierarchy' column that's added on the export and make current and export compatible.
Indices now always start from 1 for consistency.
2025-04-17 18:55:41 +05:00
Andrej730 bebb29f486 ifc5d csv export - rename Description column to Name #5492
Because actually it is a name and this is the column name that csv2ifc expects.
2025-04-17 18:55:40 +05:00
Andrej730 deb6e3779e ifc5d - refactor 2025-04-17 18:55:40 +05:00
Andrej730 a6c37771fc typing 2025-04-17 18:55:40 +05:00
Andrej730 95f754d2df black . 2025-04-17 18:55:40 +05:00
Thomas Krijnen 030dc6460a Prevent double free in iterator with output=native 2025-04-17 15:26:18 +02:00
Thomas Krijnen 360e08f268 SVG matrix #5676 2025-04-17 15:25:35 +02:00
Sebastian Friston dc84d85f7b ISSUE #6340 check if material is null before trying to get id 2025-04-17 14:33:07 +02:00
Dion Moult e16d8907f3 See #5676. Shapely fill calculation on drawings is 100x faster due to Blender raycasting instead of tree.select_ray. 2025-04-17 22:31:23 +10:00
Dion Moult 52cada180b Fix #4107. Bug where shapely used incorrect raycast coordinates causing fills to not show.
This has been around for 2 years, either it was never noticed or
something changed?
2025-04-17 19:38:31 +10:00
Gorgious56 1999216ea5 Use utilities to fetch collection hierarchy
I don't think this offers a noticeable performance gain but feels more idiomatic since it is available with the API.
2025-04-17 09:10:28 +02:00
Dion Moult 5a6476a57f Fix #3673. Bug where a split wall broke flipped doors.
Instead of regenerating fills upon splitting walls, placements are
preserved exactly.
2025-04-17 16:28:05 +10:00
Bruno Perdigão c45e3b0099 See #6537. Fix how OverrideMove works when dealing with multiple levels of aggregates. 2025-04-16 20:46:39 -03:00
Bruno Perdigão c9fc543e91 See #6537. Improve how aggregate mode behaves when dealing with multiple levels of aggregates. 2025-04-16 20:23:18 -03:00
Andrej730 9994fec571 ifc5d - fix bug exporting multiple csvs with the same name 2025-04-16 19:24:16 +05:00
Andrej730 b0aeabf2f6 ifc5d .csv cost schedule - save as unicode
Previously it was saved using Windows 1252 and importing it would fail with an error like so:
```
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 650: invalid start byte
```
2025-04-16 19:24:16 +05:00
Andrej730 ddd7dff75e ifc5d csv2ifc - autodetect schedule of rates by the header structure 2025-04-16 19:24:16 +05:00
Andrej730 7acd13cb82 ifc5d readme - mention format examples 2025-04-16 19:24:15 +05:00
Andrej730 6499ac41cf ifc5d typing and refactor
no functional changes
2025-04-16 19:24:15 +05:00
Dion Moult e8b74245ce Update VERSION 2025-04-16 16:27:16 +10:00
Andrej730 ecee3781e4 Fix more missing Blender descriptions leading to crashes #6420 2025-04-15 19:43:38 +05:00
Andrej730 52f949b2dc assign_class - avoid empty geometries and assigning shape reprs to structural items 2025-04-15 19:43:38 +05:00
Andrej730 cb7e04f61a assign_class - replace object with empty if no representation was added
Same goal as ffffcc576e - prevent user confusion when they reload IFC file and see the representation is gone.
2025-04-15 19:43:38 +05:00
Andrej730 b59e5b076d get_pset, get_psets - don't fail on ifc2x3 profile psets and partially handle ifc2x3 material psets #6538 2025-04-14 18:59:47 +05:00
Andrej730 1516237537 Allow Undefined topology representations for IfcStructuralPointConnection #6459
Because apparently it's not invalid IFC.
IfcStructuralPointConnection documentation says that they should have a topology representation with a IfcVertexPoint but it doesn't restict this representation from having Undefined type if it does have a IfcVertexPoint as it's item.
2025-04-14 17:49:17 +05:00
Andrej730 53cd5f834e add_mesh_representation - reuse shape builder + numpy input support 2025-04-14 16:17:59 +05:00
Andrej730 6dc6fddd0e add_mesh_representation - expand documentation and typing #6541 2025-04-14 16:17:59 +05:00
Dion Moult 52c8cc0a72 Fix #6140. You can configure the force snap setting.
I can't figure out a more elegant way of doing this. I.e. I don't know
how to detect whether or not the user has explicitly set their own snap
default.
2025-04-13 17:57:08 +10:00
Dion Moult 463473b959 Fix #6359. No longer sync materials at export sync we have a proper material / style manager now not Blender materials. 2025-04-13 16:09:36 +10:00
Dion Moult fd0c578995 No longer sync edited objects since we don't defer representation updates anymore due to item mode. 2025-04-13 16:06:15 +10:00
Dion Moult 74fbe94ed4 Update feature_request.yml 2025-04-13 12:10:28 +10:00
Dion Moult 38002e1ee2 Update and rename feature_request.md to feature_request.yml 2025-04-13 12:08:28 +10:00
Dion Moult 58b070d22d Update and rename bug_report.md to bug_report.yml 2025-04-13 12:06:46 +10:00
Dion Moult e2b119bf9b Update feature_request.md 2025-04-13 11:42:53 +10:00
Dion Moult 8cf3807c2c Update feature_request.md 2025-04-13 11:42:11 +10:00
Dion Moult ad3d0fecb2 Describe other channels in issue template 2025-04-13 11:38:33 +10:00
Dion Moult fcfe6f97c3 Update bug_report.md 2025-04-13 11:32:30 +10:00
Dion Moult c0190b5065 Fix #6452. Fix #6478. Disable camera clipping due to unpredictable Blender behaviour (reported upstream).
https://projects.blender.org/blender/blender/issues/137384
2025-04-13 11:20:57 +10:00
Andrej730 e596ac6b1b dev_environment.bat - ensure symlinks are loaded #6473 2025-04-11 19:55:27 +05:00
Andrej730 d9ed6a4950 Fix bim test after 1e3f1e7dfc 2025-04-11 19:55:26 +05:00
Andrej730 a49ccfcfc8 test_append_asset - fix skipped test
It wasn't appending library_material so test would never fail
2025-04-11 19:55:26 +05:00
Andrej730 7974d8a0d0 project.append_asset - test assume_asset_uniqueness_by_name=False 2025-04-11 19:55:26 +05:00
Andrej730 f00e77ef6c bim.validate_ifc_assets Bonsai operator #6243
There's now operator to check that all profiles, styles, materials in the current project have a unique name. Which is important since it's used when we append assets to ensure there are no duplicated assets.

Operator location - https://i.imgur.com/bvXjZ8Y.png

Example output:
```
IfcMaterial name 'KnownUnknown' is used by multiple assets:
- # 260=IfcMaterial('KnownUnknown',$,$)
- # 1220=IfcMaterial('KnownUnknown',$,$)

Found issues validating IfcProfileDef assets.
IfcProfileDef name 'DEMO-C' is used by multiple assets:
- # 266=IfcCShapeProfileDef(.AREA.,'DEMO-C',$,0.2,0.1,0.0015,0.03,0.005)
- # 261=IfcIShapeProfileDef(.AREA.,'DEMO-C',$,0.1,0.2,0.005,0.01,0.005,$,$)

Found issues validating IfcPresentationStyle assets.
IfcPresentationStyle name 'Frame' is used by multiple assets:
- # 363=IfcSurfaceStyle('Frame',.BOTH.,(# 362))
- # 1221=IfcSurfaceStyle('Frame',.BOTH.,(# 1222))
```
2025-04-11 19:55:26 +05:00
Andrej730 fc37cca1d0 ExtractElements - expose assume_asset_uniqueness_by_name option #6243
I'd much rather not expose this option to ifcpatch but I guess models are different and there should be a way to extract elements even if assets name uniqueness is not ensured (since it's not IFC requirement anyway). But it may cause duplicated assets.
2025-04-11 19:55:26 +05:00
Andrej730 53da00a5b7 append_asset - fix possible errors with assume_asset_uniqueness_by_name=False after f43e33b
If `assume_asset_uniqueness_by_name` is `False`, then we don't really need `SafeRemovalContext`.
2025-04-11 19:55:25 +05:00
Andrej730 b5bc53bdf6 Renaming style from UI not to add .xxx Blender suffix to style name
Set style name explicitly, this way what user does in UI is what they get in IFC.
Previously confusingly if you set style name to "Glass" and "Glass" already existed, you would get "Glass.001" style internally but "Glass" name in UI.
2025-04-11 19:55:25 +05:00
Andrej730 bc0fbf744a bim.search - set found object as active
As sometimes it's hard of find a selected object in outliner if it's not active.
2025-04-11 19:55:25 +05:00
Andrej730 53b26a9b66 typing 2025-04-11 19:55:25 +05:00
Thomas Krijnen 858e73c9d9 IfcPropertySetDefinitionSet in xml serializer #6330 2025-04-11 15:53:27 +02:00
Thomas Krijnen 952400bd58 Support defined types with instance references in parser (IfcPropertySetDefinitionSet; #6330) 2025-04-11 15:52:40 +02:00
Andrej730 ffffcc576e assign_class - reload representation after assignment
Just to make sure user will set what was actually saved to IFC right away. To prevent confusion when they see it only after model was reloaded completely.
2025-04-10 19:16:04 +05:00
Andrej730 d8102d848d Fix bug with the first object rename after class assignment
The problem was that during class assignment, it was setting the object name and `is_renaming` flag but only then linking to IFC. Since object wasn't linked to IFC, name callback wasn't triggered and `is_renaming` wasn't reset and first rename wouldn't work.
Now it's just not setting the flag if object is not linked to IFC, as there's no callback then and don't need to protect from it.
2025-04-10 17:44:06 +05:00
Andrej730 9407faf1f9 vs-cfg.md - support cmake 4.0.0 2025-04-10 17:44:06 +05:00
Andrej730 1e3f1e7dfc Show assign/reference container buttons if container has no elements #6514 2025-04-10 10:54:46 +05:00
Andrej730 8aad28c730 bim.assign_class - skip ifc objects to prevent errors 2025-04-09 18:26:55 +05:00
Andrej730 81943ec9e5 bim.assign_class - apply modifiers
Noticed working on #6500
2025-04-09 18:26:55 +05:00
Andrej730 5b15de50b6 bim.assign_class - use blender operators in a more safe way
Use temp_override or modify selection not to modify some object by accident, because this operator can also be called not from UI but by providing `object` argument.
2025-04-09 18:26:54 +05:00
Andrej730 4d50dce16d bim.assign_class - use get_selected_objects 2025-04-09 18:26:54 +05:00
Andrej730 69b5d0940f bim.assign_class - flip normals if matrix is negative #6500
object.transform_apply doesn't preserve normals (https://projects.blender.org/blender/blender/issues/102266)
2025-04-09 18:26:54 +05:00
Andrej730 273d6c1039 Experimental geo nodes integration 2025-04-09 18:26:54 +05:00
Andrej730 24ef03c96e bim.assign_container - skip aggregated elements #6514
New description - https://i.imgur.com/UeSPtEe.png
2025-04-09 18:26:54 +05:00
Andrej730 cc4553d3c9 bim.aggregate_assign_object - clarification 2025-04-09 18:26:54 +05:00
Andrej730 cf1f74e260 typing 2025-04-09 18:26:53 +05:00
Andrej730 3052c6e578 black . 2025-04-09 18:26:53 +05:00
Bruno Perdigão 0eb70b7fc3 See #6397 - Fix extrusion profile editing issue.
Profile transformations now correctly use the perpendicular value of the offset.
2025-04-08 20:07:46 -03:00
Bruno Perdigão eb863bb2aa Snap - Filter out 2D bounding boxes that are too far from the camera view. 2025-04-08 18:11:01 -03:00
Andrej730 345a6e72d9 Make referencing in structure more discoverable #6514
Didn't wanted to disrupt existing operators, but we probably should deprecate them.
2025-04-08 15:54:41 +05:00
Andrej730 8b775ea30f bim.assign_container - small clarification 2025-04-08 15:54:41 +05:00
Thomas Krijnen b712f30ad3 Don't assign material as style when it doesn't have any styles #6314 2025-04-07 21:25:33 +02:00
Andrej730 0bbe1aad5b Fix UI errors in Blender 4.2 (missing MOUSE_MMB_SCROLL icon)
Noticed #6515
2025-04-07 16:20:22 +05:00
Andrej730 29de264b43 ifc5d - remove Qto_BodyGeometryValidation from ifc4x3 base qtos (6c04669)
As it's not part of base quantities and it would be unexpected for user if some additional qto would start calculating for every IfcProduct.
2025-04-07 16:20:22 +05:00
Andrej730 f4714d2012 ifc5d - avoid overriding results from previous queries after f63d6b8 2025-04-07 16:20:21 +05:00
Andrej730 8bfdabab80 ifc5d IfcOpenShell.calculate - warn on missing formulas 2025-04-07 16:20:21 +05:00
Andrej730 50c1220730 typing 2025-04-07 16:20:21 +05:00
Bruno Perdigão c280550e30 Measure Tool - fix issue where the area highlight was incorrectly displayed in polyline mode. 2025-04-05 11:55:05 -03:00
Bruno Perdigão 2bf303686c Snap - Improve how viewport zoom affects snapping. 2025-04-05 11:45:56 -03:00
Bruno Perdigão bb91416c4e Snap - Fix creation of 2D bounding boxes
Previously, objects with 2D bounding boxes outside the view were still being added. This issue is now resolved.
Additionally, implement simple AABB detection to check if the bounding box is within the viewport.
2025-04-04 20:19:25 -03:00
Bruno Perdigão 47e8b978af Snap - filter visible objects before creating the 2d bouding box 2025-04-04 18:38:07 -03:00
Andrej730 50eae4ae19 Fix typo, expose Extend To Underside description 2025-04-04 19:04:03 +05:00
Andrej730 979183b64b Make adding openings more discoverable
1) It's back as Shift-O hotkey in BIM tool - https://i.imgur.com/XfmfqNY.png
2) It's always visible in Voids UI - https://i.imgur.com/rO6nOSw.png
2025-04-04 19:04:03 +05:00
Andrej730 dc2f788326 model/wall.py - poll messages 2025-04-04 19:04:03 +05:00
Andrej730 7d12880eb9 BIM Tool - add descriptions to "Align" section buttons 2025-04-04 19:03:08 +05:00
Andrej730 6676c7f62e typing 2025-04-04 19:03:08 +05:00
Thomas Krijnen c0e8c3d1b5 Update ci-ifcopenshell-docker.yml - action versions 2025-04-04 14:11:41 +02:00
Andrej730 e9245efd37 bim.browse_external_style - cache enum items #6496 #5673 2025-04-03 19:37:51 +05:00
Andrej730 de287395d2 Bump Blender build in tests to 4.4 2025-04-03 19:18:42 +05:00
Andrej730 938d72ebe3 Fix UI issue with props missing (65c99c5) 2025-04-03 18:06:49 +05:00
Andrej730 605c86afc5 Fix void bim tests after bim.add_potential_opening was removed 2025-04-03 18:06:48 +05:00
Andrej730 68cf8ee247 BIM tests - replace some class assignment with PanelSpy version 2025-04-03 18:06:48 +05:00
Andrej730 a452d1d361 Fix failing bim tests after 5b33c60 2025-04-03 18:06:48 +05:00
Andrej730 71067e4a14 Fix style test in Blender 4.4 2025-04-03 18:06:48 +05:00
Andrej730 7bacdbf8dd typing 2025-04-03 17:45:49 +05:00
Thomas Krijnen 54c1dfdb77 Update ci-ifcopenshell-docker.yml 2025-04-03 09:29:49 +02:00
Thomas Krijnen 834123ad14 Update release.yml - add workflow_dispatch 2025-04-03 09:27:32 +02:00
Andrej730 3cbab975d5 Fix tests after ea84f82 2025-04-02 19:29:43 +05:00
Andrej730 0315542237 geometry.remove_representation_item - add element argument
Use explicit element argument instead of props.representation_obj as representation_obj may not be there (e.g. removing rep items without item mode) or some other object might be in item mode and then booleans won't be unmarked.

Found the issue because of the failing test 🥳
2025-04-02 19:29:43 +05:00
Andrej730 156cca5932 representation_obj - add a note 2025-04-02 19:29:43 +05:00
Andrej730 4672fc341f Fix representation items / booleans UI prioritizing item mode object over active obj
It led to confusion when object A would be in Item Mode and you open properties for object B and try to show rep items for B and UI would be unresponsive.
2025-04-02 19:29:43 +05:00
Andrej730 f69b02cad9 bim.override_object_join - a bit more readable error message
Use name instead of bpy_struct repr, add a line split.
2025-04-02 19:29:42 +05:00
Andrej730 40af3f0495 Fix bug adding brick namespace in ed0b1c5
brick graph has bool evaluation too
2025-04-02 19:29:42 +05:00
Andrej730 0dd42c1fb2 fix core system tests after 5b9ef23 2025-04-02 19:29:42 +05:00
Andrej730 0990dfd372 biim.load_link - error if file does not exist
Noticed investigating #6403
2025-04-02 12:42:02 +05:00
Andrej730 9316e0bff0 Skip loading linked models in the drawing if they're unloaded #6403
As it's probably unintuitive (user can't see the linked model in viewport but we still load it) and user then have no option to keep model in Links but keep it unloaded.

Also producing traceback below if linked file is missing.
```
Error: Python: Traceback (most recent call last):
  File "\bonsai\bim\module\drawing\operator.py", line 299, in execute
    linework_svg = self.generate_linework(context)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\bim\module\drawing\operator.py", line 828, in generate_linework
    IfcStore.session_files[link.name] = ifcopenshell.open(link.name)
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\__init__.py", line 162, in open
    raise FileNotFoundError(f"File does not exist: '{path}'.")
FileNotFoundError: File does not exist: 'D:\Dropbox\GitLab\OD_Library\BIM\OD_Revit_Template - 2020 - IFC4 - Reference View.ifc'.
```
2025-04-02 12:42:02 +05:00
Andrej730 bc709f06f7 Fix Blender 4.4 crashing on Mac (decorators issues) #6461 2025-04-01 19:16:16 +05:00
Andrej730 cc031a23cb black . 2025-04-01 19:16:16 +05:00
Andrej730 614b71e0c6 gitignore compiled ifcopenshell_wrapper files on mac/linux #4686 2025-04-01 19:10:05 +05:00
Andrej730 66329f07cb dev_environment.sh - validate input paths 2025-04-01 19:10:05 +05:00
falken10vdl 0039f376ca Update operator.py so argv parameters in Windows are correctly parsed
Currently teh parameters that have spaces are not properly parsed when invoking os.execv.

Ej:
We start blender with some parameters and then invoke bim.restart_blender:
C:\Users\falke>c:\Users\falke\Documents\blender-4.2.8-windows-x64\blender.exe --debug --python-expr "import bpy; bpy.ops.bim.load_project(filepath='C:/Users/falke/Documents/bonsaiDevel/Testing.ifc', should_start_fresh_session=True, use_detailed_tooltip=True)"
TBBmalloc: skip allocation functions replacement in ucrtbase.dll: unknown prologue for function _msize
Switching to fully guarded memory allocator.
Blender 4.2.8 LTS
Build: 2025-03-18 01:34:37 Windows Release
argv[0] = c:\Users\falke\Documents\blender-4.2.8-windows-x64\blender.exe
argv[1] = --debug
argv[2] = --python-expr
argv[3] = import bpy; bpy.ops.bim.load_project(filepath='C:/Users/falke/Documents/bonsaiDevel/Testing.ifc', should_start_fresh_session=True, use_detailed_tooltip=True)
Starting import process :: 0.00
Loading file :: 0.00
Calculate unit scale :: 0.00
Process context filter :: 0.01
Calculate model offset :: 0.00
Set units :: 0.00
Create project :: 0.00
Process element filter :: 0.00
Create styles :: 0.00
Parsing native elements :: 0.00
Done creating geometry
Create native elements :: 0.00
Done creating geometry
Create elements :: 0.03
Create annotations :: 0.00
Create positioning elements :: 0.00
0 / 3 elements processed ...
Create spatial elements :: 0.00
Create structural items :: 0.00
Create element types :: 0.00
Place objects in collections :: 0.00
Setup arrays :: 0.00
Load linked models :: 0.00
Add project to scene :: 0.00
Setting default context :: 0.01
Import finished in 0.06 seconds
No MySQL support
Writing userprefs: "C:\Users\falke\AppData\Roaming\Blender Foundation\Blender\4.2\config\userpref.blend" ok
Info: Preferences saved
TBBmalloc: skip allocation functions replacement in ucrtbase.dll: unknown prologue for function _msize
Switching to fully guarded memory allocator.
Blender 4.2.8 LTS
Build: 2025-03-18 01:34:37 Windows Release
argv[0] = c:\Users\falke\Documents\blender-4.2.8-windows-x64\blender.exe
argv[1] = --debug
argv[2] = --python-expr
argv[3] = import
argv[4] = bpy;
argv[5] = bpy.ops.bim.load_project(filepath='C:/Users/falke/Documents/bonsaiDevel/Testing.ifc',
argv[6] = should_start_fresh_session=True,
argv[7] = use_detailed_tooltip=True)

C:\Users\falke>  File "<string>", line 1
    import
          ^
SyntaxError: invalid syntax
Error: Cannot read file "C:\Users\falke\bpy;": No such file or directory
Error: argument has no '.blend' file extension, not using as new file, exiting! C:\Users\falke\bpy;

Blender quit

By adding the proposed list2cmdline based solution, the commandline is properly formated before invoking os.execv

Thanks!
2025-04-01 18:09:25 +11:00
Dion Moult c307871d37 Fix #6472. Typo in IfcTester test cases. 2025-04-01 17:56:51 +11:00
Andrej730 31c9f60bca Fix errors creating objects if default container is hidden #6456 2025-04-01 11:32:14 +05:00
Dion Moult 93e7d92076 Fix bug where removing a context (used by representations) left invalid representations 2025-04-01 17:28:22 +11:00
Dion Moult 16f09655b8 Bump version numbers in dev scripts 2025-04-01 14:21:34 +11:00
Dion Moult b6115a6d71 Fix bug where adding objects relying on missing contexts would fail 2025-04-01 14:20:56 +11:00
Richard Brice f0b5e93737 Fixes problem evaluating gradient and segmented reference curves with start locations offset from start of base curve. 2025-03-31 16:18:05 -07:00
Andrej730 9895302c9d bim.add_boundary - add description/error reports
Example description - https://i.imgur.com/jn3y2KU.png

fyi @steverugi
2025-03-31 19:10:21 +05:00
Andrej730 8f5f346fa4 boundary/create_mesh - small optimizations 2025-03-31 19:10:21 +05:00
Andrej730 6adf5d957a Fix error adding a space boundary (a7509db) 2025-03-31 19:10:21 +05:00
Andrej730 e6be79f2ad assign/unassign type operators - add descriptions 2025-03-31 19:10:20 +05:00
Andrej730 e3228513c0 typing 2025-03-31 19:10:20 +05:00
Andrej730 547506d626 black . 2025-03-31 19:10:20 +05:00
Andrej730 3fe29fa842 Prevent user from trying to assign material style if not style is selected
Possibly explains #6462
2025-03-31 14:07:41 +05:00
Andrej730 e18e2caea8 Bonsai - exclude selected non-ifcobjects from type assignment/unsassignment #6454 2025-03-31 14:07:41 +05:00
Andrej730 1cac12dc53 Use fallback elevation value if default container is missing #6470
I guess it's always theoretically possible that user end up without a default container.
2025-03-31 13:49:18 +05:00
Andrej730 8d530eba68 Fallback to the aggregate if default container is removed #6470 2025-03-31 13:49:18 +05:00
Andrej730 4593e5aea6 Fix ExportHelper not optional filename_ext #6463 (4594f59) 2025-03-31 12:51:37 +05:00
Andrej730 cba6161043 Fix #6467 (d35a2dc) 2025-03-31 12:05:15 +05:00
Richard Brice 42c49af4e3 Implements business to geometry mapping for alignment cant.
Also fixes problems that were created by this work in other files
2025-03-29 15:30:04 -07:00
Andrej730 7bdbfee041 Fix bim.export_cost_schedules #6463 (4594f59) 2025-03-29 23:36:37 +05:00
Thomas Krijnen f37bda2d7c Add hybrid-cgal-simple-opencascade to CLI help 2025-03-28 20:43:17 +01:00
Andrej730 0bf065c4bd Fix issue editing item layer when it had a layer previously (13a182c) 2025-03-28 17:59:08 +05:00
Andrej730 c58b84ddb5 append_asset - fix duplicated applications/organizations/pao
Noticed when starting new project with demo library it had 29 duplicated IfcApplications...
2025-03-28 17:59:07 +05:00
Andrej730 81b5fc30c7 template_file - add a note 2025-03-28 17:59:07 +05:00
Andrej730 fd423f21e2 ifcopenshell.validate - validate IfcApplications 2025-03-28 17:59:07 +05:00
Andrej730 4afed8f2f3 typing 2025-03-28 17:59:07 +05:00
Thomas Krijnen 9254601924 Underscores in geom setting to argparse namespace 2025-03-28 12:11:27 +01:00
Thomas Krijnen e9460a2c9a Actually Eigen::Quaterniond arg order is *w* xyz 2025-03-28 12:10:03 +01:00
Thomas Krijnen 5a597d1a84 Fix binary size issue 2025-03-28 12:08:25 +01:00
Thomas Krijnen 61c4797b8f Fix issue in CurveSegment 2025-03-28 12:08:10 +01:00
Andrej730 f08f9ad310 export_mesh_to_tessellation to consider empty material slots #6453 2025-03-28 12:01:09 +05:00
Andrej730 69ddf52ff0 Add ifc2x3/ifc4/ifc4x3 demo templates as symlinks to repo
Example - https://i.imgur.com/d4udENs.png
2025-03-28 10:29:31 +05:00
Andrej730 2fd02e281d Add IFC2X3, IFC4X3 demo libraries 2025-03-27 19:31:04 +05:00
Andrej730 fdb283b7af generate_demo_library - sync guid on regeneration 2025-03-27 19:31:04 +05:00
Andrej730 013d7f6659 generate_demo_library - typing and small refactor 2025-03-27 19:31:03 +05:00
Andrej730 5b33c6018a spatial decomposition ui - use poll_message_set instead of .enabled
To give user more descriptive message about what's wrong.
2025-03-27 19:31:03 +05:00
Andrej730 50324a566f black . 2025-03-27 19:31:03 +05:00
Andrej730 64b8842055 typing 2025-03-27 19:29:45 +05:00
Massimo Fabbro 05be0f69bd Fix #6305
Fix wrong calculation with blender engine for IfcFooting
2025-03-26 22:30:56 +01:00
Andrej730 3f823573cf Fix broken scroll bar in some UI lists #6439
Just found that all scroll bars for UIList kept in sync using `list_id` - it's that second argument for `UILayout.template_list` that I forgot exist, since I've never seen set it to anything besides the empty string.

So in #6439 we were reusing same UIList for multiple collection props and since one of the props was empty, it was constantly resetting scroll bar position.

Was about to report it as a bug to Blender but stumbled upon similar issue https://projects.blender.org/blender/blender/issues/124364

So the solution is make sure each UIList has unique `list_id`.

Fyi @Moult @Gorgious56
2025-03-26 18:49:22 +05:00
Andrej730 a3c5c0ce43 Fix typo in 64f51d7 2025-03-26 18:49:21 +05:00
Andrej730 2e61532919 bim.unassign_material - add description 2025-03-26 18:49:21 +05:00
Andrej730 c3107e37c0 material.remove_material_set to remove usages
To prevent them from being invalidated.

Noticed this as a possible issue investigating https://community.osarch.org/discussion/2820/error-message-in-bonsai-bim
2025-03-26 18:49:21 +05:00
Andrej730 c85f9f02ba Check material override explicitly, not just by name
It was inconsistent when it was comparing usage with unnamed layer set and comparing usage with named layer set.
2025-03-26 18:49:21 +05:00
Andrej730 f888a32fa4 reuse get_material_name 2025-03-26 18:49:21 +05:00
Andrej730 d35a2dcf5b typing 2025-03-26 18:49:21 +05:00
Arjo Nagelhout 244320dd49 add virtual destructor to AbstractKernel base class
this fixes a SIGTRAP when destructing the geometry iterator, as that calls delete kernel_.
2025-03-25 20:11:39 +01:00
Andrej730 0d7439c7a5 ifcopenshell.validate to catch invalid entities used in entities attributes #6409
Example

```
For instance:
    # 1 =IFCCARTESIANPOINT((5.,5.,nan.));
Entity with name 'nan.' not found in schema 'IFC4'
```
2025-03-25 18:15:37 +05:00
Thomas Krijnen c935b2fc12 Merge branch 'v0.8.0' into tfk-rocksdb-storage 2025-03-25 13:05:45 +01:00
Thomas Krijnen bd92821b2e Add file offset to instance reference errors so that they are picked up by ifcopenshell.validate 2025-03-25 11:44:46 +01:00
Thomas Krijnen 3744b81ccd Only accept finite floats #6409 2025-03-25 10:15:24 +01:00
Andrej730 9311f50206 Fix for 4594f596c2
Traceback:
```
Error: Python: Traceback (most recent call last):
  File "\bonsai\bim\module\project\operator.py", line 127, in execute
    self._execute(context)
  File "\bonsai\bim\module\project\operator.py", line 143, in _execute
    core.create_project(
  File "\bonsai\core\project.py", line 108, in create_project
    project.append_all_types_from_template(template)
  File "\bonsai\tool\project.py", line 55, in append_all_types_from_template
    bpy.ops.bim.select_library_file(filepath=filepath.__str__())
  File "\Blender\4.4\scripts\modules\bpy\ops.py", line 109, in __call__
    ret = _op_call(self.idname_py(), kw)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Converting py args to operator properties:: keyword "filepath" unrecognized
```
2025-03-25 12:00:50 +05:00
Thomas Krijnen eec8c88e6f Unique ptrs #6417 2025-03-24 14:09:00 +01:00
shmoodyyy dd53f9b494 style: keep tab indenting consistency 2025-03-24 13:59:58 +01:00
shmoodyyy c6e3ac4155 fix: memory leak from missing deletes of raw heap allocations; big issue within create_shape() python lib 2025-03-24 13:59:58 +01:00
Andrej730 4594f596c2 Reuse ImportHelper/ExportHelper everywhere possible for consistency 2025-03-24 17:36:27 +05:00
Andrej730 4f091af935 bim.export_ifccsv - clarify description and title 2025-03-24 17:36:27 +05:00
Andrej730 2f34f997dd Fix api.alignment missing __all__ 2025-03-24 17:36:27 +05:00
Andrej730 1600e00295 Fix clash smart groups selection (6660ee3)
It was using prop `guid` which doesn't exist , so `by_guid(global_id.guid)` would always fail with some exception.
2025-03-24 17:36:26 +05:00
Andrej730 7a55e837f7 typing 2025-03-24 17:36:26 +05:00
Andrej730 595ee3fa47 Provide descriptions to all operators that use fileselect_add #6420
I guess all it takes a persistent Blender crash to fill up operators descriptions 😅
2025-03-24 11:36:40 +05:00
Andrej730 c84f8e55a6 Fix typo 2025-03-24 11:36:40 +05:00
Andrej730 b63d9090a1 black . 2025-03-24 11:36:40 +05:00
Dion Moult 58c7976a5e See #1227. Fix regression where new wall system didn't preserve existing dimensions when regenerating geometry for an object that previously didn't have a layerset 2025-03-23 23:55:15 +11:00
Dion Moult 384a74734e Fix regression in split along edge
Aren't tests great
2025-03-23 23:36:19 +11:00
Dion Moult b269a806eb Improve description for dev setup
Be more dogmatic in the setup to prevent confusion.
2025-03-23 23:31:04 +11:00
Bruno Postle f43e666583 git colourisation fixes
Fix bug where uncommitted changes were not fully colourised in the same
way as diffs. Also try and catch more changes, eg. highlight if a
Products Type has changed.
2025-03-23 12:07:41 +00:00
Dion Moult 26b21ddcb3 Fix #6414. Allow extracting elements from non-standard IFC schemas. 2025-03-23 22:16:42 +11:00
Dion Moult f1138d1aac Fix regression in point cloud loading in refactoring the new item mode. 2025-03-23 21:55:57 +11:00
Dion Moult 51eef295c8 Fix models with crazy contexts (which kills the iterator which is context based) 2025-03-23 21:12:46 +11:00
Massimo Fabbro 212da8b6d6 fix #6271
Fix wrong length calculation with Blender Engine for IfcDoor and IfcWindows
2025-03-23 07:40:04 +01:00
Thomas Krijnen f7163b8db8 schema -> schema_identifier #6414 2025-03-22 19:27:50 +01:00
Ryan Schultz 9ee947b730 a better implementation for #3731 - to round to the nearest foot. 2025-03-22 09:53:15 -05:00
Ryan Schultz 328fb8bc0e fix #3731 - round to the nearest foot 2025-03-22 09:11:41 -05:00
Bruno Postle 75fe548bb0 Remove zombie method reintroduced in 5830573
edit_container_attributes() was deleted in e79a85a, but somehow got
dragged back in
2025-03-22 10:17:41 +00:00
Bruno Postle 5830573cda Create transform orientation slots (#6215)
Setting the default container switches to an appropriate orientation
slot if the orientation of this container isn't global. eg. if a building is
rotated, selecting to work in a storey will set the orientation to the
building orientation. Closes #6128
2025-03-22 09:01:54 +00:00
Bruno Postle 775106d0a0 Place drawings on sheets
When adding a drawing to a sheet, place to the right of the last drawing
if it fits on the sheet - otherwise start a new row below all existing
drawings.

This means that new drawings are no longer just piled up on top of each
other at the top-left, but it does mean that new rows of drawings are
added below the title box when the sheet is full.
2025-03-21 23:37:30 +00:00
sebjf 25b7003d2d Issue 6385 - Delete IfcGeom::Elements as soon as possible (#6411)
* ISSUE #6385 Delete iterator elements as soon as they are moved past

* ISSUE #6385 added loop to destructor to clean up initialised elements not yet disposed of by the iterator
2025-03-21 18:52:40 +01:00
Ryan Schultz c80c1e9e15 fix #5709 - ensure REFLECTED_PLAN_VIEW camera has (-1,-1,-1) scale. 2025-03-21 10:34:33 -05:00
Andrej730 b5c062415d ifcsverchok.helper - add debug get_selected_nodes method 2025-03-21 18:39:38 +05:00
Andrej730 a98a7ac856 ifcsverchok - add some sockets descriptions, specify types 2025-03-21 18:39:38 +05:00
Andrej730 ee2b836b84 ifcsverchok - add/update node descriptions 2025-03-21 18:39:38 +05:00
Andrej730 e075c32a5a typing 2025-03-21 18:39:38 +05:00
Andrej730 a567af370b ifcsverchok - fix missing socket tooltips
apparently `tooltip` property doesn't exist but `description` does
2025-03-21 18:39:38 +05:00
Andrej730 544b61b95a remove debug print 2025-03-21 18:39:37 +05:00
Thomas Krijnen 45c45d6862 ifcopenshell.geom.serializers.guess_from_extension() 2025-03-21 14:35:47 +01:00
Thomas Krijnen 6880e31a66 Add ColladaSerializer to python bindings 2025-03-21 14:35:23 +01:00
Thomas Krijnen e327932f4e Fixes to HierarchyHelper #6365 2025-03-21 13:48:59 +01:00
Andrej730 f2283e5895 Fix Blender 4.4 errors starting some operators #6399 #6396
Ping @brunoperdigao just in case.
2025-03-21 12:02:53 +05:00
Dion Moult ea84f829af The experimental cutting tool now supports a bisect mode for batch cuts 2025-03-21 16:46:42 +11:00
Dion Moult 3231752fef Minor fix to clipping planes if there is no camera 2025-03-21 16:46:08 +11:00
Dion Moult 963ba5fc30 See #6404. See #1227. Create axis context if it does not exist for walls. 2025-03-21 16:45:29 +11:00
Dion Moult 8e1e0aec79 Fix #6404. See #1227. Fix IFC2X3 wall creation with new wall engine. 2025-03-21 16:30:56 +11:00
Thomas Krijnen 9c4ec34de3 Some form of circle handling in loop_to_function_item_upgrade_impl() #6381 2025-03-20 20:57:47 +01:00
Thomas Krijnen 4c2844292e Apply skew in infra lofts #6386 2025-03-20 16:14:12 +01:00
Sebastian Friston 35fe79dfb2 ISSUE #6328 fix in dispatch_token to avoid missing unknown in logicals 2025-03-20 14:03:07 +01:00
Thomas Krijnen 58a5f881e6 Retrieve length unit info from underlying mapping in iterator #6355 2025-03-20 13:57:30 +01:00
Andrej730 4d5a3ec633 ifcsverchok - ifc.write_file_panel to filter .ifc files 2025-03-20 16:28:49 +05:00
Andrej730 1feb00678c node.sv_ifc_create_file_refresh - fix LB Out bl_label 2025-03-20 16:28:48 +05:00
Andrej730 f10ebe0166 ifcsverchok - remove debug print 2025-03-20 16:28:48 +05:00
Andrej730 5f8fc1ba8c node.sv_ifc_tooltip - hide title 2025-03-20 16:28:48 +05:00
Andrej730 f8f36cf2f0 typing 2025-03-20 16:28:48 +05:00
Thomas Krijnen 2a2bfea870 Read settings from argparser 2025-03-20 11:47:14 +01:00
Thomas Krijnen 8bdf8369b5 pyodide demo: install shapely 2025-03-20 10:49:41 +01:00
Thomas Krijnen 2bc230919e Update publish-pyodide-demo-app.yml 2025-03-20 10:44:08 +01:00
Thomas Krijnen 53fd1284b5 Update wheels #6402 2025-03-20 10:42:27 +01:00
Andrej730 3c777a0b85 Blender 4.4 - fix broken UI lists #6396
Example error:
```python
RuntimeError: could not create instance of BIM_UL_containers_manager to call callback function 'filter_items'
2025-03-19:16:13:14,001 ERROR   [log.py:69] Uncaught exception
RuntimeError: could not create instance of BIM_UL_containers_manager to call callback function 'draw_item'
```
2025-03-19 16:52:50 +05:00
Thomas Krijnen fa3c57b016 Implement readable setting type retrieval 2025-03-19 11:42:43 +01:00
Thomas Krijnen e658b00768 Reinstate old bespoke model-offset/rotation parsing in IfcConvert #6290 2025-03-19 11:42:11 +01:00
Thomas Krijnen 26b55216ca Normalize model-rotation quaternion 2025-03-19 11:40:54 +01:00
Andrej730 d912012f76 Bonsai makefile - fill last_commit_date
Also .isoformat(), so string would match exactly with the one git command provides.
2025-03-19 14:15:21 +05:00
Andrej730 d868d8ceac Fix missing default value for last_commit_date (37ec2bf) #6389
Which is needed when Bonsai is not using git
2025-03-19 14:14:36 +05:00
Andrej730 8def5ec30b Use explicit bl_ui_utils.layout import to fix #6389
Also related - https://github.com/nutti/fake-bpy-module/issues/352
2025-03-19 14:14:36 +05:00
Andrej730 ad03a0c8d9 debugging docs - add section about debugging addon 2025-03-18 17:43:38 +05:00
Thomas Krijnen 425de7b857 Further small memory optimizations 2025-03-18 10:41:03 +01:00
Richard Brice 09a43f1339 get distance along alignment from station
New alignment api function to get the horizontal distance along an alignment from a station value
2025-03-17 09:16:35 -07:00
Dion Moult c176b9d607 See #1227. Fix bug where unjoin walls didn't recheck the position. 2025-03-18 01:14:06 +11:00
Dion Moult 6cf5cc002e Fix #6318. Fix warnings when decorator cannot convert 3D to 2D screen space location. 2025-03-18 01:06:44 +11:00
Andrej730 0abe6329d6 Quantification to consider Pset_ProfileMechanical.MassPerLength #6344 2025-03-17 18:31:58 +05:00
Andrej730 5109168533 quantification fallback - small clarification 2025-03-17 18:31:57 +05:00
Andrej730 0b4deee73f typing 2025-03-17 18:31:57 +05:00
Andrej730 1f43f7f807 black . 2025-03-17 18:31:57 +05:00
Jesse Roodhorst 73a83c6d4e Issue #5130 fix + sheet all expand and contract (#6379) 2025-03-17 18:28:03 +05:00
Dion Moult 9c5b1a04ff Fix #6372. See #1227. More reliable layer slicing. Always slice in in 2D, not 3D, where possible. 2025-03-18 00:14:56 +11:00
Dion Moult e67753eb4f See #1227. Clear cache when activating drawings. 2025-03-17 23:05:14 +11:00
Andrej730 778a839e5f get_shape_aspects to consider element's type #6374
See diagram in https://github.com/IfcOpenShell/IfcOpenShell/issues/5839#issuecomment-2661296683 when IfcShapeAspect assigned to IfcRepresentationMap instead of being assigned to IfcProductDefinitionShape directly.
2025-03-17 16:38:12 +05:00
Andrej730 102de32737 Fix UI errors in case of uppercase unit names (7af6727)
IfcConversionBasedUnit's Name is case insenstive and it was producing UI errors.
Noticed working with file from Revit Ryan attached in #6374

Traceback:
Traceback (most recent call last):
  File "\bonsai\bim\module\pset\ui.py", line 456, in poll
    ObjectMaterialData.load()
  File "\bonsai\bim\module\material\data.py", line 167, in load
    cls.data["total_thickness"] = cls.total_thickness()
                                  ^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\bim\module\material\data.py", line 331, in total_thickness
    return format_distance(thickness, precision=precision, suppress_zero_inches=True, in_unit_length=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\bim\module\drawing\helper.py", line 157, in format_distance
    unit_length = unit_length_mapping[unit_length]
                  ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
KeyError: 'FOOT'
2025-03-17 16:38:12 +05:00
Sayan J. Das cf3a554b15 Fix #5809: Add safety check during file.write (#6292)
Co-authored-by: theseyan <sayanjyotidasworkmail@gmai.com>
2025-03-17 16:17:42 +05:00
Andrej730 a8ff6ecf14 Fix object materials UI #6375 (ba37754) 2025-03-17 15:11:16 +05:00
Andrej730 55be5cc289 get_length, getget_object_main_axis - simplify
1) get_object_main_axis - replace branching with just max between dimensions. There is a small caveat that previously for `x,y,z=1,2,2` it would return 'x' but now it returns 'y', but I'm not sure if 'x' was really intended here.
2) get_length - current implementation does the same as get_linear_length

Ping @maxfb87 just in case.
2025-03-17 14:48:22 +05:00
Andrej730 9af00d4e72 typing 2025-03-17 14:27:52 +05:00
Andrej730 d8592a2a95 get_rectangular_perimeter to use get_x again #6364 (4260313)
Just restoring original behaviour before 4260313 when get_rectangular_perimeter prioritized x dimension.
2025-03-17 14:07:11 +05:00
Andrej730 16ba10f957 Fix UI error when selected object has no material #6371 (ba37754) 2025-03-17 12:02:34 +05:00
Andrej730 0d1298aac1 Fix #6367
ahh, no idea where I picked up this string during refactoring
2025-03-17 11:57:27 +05:00
Andrej730 210257de8e black . 2025-03-17 11:57:26 +05:00
Ryan Schultz 37ec2bf0e4 add bonsai_commit_date to error report 2025-03-16 20:04:04 -05:00
Sayanjyoti Das 6e7c8ad640 Fix #6362 2025-03-16 23:32:42 +11:00
Dion Moult bfc4490c97 See #1227. Implement wall layers in SVG drawings. 2025-03-16 21:43:59 +11:00
Sayanjyoti Das d50e8060ac better comments 2025-03-16 17:48:44 +11:00
Sayanjyoti Das a21939dc0d fix error 2025-03-16 17:48:44 +11:00
Sayanjyoti Das 8845440edd fix #6360 2025-03-16 17:47:44 +11:00
Dion Moult ba37754068 Fix #6310. See #1227. Fix regression with layer ordering. 2025-03-16 14:17:37 +11:00
Dion Moult ed48afc633 Only clip on visible drawing cameras. 2025-03-16 11:53:35 +11:00
Dion Moult 7262a50184 See #1227. Merging doubles gives more reliable results in bisection fills. 2025-03-16 11:40:30 +11:00
Bruno Perdigão 67b0ab6685 Fix #6366. Improve extrusion x_angle and direction handling.
This solution brings new questions to #5938.
Currently, we lack a reliable way to calculate the existing x_angle only based solely on the extrusion direction. For example, a 30 degree angled extrusion with positive direction has the same extrusion direction as a -150 degree angled extrusion with negative direction. The difference lies in the object's rotation.
This means that things can get messy if the user changes the object x angle somehow. We may need to explore alternative approaches.
2025-03-15 21:00:57 -03:00
Dion Moult 2941a4ad1a See #1227. Recalculate normals and limited dissolve when layerset slicing and generating underside clipping geom. 2025-03-16 10:56:18 +11:00
Dion Moult b2e2f765ca See #1227. Clip based on active camera for legibility of drawings. Needs polish. 2025-03-16 00:23:47 +11:00
Dion Moult 2270185f8c See #1227. Drawing decorator now does material-aware fills for everything, and also basic caching. 2025-03-15 22:56:01 +11:00
Dion Moult faef2df2a6 See #1227. Basic uncached implementation of visualising wall layers in drawings 2025-03-15 20:56:56 +11:00
Dion Moult bef7ff33f7 Prevent errors where decorator is still running and there is no camera 2025-03-15 20:54:15 +11:00
Bruno Perdigão 615ca24825 Fix #6363. Improve how Curves are handled by the snapping system. 2025-03-14 21:43:26 -03:00
Bruno Perdigão 7e42b10159 Snap - Add face normal intersection to ´mix_snap_and_axis´ function. 2025-03-14 21:33:35 -03:00
Thomas Krijnen 8c466eab00 Remove temp goto 2025-03-14 19:15:08 +01:00
Thomas Krijnen 929611f384 Specific speed-ups 2025-03-14 18:56:27 +01:00
Thomas Krijnen 8af4afa781 Do use merges, much better perf, instantiate inverses directly and generally, no longer copy map 2025-03-14 16:16:25 +01:00
Richard Brice 04e07db0a3 Import alignment from csv (#6234)
* Start of the official alignment API

* Import alignment into bonsai model using CSV file
2025-03-14 07:31:50 -07:00
Andrej730 eed47c8c87 Display internal ID in calculator functions description
Example - https://i.imgur.com/3C3TBCu.png
2025-03-14 18:35:50 +05:00
Andrej730 9ba3b6a61f add cgal-original-edges option to settings (5599e52) 2025-03-14 18:19:08 +05:00
Andrej730 6cfd15e819 Fix mistake in 64f51d7 2025-03-14 18:19:07 +05:00
Andrej730 e55523ce3e bim.show_loads - add undo for safety
In Blender it's unsafe to leave operators without UNDO options if they edit any ID data-block.
2025-03-14 18:19:07 +05:00
Andrej730 f36830d6dc bim.show_loads - handle absence of structural items 2025-03-14 18:19:07 +05:00
Andrej730 2f87029434 Use schema_identifier to get IFC4X3 schema more precisely 2025-03-14 18:19:07 +05:00
Andrej730 9f78d9881e ifcopenshell.util.shape - use refs to functions in docs 2025-03-14 18:19:06 +05:00
Andrej730 1d447e6e23 ifc5d.qto.IfcOpenshell - skip None values
Just for consistency, in all other cases besides get_segment_length we were only preserving floats anyway
2025-03-14 18:19:06 +05:00
Andrej730 4c53c2ab1f ifc5d.qto.IfcOpenShell - get_weight function
Added support for it in .json for the same elements that support it in IFC4QtoBaseQuantitiesBlender
2025-03-14 18:19:06 +05:00
Andrej730 86ebc968e5 ifcopenshell.util.element.get_element_mass_density
Move it from Blender qto calculator as this method can be generally useful
2025-03-14 18:19:06 +05:00
Andrej730 1de67ffd9c ifc5d.qto - add x,y,z functions just for consistency with ifcopenshell calculator 2025-03-14 18:19:06 +05:00
Andrej730 1408beeac5 ifc5d.qto.Blender - functions descriptions 2025-03-14 18:19:05 +05:00
Andrej730 791a2e40f1 qto - add note on gross and net functions 2025-03-14 18:19:05 +05:00
Andrej730 3f6a9a55cd bim.calculate_side_formwork_area - expose to ui 2025-03-14 18:19:05 +05:00
Andrej730 ec702e2ec1 Simple quantity calculator - add operators descriptions 2025-03-14 18:19:05 +05:00
Andrej730 4f6dbbe72b bim.calculate_single_quantity - ifcopenshell calculator to appear first 2025-03-14 18:19:05 +05:00
Andrej730 8ca344259f bim.perform_quantity_take_off - support fallback calculator in ifc4x3 too 2025-03-14 18:19:04 +05:00
Andrej730 e038f968f2 bim.calculate_single_quantity - add info message 2025-03-14 18:19:04 +05:00
Andrej730 0e8810c1f5 typing 2025-03-14 18:19:02 +05:00
Andrej730 10ecac33b8 black . 2025-03-14 18:19:02 +05:00
Thomas Krijnen 8a3c979172 Speed up toposort with inverse map 2025-03-14 13:11:53 +01:00
Thomas Krijnen 15bbb3b779 Implement rocksdb-based has() 2025-03-14 13:11:30 +01:00
Thomas Krijnen 6cefb2e991 Update .py guess_format() 2025-03-14 10:32:11 +01:00
Thomas Krijnen 10682fb226 Fix python binding 2025-03-14 10:20:22 +01:00
Dion Moult 069b630b16 Minor fix where you'd randomly get incorrect ports connected based on the first birdsong of spring 2025-03-14 14:41:23 +11:00
Bruno Perdigão 8f6cd18288 Add instruction to MeasureFaceArea tool 2025-03-13 21:32:13 -03:00
Bruno Perdigão 7b7108b938 MeasureFaceAreaTool - Fix issue where face with index zero where not being selected 2025-03-13 17:02:40 -03:00
Bruno Perdigão ebd719783c black . 2025-03-13 16:56:22 -03:00
Bruno Perdigão 46a31386da Add "Face Area" option to measure tool. See #6163. 2025-03-13 16:55:43 -03:00
Bruno Perdigão c80c7c6d36 Refactor - move mouse_offset from snap.py to raycast.py 2025-03-13 16:55:43 -03:00
Bruno Perdigão ed7cf248ec typing 2025-03-13 16:55:43 -03:00
Bruno Perdigão b40f630783 Refactor - move raycast functions from snap.py to raycast.py 2025-03-13 16:55:37 -03:00
Bruno Perdigão f99015e123 Polyline tool - move "remove_last_polyline_point" to "handle_inserting_polyline". 2025-03-13 16:54:35 -03:00
Bruno Perdigão be76d4cb44 Refactor - Update input options display in Polyline tool UI 2025-03-13 16:54:35 -03:00
Bruno Perdigão 6949f9ceae Refactor - Move filtering logic for snap objects into a separate function 2025-03-13 16:54:35 -03:00
Andrej730 4daf4693f3 selector syntax - note on PredefinedType 2025-03-13 18:43:19 +05:00
Andrej730 edd60a73ca generate_pset_templates - fix running after ifc4x3 release
The error was:
```
Traceback (most recent call last):
  File "\IfcOpenShell\src\ifcopenshell-python\ifcopenshell\util\generate_pset_templates.py", line 416, in <module>
    templates_generator.parse_ifc4x3_data()
  File "\IfcOpenShell\src\ifcopenshell-python\ifcopenshell\util\generate_pset_templates.py", line 94, in parse_ifc4x3_data
    self.parse_psets_data("IFC4X3", pset_data_glob, "IFC4X3 Property Set Templates", str(IFC4x3_OUTPUT_PATH))
  File "\IfcOpenShell\src\ifcopenshell-python\ifcopenshell\util\generate_pset_templates.py", line 129, in parse_psets_data
    schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(schema_name)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\ifcopenshell_wrapper.py", line 9037, in schema_by_name
    return _ifcopenshell_wrapper.schema_by_name(arg1)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: No schema named IFC4X3
```
2025-03-13 18:43:19 +05:00
Andrej730 6c04669543 ifc5d - add ifc4x3 base quantities #6325 2025-03-13 18:43:19 +05:00
Andrej730 4eae112087 not real ifc4x3 quantities, just adding ifc4 quantities for diff 2025-03-13 18:43:18 +05:00
Andrej730 5be076cb96 Reset operator context in 63aada25dd for clarity 2025-03-13 18:43:18 +05:00
Andrej730 ef67d866b6 black . 2025-03-13 18:43:18 +05:00
Thomas Krijnen df6b7a34f7 Auto-detect filetype 2025-03-13 13:09:39 +01:00
Thomas Krijnen 67932a22c3 Working non-streaming serializer and read-only model 2025-03-13 12:34:54 +01:00
Dion Moult 609f468ce1 Update failing tests 2025-03-13 22:07:00 +11:00
Dion Moult 3852e3c63f Add tests for new light rendered shadows feature 2025-03-13 22:06:21 +11:00
Dion Moult 5cb9e1c68d Minor tweak to UI to make the shadow UI more elegant and reflect IFC style types 2025-03-13 11:09:42 +11:00
Dion Moult 52fbe09dd4 Fix syntax error otherwise nothing loads
Also PortData is loaded in the authoring tool and there might not be any
active object (e.g. fresh session).
2025-03-13 11:06:56 +11:00
falken10 4cff2f1fc1 Add traverse_transparent property to control sun light traversal through transparent objects 2025-03-13 10:36:43 +11:00
falken10 6517cafd98 Update add_prop_template.py so the properties are sorted
This allows to keep the pset properties sorted for easy access
2025-03-13 10:35:40 +11:00
falken10 5114576457 Update profile.py to add MEPGenerator().setup_ports when the profile has only one segment (no DumbProfileJoiner called)
When adding a single duct in MEP no ports where attached.
The function create_profiles_from_polyline does not call DumbProfileJoiner (which eventually calls MEPGenerator().setup_ports).
I have added a check so if there is only one segment, the MEPGenerator().setup_ports is called explictily
2025-03-13 10:35:24 +11:00
falken10 9bafe07c36 Update system.py so two ortogonal arrows (in x and y local) are used for MEP systems decorations
Currently the flow direction decorations run in the local Y. This means that if one is creating ducts/pipes in the xy plane, the decorations are drawn in planes perpendicular to that one and than means that the arrows are not visible from a top/bottom view.
By adding another set of arrows perpendicular the arrows are always visible no matter what projection is taken
2025-03-13 10:31:27 +11:00
falken10 6b85e9ec85 Update operator.py
This will sort the groups by name so it is easy to find them.
2025-03-13 10:31:06 +11:00
Dion Moult d89957faab Fix regression in 227f31574 which prevented quantifications
The key in the dictionary is not a class name, it's a query string to
allow for complex quantification rules.
2025-03-13 09:18:07 +11:00
Ryan Schultz ba8753d55e Updated docs regarding material selector syntax. 2025-03-12 16:27:48 -05:00
Bruno Perdigão 5df9c45795 Improve weight in snapping for "Plane", "Axis" and "Face" type. 2025-03-12 17:16:47 -03:00
Bruno Perdigão 5cc0aa71c7 Fix issues with snapping empties and faceless objects in x-ray mode. 2025-03-12 17:16:47 -03:00
Bruno Perdigão b06ddbcad4 Remove duplicate line 2025-03-12 17:16:47 -03:00
Ryan Schultz 18431dec31 added material.item.Material.Name.0 to selector syntax 2025-03-12 14:23:43 -05:00
Bruno Perdigão 7e9985758f Remove debug print statements. 2025-03-12 11:10:14 -03:00
Andrej730 ece91a94db util.schema.reassign_class to return early if class already assigned 2025-03-12 18:49:26 +05:00
Andrej730 dccfb634d9 Ports UI - cache instead of accesing IFC on draw calls 2025-03-12 18:49:26 +05:00
Andrej730 ffc6c6a7ad Zones UI - rearrange button to match the Systems UI layout 2025-03-12 18:49:26 +05:00
Andrej730 dbf4a2a5ed Fix reassign_class on IFC4X3, use ValueError
Use ValueError to make it more specific
2025-03-12 18:49:22 +05:00
Andrej730 f6640d3904 typing 2025-03-12 18:49:22 +05:00
Andrej730 63aada25dd Deprecate LaunchAddElement, LaunchRenameType
TIL that it's possible to set invoke context from draw by changing operator_context property in UILayout 😅
2025-03-12 17:08:41 +05:00
Dion Moult 6596f5bc4b Fix regressions in MEP joins after switching over to numpy from mathutils 2025-03-12 23:05:34 +11:00
Dion Moult acdc40fb41 See #1227. Reimplement extending walls to another wall 2025-03-12 23:05:34 +11:00
Andrej730 9be0a60c0a github issue templates - use comment blocks for instructions
As users sometimes tend not to remove the intsruction messages...
2025-03-12 16:29:13 +05:00
Andrej730 e9a3d06352 Document copy and paste workarounds in docs #6327 2025-03-12 16:13:53 +05:00
Andrej730 dfd30fbcaa black . 2025-03-12 16:13:52 +05:00
Dion Moult a941eb3f90 Parametric roof geometry is now whitelisted for IfcSlab.ROOF and IfcCovering.ROOFING too. 2025-03-12 18:47:50 +11:00
Dion Moult 226736eb41 Fix #3357. Remove Shift-E for parametric objects (superseded by tab) and you can now extend to anything not just slabs.
This Shift-E still needs more polish as we figure out the best hotkeys
and what's most natural to users when they select different combinations
of objects, so expect the conditionals that govern when Shift-E does
things to still change in the future.
2025-03-12 18:41:18 +11:00
Dion Moult f5a1c4aae3 See #1227. Reimplement extend walls to slab (or anything with negative Z faces)
There are a few differences to the previous implementation:

 1. It is no longer recalculated on wall regeneration. The new wall
regeneration is strict to the spec on the rules of rel connects path,
and so this being a "userdefined" connection we only calculate it
explicitly when the user invokes the operator.
 2. It uses meshes instead of clipping planes, so you can clip to
strange shapes or gable roofs or whatever. Nice.
2025-03-12 18:05:57 +11:00
Bruno Perdigão a7a4198fc1 Polyline tool - add "dm" and "cm" to the input validation. 2025-03-11 17:10:52 -03:00
Bruno Perdigão 6e0e19d690 See #6130. Fix issue where aggregate mode where not being disabled.
The issue was caused by deleting an object outside the aggregate while in
aggregate mode. The selection for these objects are now disabled to prevent
this issue
2025-03-11 16:58:08 -03:00
Bruno Perdigão 72bbf244f2 Fix issue #6221 where crtl+shift+D were not moving the whole copied aggregate. 2025-03-11 16:33:40 -03:00
Bruno Perdigão 41c1c6e8fa Fix #6291.
When changing slab `x_angle` the rotation matrix now takes into account object's world matrix.
2025-03-11 16:11:47 -03:00
Bruno Perdigão a32735ac6a Small fix after 7af672712f 2025-03-11 14:04:34 -03:00
Bruno Perdigão 031540e982 Add #5496. Objects from linked ifc files can now be snapped. 2025-03-11 12:37:47 -03:00
Bruno Perdigão db1d8d938f Allow dimensions to use custom units from BBIM_Dimension Pset.
- Implementation of @theoryshaw PR #5922.
 - Note: `IfcPropertyEnumeration` allows multiple choices, but this is not
 applicable for this use case. Users must manually deselect other options;
 otherwise, it defaults to the first selected option.
2025-03-11 11:56:16 -03:00
Bruno Perdigão aa478ab359 Fix area measure tool to display first dimension correctly. 2025-03-11 11:56:16 -03:00
Bruno Perdigão 19c103c627 Fix issue where "C" to close polyline where not updating measurement dimension. 2025-03-11 11:56:16 -03:00
Bruno Perdigão 7af672712f See #6164. Allow measure tool to work without IFC Project. 2025-03-11 11:56:08 -03:00
Andrej730 6bd8636c92 Revert "Bump IOS"
This reverts commit c1bc36ab86.
2025-03-11 18:46:38 +05:00
Andrej730 a9f7d4ab3b get_applicable_types in ifc2x3 to prioritize IfcBuildingElementProxyType
for occurrence classes without special type.

E.g. previously:
you select IfcSlab and change it to IfcRoof - since there is not IfcRoofType in IFC2X3 it would figure the matching product type is IfcBeamType and change this slab's type element to IfcBeamType. IfcBuildingElementProxyType seems more generic and fitting.
2025-03-11 18:37:24 +05:00
Andrej730 977d814d39 bim.reassign_class - fix issue in ifc2x3 when selected product class would be ignored
E.g. you select IfcSlab and change it to IfcRoof - since there is not IfcRoofType in IFC2X3 it would figure the matching product type is IfcBeamType (which is confusing too but that's another subject) and change this slab's type object to IfcBeamType which consequently change IfcSlab to IfcBeam instead of IfcRoof that was selected originally.

Noticed investigating #5918
2025-03-11 18:37:23 +05:00
Andrej730 5b95bb37e6 Systems UI - cache active system data 2025-03-11 18:37:23 +05:00
Andrej730 85b9906e20 Zones UI - add buttons for unassigning zone from the active objects 2025-03-11 18:37:23 +05:00
Andrej730 64f51d733e Fixed version of f3f7939c8b + get_element_zones 2025-03-11 18:37:23 +05:00
Andrej730 ed0b1c5009 typing 2025-03-11 18:37:22 +05:00
Dion Moult c1bc36ab86 Bump IOS 2025-03-11 21:59:53 +11:00
Dion Moult 9cfcaeb587 Fix bug and add boolean tests where if you added a boolean that fully clipped something you couldn't edit it due to lack of item ids. 2025-03-11 21:14:11 +11:00
Dion Moult d9e48467cd Fix bug where removing a boolean didn't unmark it as a manual boolean. 2025-03-11 21:13:04 +11:00
Dion Moult f08dba6483 Improve debug logs when running BDD tests
I've been spoilt by tools like Behat and so this make it much nicer
because it tells you exactly the feature/scenario/step where it failed.
2025-03-11 18:40:00 +11:00
Dion Moult 1e97d2c5fa See #6307. Prevent user from manually changing the ifc file path.
You can still hover over and copy paste if you want.
2025-03-11 18:38:45 +11:00
Dion Moult bf54132805 Fix #6307. Warning: critical bug where saving a file broke undo state.
Previously, changing props.ifc_file had an update hook to reload
information about the IFC model. But this isn't always correct because
there are two situations:

 1. The ifc_file path changed because you saved the file for the first
time or saved as, and this is merely recording a new saved path of the
existing file object.
 2. The ifc_file path changed because the user manually changed it or
selected a new file. This could reference an entirely new file object.
This is dangerous because we can't trust anything anymore, including our
undo history.

So the new default situation is that there is no magic hook. If you
change props.ifc_file, that's all it changes ... just a path stored in
Blender with not much significance.

If the user runs select_ifc_file to explicitly relink the file, it now
explicitly purges in that situation and clears the undo history.

Basically now behaviour is explicit, not using magic hooks.
2025-03-11 18:37:53 +11:00
Dion Moult 570513b60b Revert "util.get_element_systems to consider all kinds of ifcsystems"
This reverts commit f3f7939c8b.
2025-03-11 09:13:48 +11:00
Bruno Postle e1ba98c5f8 fix loading ifc2x3 project libraries 2025-03-10 21:07:18 +00:00
Andrej730 8ed9c32404 Rename systems and zones from UIList
example - https://imgur.com/a/8yTzmy3
2025-03-10 18:52:39 +05:00
Andrej730 5b9ef23bdd bim.assign_system/unassign_system - add info messages
Also check whether element is assignable prior to running system.assign_system to avoid scary exceptions.
2025-03-10 18:52:39 +05:00
Andrej730 f3f7939c8b util.get_element_systems to consider all kinds of ifcsystems 2025-03-10 18:52:39 +05:00
Andrej730 469b4f3502 Systems UI - move buttons to the header to unclutter UI 2025-03-10 18:52:39 +05:00
Andrej730 c4b57eb903 typing 2025-03-10 18:52:39 +05:00
Andrej730 3886c79a2c black . 2025-03-10 18:52:39 +05:00
Massimo Fabbro 566fe32ab2 Fix wrong wall legth qto calculation 2025-03-10 23:19:12 +11:00
Dion Moult 7fb6adc025 Fix #6296. See #1227. More normal fixes in layer set slicing. 2025-03-10 23:15:24 +11:00
Dion Moult c03cf4ce58 Fix #6303. I messed up the commit in 1259607a 2025-03-10 23:06:16 +11:00
Dion Moult 41188e26e1 See #1227. Don't touch manual booleans when regenerating wall body. 2025-03-10 22:54:42 +11:00
Dion Moult 823f27cd6a Add tests for new element add feature 2025-03-10 22:53:55 +11:00
Massimo Fabbro 4260313a99 Fix #6271
Fix the wrong length calculation for beams and columns
2025-03-10 20:09:10 +11:00
Dion Moult 1259607a9f See #1227. Fix slicing normal calculation for AXIS3 elements. 2025-03-10 18:10:05 +11:00
Dion Moult 9f1ffe6381 Minor fix where you shouldn't be able to add an element without an IFC project 2025-03-10 18:08:43 +11:00
Dion Moult ba1b6b5b10 Fix regression where type thumbnails don't refresh properly from ae76d3253
The fix in ae76d3253 removed the refresh_ui_data call, so we need to
handle it a bit better. I also heavily simplified the thumbnail loading.
2025-03-10 18:08:30 +11:00
Dion Moult 2318132ea2 Minor refactor add_constr_type_instance is now add_occurrence 2025-03-10 08:23:56 +11:00
Thomas Krijnen 9f49ad5f71 Non-streaming rocksdb serializer nearing completion 2025-03-09 21:20:16 +01:00
Massimo Fabbro b6b553e726 Fix #6271
Fix a bug about wrong net values qto calculation with IfcOpenshell
2025-03-09 22:48:08 +11:00
Dion Moult 076f39e2d6 I think bSDD should use the Name for the property name. See 115a48f
It seems correct according to
https://github.com/buildingSMART/bSDD/blob/master/Documentation/bSDD%20JSON%20import%20model.md
2025-03-09 21:35:20 +11:00
Dion Moult abfe8ec315 Fix failing IOS tests 2025-03-09 20:47:02 +11:00
Dion Moult 9d7fe179cf See #1227. Minor fix of incorrect layerset slicing of negative sense slabs. 2025-03-09 19:29:35 +11:00
Dion Moult 8ffb5c56e4 See #1227. Fix inconsistent layer UI based on direction sense and minor UI cleanup.
The UI here looks suspicious in that logic is occuring in the draw call
instead of the cached data object.
2025-03-09 19:28:47 +11:00
Dion Moult 4109b19c3a See #1227. Slightly more defensive to make sure ATPATH is between START and END 2025-03-09 18:31:49 +11:00
theseyan 7503530741 Fix #4807 2025-03-09 18:02:59 +11:00
Dion Moult e78127d54f See #1227. Don't move any child at all when regenerating wall body. 2025-03-09 18:00:13 +11:00
Dion Moult 5fa4f2e79b See #1227. Reimplement merge walls with new wall body generation code. 2025-03-09 17:32:19 +11:00
Dion Moult e5027e0be8 See #1227. Implement updating of object position. 2025-03-09 08:52:05 +11:00
Dion Moult af2dd1d7c6 See #1227. Start to integrate into Bonsai. Basic testing of join/unjoin/extend/split/flip done. 2025-03-09 08:25:32 +11:00
Massimo Fabbro 5d9528d791 Fix #6168. Now reload link button works
It is fixed also an inconsistency problem when use relative path is True
2025-03-08 11:47:43 +01:00
Dion Moult 47d11daa15 See #1227. Small clean up of old sketch-wall based code which we no longer support. 2025-03-08 11:26:27 +11:00
Dion Moult 01ec750814 See #1227. New connect wall API function since this can be done generically.
This will supersede the butt/mitre join functions we used to have.
2025-03-08 11:25:07 +11:00
Dion Moult 8c9a657a8c See #1227. Check layer set direction when slicing. 2025-03-08 11:13:26 +11:00
Bruno Perdigão 48acfad8bb Fix #6213. Adjust wall clipping from slabs to account for slab offset and direction sense. 2025-03-07 15:49:32 -03:00
Bruno Perdigão 01b63d87d0 Fix issue with updating slab offset with negative direction sense. 2025-03-07 15:42:09 -03:00
Bruno Perdigão 36744d391e Fix #6236. Product preview properties were not being cleared when data is empty. 2025-03-07 14:14:28 -03:00
Andrej730 f0e5430daa bonsai_translations - allow .po files going out of sync
We had Chinese translation for Bonsai and some stub file for German and translation.py generation was failing with the error below. Chinese translation is more recent so it has some keys that German file hadn't and some keys were gone in the more recent version. In theory we should make all .po file in sync but let's skip it for now to keep things going.

```
Traceback (most recent call last):
  File "/home/runner/work/IfcOpenShell/IfcOpenShell/src/bonsai/scripts/bonsai_translations.py", line 379, in <module>
    update_translations_from_po(po_directory=Path(args.input), translations_module=Path(args.output))
  File "/home/runner/work/IfcOpenShell/IfcOpenShell/src/bonsai/scripts/bonsai_translations.py", line 203, in update_translations_from_po
    if (msgstr := msg.translations[lang]) in (None, ""):
                  ~~~~~~~~~~~~~~~~^^^^^^
KeyError: 'de_DE'
```
2025-03-07 20:48:44 +05:00
Andrej730 197281eb5a bonsai_translations - use utf-8 for opening files
Critical on Windows as it's not using utf-8 by default
2025-03-07 20:48:44 +05:00
Andrej730 7b370e6142 Fix operators missing execute after a663216 2025-03-07 17:13:00 +05:00
Andrej730 71a7d0c086 Fix missing IfcDistributionCircuit and IfcElectricalCircuit #6202
When checking if element is assignable to the system.
2025-03-07 17:12:59 +05:00
Andrej730 b86e735530 Fix breaking Systems UI with IfcElectricalCircuits 2025-03-07 17:12:59 +05:00
Andrej730 46104f5bf5 Update Profiles UI profile editing arbitrary profile #6284 2025-03-07 17:12:59 +05:00
Andrej730 d68068a84b bim.load_profiles - try not to check all inverses for optimization 2025-03-07 17:12:59 +05:00
Andrej730 fc7dd3b234 Preserve ProfileName editing arbitrary profile #6284 2025-03-07 17:12:59 +05:00
Andrej730 85fc97eb84 Profiles UI - add safety check for missing profiles #6284
Example - https://imgur.com/a/bVdV5oB
2025-03-07 17:12:59 +05:00
Andrej730 9076deddbc Consider ifc2x3 in a358cff1b7 #6255
In ifc2x3 position is not optional, so we should reset it's coordinates instead.
2025-03-07 17:12:59 +05:00
Andrej730 eb0d3c38b2 ifcopenshell.util - make ifc_file argument optional if it can be deduced from ifc element 2025-03-07 17:12:59 +05:00
Andrej730 590288496e typing 2025-03-07 17:12:58 +05:00
Andrej730 269e137ea2 black . 2025-03-07 17:12:58 +05:00
Dion Moult ed722c6f13 See #1227. Refactor out test waldo script into API function. 2025-03-07 19:05:24 +11:00
Dion Moult 2b9e3d2a2e See #1227. Enable layerset slicing. 2025-03-07 19:03:45 +11:00
Dion Moult 7dee888ecf See #1227. New util function in shape builder to do an X axis intersection. 2025-03-07 19:00:18 +11:00
Dion Moult a67927ae67 Automatically merge excessive styles when loading models
Came across this problem with some models from 12D
2025-03-07 17:02:05 +11:00
Dion Moult 1271e4b7e3 New IfcPatch recipe to merge identical styles 2025-03-07 17:01:14 +11:00
Andrej730 a44d0e713a Bump Blender build and fix dead url 2025-03-06 19:11:46 +05:00
Andrej730 a358cff1b7 Fix extrusion position update on OffsetFromReferenceLine changed #6255
Also fixed an issue when previously there was an offset and now it was set to 0 but slab did not reset it's position.
2025-03-06 18:43:54 +05:00
Andrej730 188ca3e402 Fix bim.profiles_ui_select button in profiles set ui
It was using IfcMaterialProfile id instead of IfcProfileDef id, so profile was never selected
Example - https://imgur.com/a/Sf1ghPO
2025-03-06 18:43:54 +05:00
Andrej730 b5260d3005 copy_class to prevent duplicating profiles #6261 2025-03-06 18:43:54 +05:00
Andrej730 79940641b2 typing 2025-03-06 18:43:54 +05:00
Andrej730 7458040949 Fix ifcpatch unit conversion for lists of ifc entities #6280 2025-03-06 16:14:02 +05:00
Andrej730 14eb543662 TestConvertFileLengthUnits - add attributes conversion tests 2025-03-06 16:14:02 +05:00
Andrej730 e786687882 ConvertFileLengthUnits - unify tests, add ifc4x3 tests 2025-03-06 16:14:02 +05:00
Andrej730 37e131193b edit_georeferencing - add note on MapUnit data type 2025-03-06 16:14:02 +05:00
Andrej730 dfb00f27bb Fix georeferencing docs url 2025-03-06 16:14:02 +05:00
Dion Moult 53dea65d8b See #1227. Implement joins for sloped walls. 2025-03-06 19:38:46 +11:00
Andrej730 2c16839de7 Fix parametric stairs/railings/roofs not updating ifc link after representation update #6264
Related to 3107fd9
2025-03-05 18:53:57 +05:00
Andrej730 c4f2d556f1 Uncomment use of get_edges_representation_item_ids
as build was updated awhile ago
2025-03-05 18:53:57 +05:00
Andrej730 74900193ee merge_identical_objects to use quicker version of get_info 2025-03-05 18:53:57 +05:00
Andrej730 2987d38a31 append_asset - check unique styles based on their name #6269 2025-03-05 18:53:56 +05:00
Andrej730 08b50bb9ea Library UI - recognize already appended styles
Example - https://i.imgur.com/XCXHY4C.png
Noticed investigating #6269
2025-03-05 18:53:56 +05:00
Andrej730 1257eb0872 append_asset - allow using same name for different ifcpresentationstyle types
Since they are not used interchangeably typically.
2025-03-05 18:53:56 +05:00
Andrej730 1c8ef176b1 typing 2025-03-05 18:53:56 +05:00
Andrej730 e1e51cbf26 black . 2025-03-05 18:53:56 +05:00
Andrej730 4c97cc8a41 import_ifc - not to break completely on facing breaking mesh #6270
create_mesh returns None only in case if it meets some exception and it prints logs in that case, but atleast some breaking mesh won't be in the way of users trying to open some model
2025-03-05 18:53:09 +05:00
Dion Moult 7c6e124fe9 See #1227. Basic implementation of sloped walls (joins not yet considered) 2025-03-05 22:10:33 +11:00
Andrej730 3fc312752b Show an error for unsupport curve types #6259 2025-03-04 18:10:42 +05:00
Andrej730 d0cb5456b3 Fix importing IfcPolylines always assuming they're closed
Resolved issue during import in #6259 but doesn't completely resolves the issue.
2025-03-04 18:10:42 +05:00
Andrej730 86072079de draw_image_for_ifc_profile - optimizations using numpy 2025-03-04 18:10:42 +05:00
Andrej730 9440096106 Fix #6260 after 2f6ae17 2025-03-04 18:10:42 +05:00
Andrej730 649a913bbc add_profile_representation - add test 2025-03-04 18:10:42 +05:00
Andrej730 53a3afaded typing 2025-03-04 18:10:41 +05:00
Andrej730 33d3984990 add_profile_representation - reuse util.shape methods 2025-03-04 18:10:41 +05:00
Andrej730 5f86c6d1c2 shape_builder.create_axis2_placement_3d_from_matrix - small optimization
create_axis2_placement_3d now is fine with numpy arrays
2025-03-03 13:54:57 +05:00
Andrej730 10d5378ee3 TessellateElements - small optimization
tolist() supports conversion of multidimensional arrays too
2025-03-03 13:54:57 +05:00
Andrej730 7f27785927 docs fixes
1) material.add_profile_set doesn't exist
2) usecase.file is not defined, use `model` instead`
3) Specify material for material.assign_material
2025-03-03 13:54:57 +05:00
Andrej730 fed063a0c6 edit_profile_usage - add test 2025-03-03 13:54:56 +05:00
Andrej730 855062e36b Quick to select profile from BIM Tool in Profile UI
Example - https://imgur.com/a/tJdQUGq
2025-03-03 13:54:56 +05:00
Andrej730 7b74b6c68f Simplify edit_profile_usage with util.shape 2025-03-03 13:54:56 +05:00
Andrej730 a01278aa8d ifcopenshell.util.shape to return Python floats if return is just a scalar 2025-03-03 13:54:56 +05:00
Ryan Schultz 99c49736fa small tweak 2025-03-02 10:31:46 -06:00
Bruno Postle c1efdbb8ea black . 2025-03-02 11:37:52 +00:00
Bruno Postle e240ae2669 Fix bpy.ops.bim.select_by_material() for layersets
This operator assumes all material definitions have a Name attribute,
mostly they do except that Material Layer Sets have a LayerSetName
attribute for reasons.
2025-03-02 11:24:07 +00:00
Ryan Schultz 945099b817 Set IfcMaterialLayerSetUsage's DirectionSense/OffsetFromReferenceLine/ReferenceExtent on all selected objects 2025-03-01 18:04:41 -06:00
Bruno Perdigão f4b0fe6560 Polyline tool - Fix issue where Y and Z axis lock were inverted when in YZ plane. 2025-02-28 13:52:20 -03:00
Bruno Perdigão efc6842a9d Improve snapping for empty objects. 2025-02-28 13:44:00 -03:00
Bruno Perdigão 43931e951e Fix another issue (follows 2609a8293c) with walls created with obtuse x_angle. 2025-02-28 13:19:51 -03:00
Bruno Perdigão 134a480b03 Fix slab preview decorator when using obtuse x_angle. 2025-02-28 13:02:02 -03:00
Bruno Perdigão 0eb32ed7b7 Refactor ChangeExtrusionXAngle to support obtuse x_angle for slabs.
To support obtuse x_angle a refactoring had to be made, which helped
improve the general code for slab addition. This is challenging because
there are a few features that interact with each other to create slabs,
like `depth`, `direction_sense`, `offset` and `x_angle`. In addition,
these interactions can happen in different parts of the code. This
commit addresses `ChangeExtrusionXAngle` in `model/wall.py`.
See e8e88c25fdcef55826443fe6b000aec1baa6f25a for more information.
2025-02-28 13:02:02 -03:00
Bruno Perdigão 1855ac421c Refactor slab addition to support obtuse x_angle. See #5938
To support obtuse x_angle a refactoring had to be made, which helped
improve the general code for slab addition.
This is challenging because there are a few features that interact
with each other to create slabs, like `depth`, `direction_sense`, `offset`
and `x_angle`. In addition, these interactions can happen in different parts
of the code. This refactor improves the coherence between those different parts.
Files changed:
- `api/geometry/add_slab_representation.py`
- `model/slab.py` - inside the function `change_thickness()`
File to be changed in a following commit:
- `model/wall.py` - inside the operator `ChangeExtrusionXAngle` - To-do
2025-02-28 13:02:02 -03:00
Bruno Perdigão 7a69d6f20e Fix issue when updating wall x_angle with obtuse angle. See #5938 2025-02-28 13:02:02 -03:00
Bruno Perdigão 2609a8293c Fix issue where walls are created with obtuse x_angle. See #5938 2025-02-28 13:02:02 -03:00
Bruno Perdigão e68c47a897 Remove code related to 0104a2cc9f 2025-02-28 13:02:02 -03:00
Andrej730 06fa2b05d6 Fix #6245 after 17642ca 2025-02-28 18:31:14 +05:00
Andrej730 db52e70121 Fix possibility of adding new invalid surface styles
1) Add default values for new IfcSurfaceStyleLighting so they won't appear invalid.
2) Temporarily disable starting surface style with a texture style since it requires additional texture UI to be exposed or some default texture to be assigned to keep it valid.
2025-02-28 18:31:14 +05:00
Andrej730 c81fe97cc2 Fix bim.change_cardinal_point breaking if one of objects had no material 2025-02-28 18:31:13 +05:00
Andrej730 b9f4503206 Paramteric doors/windows - detect previously assigned materials when editing is enabled
Example - https://imgur.com/a/FEbSBaX
2025-02-28 18:31:13 +05:00
Andrej730 bd4dc501a2 Pamateric doors/windows - add material select shortcut to UI
Example - https://i.imgur.com/UfJTjGz.png
2025-02-28 18:31:13 +05:00
Andrej730 8d1255f0bc Fix toggling wireframe for odd case when there are no objects linked
Noticed investigating #6242
2025-02-28 18:31:13 +05:00
Andrej730 cc7abe6a8d Fix error applying blender offset to read-only matrix (e.g. during linking)
Example:
```
  File "\bonsai\bim\module\project\operator.py", line 1815, in execute
    self.process_occurrence(shape)
  File "\bonsai\bim\module\project\operator.py", line 1952, in process_occurrence
    obj.matrix_world = tool.Loader.apply_blender_offset_to_matrix_world(obj, mat)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\tool\loader.py", line 952, in apply_blender_offset_to_matrix_world
    matrix[0][3] = offset_xyz[0]
    ~~~~~~~~~^^^
    ValueError: assignment destination is read-only
```

Noticed investigating #6242
2025-02-28 18:31:12 +05:00
Andrej730 edfcc3f74b ifc2sql - change default database name to match default sql_type
Co-Authored-By: bsmithuk <68438529+bsmithuk@users.noreply.github.com>
2025-02-28 18:31:12 +05:00
Andrej730 b1c87b1eb4 Set tools hotkeys name to empty string to hide it from tooltip #6238 2025-02-28 18:31:12 +05:00
Andrej730 d37bda6871 cad operators - add descriptions #6238 2025-02-28 18:31:12 +05:00
Andrej730 bb0d156bbf cad operators - use Blender units for props 2025-02-28 18:31:12 +05:00
Andrej730 b89ffcb6d0 SplitByBuildingStorey - ensure user won't pass a file by accident 2025-02-28 18:31:12 +05:00
Andrej730 323967b9fd Fix ifc2sql test after 9055f14bb9 2025-02-28 18:31:11 +05:00
Andrej730 4dd10b16e6 SplitByBuildingStorey - Bonsai to recognize filepath argument after cac3d7f 2025-02-28 18:31:11 +05:00
Andrej730 15a0d43180 fix for glob pattern in 62d53ba62d 2025-02-28 18:31:11 +05:00
Andrej730 5a1f7000ec ifcpatch - add simple test for docs generator 2025-02-28 18:31:11 +05:00
Andrej730 277aaca6c5 typing 2025-02-28 18:31:10 +05:00
Andrej730 9187f2d2b5 Bonsai patcher - small fix for cases when Blender restarts 2025-02-28 18:31:10 +05:00
Thomas Krijnen ce4407ff3c Some successes writing and reading 2025-02-27 22:07:31 +01:00
Andrej730 62d53ba62d Bonsai - recognize ifc2sql database argument as filepath #6227 2025-02-27 18:35:43 +05:00
Andrej730 9055f14bb9 Ifc2Sql - hide IFC output argument as there's already database argument #6227
Also handle directory paths more gracefully.
2025-02-27 18:35:43 +05:00
Andrej730 0bd608b6cb Bonsai - ifcpatch description to include arguments descriptions
Also fix a bug with broken patch descriptions if some argument had more than one line for the description.

Example - https://i.imgur.com/1syL4gJ.png
Notcied working on #6227
2025-02-27 18:35:43 +05:00
Andrej730 497542d7a0 ifc2sql - small optimizations 2025-02-27 18:35:43 +05:00
Andrej730 26b2a7d584 typing 2025-02-27 18:35:43 +05:00
Andrej730 2d0bd9782a Reuse tool.Blender.add_layout_hotkey_operator
Now all tools are using a general method and it should be easier to maintain the consistency between the tools.

Fixes #6238.

ping @trhyder just in case
2025-02-26 17:55:15 +05:00
Andrej730 746a61a199 Add tool.Blender.KEY_MODIFIERS instead of storing it at workspaces 2025-02-26 17:55:15 +05:00
Andrej730 24df52e2f7 Do not purge orphaned IfcDocumentReferences #6117 2025-02-26 17:55:14 +05:00
Andrej730 257f0b11f5 Fix typo 2025-02-26 17:55:13 +05:00
Andrej730 b4f2039367 Fix bim.purge_unused_openings poll
It was returning true regardless whether tool.Geometry.has_openings returned True or not.
2025-02-26 17:55:13 +05:00
Thomas Krijnen c58c8269af Fix codegen 2025-02-26 09:34:02 +01:00
Thomas Krijnen c0f148cd3c Run codegen for header schema 2025-02-26 09:25:04 +01:00
Dion Moult cfb7d026d1 IfcPatch recipe for Revit 2025 TINs import workaround
To understand what's going on, please read the docstring. Then please
take as much alcohol required to erase that memory.
2025-02-26 18:13:29 +11:00
Dion Moult 34acd6de35 See #1227. Implement ATPATH wall connections (going both ways). 2025-02-26 18:13:29 +11:00
Dion Moult 0f3de599a6 Don't break if no area unit defined 2025-02-26 18:13:28 +11:00
Bruno Perdigão 0104a2cc9f Remove polyline wall size limit restriction. See #6162 2025-02-25 18:06:42 -03:00
Bruno Perdigão 81f4b08b6d Fix issue where long lines where not being detected by the snapping system. 2025-02-25 18:06:42 -03:00
Bruno Perdigão 10776b7de8 Remove debug print statement 2025-02-25 18:06:42 -03:00
Bruno Perdigão b0efb648f2 Make snapping system zoom-dependent. See #6162
Refactor the snapping system to better organize the weighting and ordering
of snap distances. This change enhances the "stickiness" of snapping points,
allowing for prioritized control over different types of snapping points.
2025-02-25 18:06:42 -03:00
Thomas Krijnen 1d9dcb3ab7 Add header schema 2025-02-25 21:30:20 +01:00
Thomas Krijnen a420c4b707 Work towards serialization of data 2025-02-25 21:29:54 +01:00
Andrej730 a20a8a68a6 Smal UI fix - display "Types" instead of "Typess" 2025-02-25 18:32:47 +05:00
Andrej730 f8ec8402fe Remove test for deprecator operator (c85eb79) 2025-02-25 18:28:48 +05:00
Andrej730 aaf008f007 Fix adding transom to door #6230 (d23cfcb) 2025-02-25 18:28:48 +05:00
Andrej730 f63d6b80c5 quantitifaction - not to add empty qto if nothing was quantified
It already works that way for ifcopenshell quantitification, making it work the same for Blender quantifications.

Noticed in #6220
2025-02-25 18:28:48 +05:00
Andrej730 2f6ae1745f typing 2025-02-25 18:28:48 +05:00
Andrej730 5f4098e5d4 Update type_elements_filtered on changing ifc class
Needed after 1d815cdb67
2025-02-25 18:28:47 +05:00
Andrej730 b49cc6c5e9 AuthoringData.data["relating_type_data"]
Simplify lots of data keys to just one dictionary relating_type_data, so it will be easier to maintain it and update if needed.
2025-02-25 18:28:47 +05:00
Andrej730 dcc681ac74 Revert a428169 to avoid constant reload of cached data
The code was recalculating type_elements and relating_type_id every time Blender trying to check enum items.
Couldn't replicate issue when type duplicated, perhaps it's resolved some other way already.
2025-02-25 18:28:47 +05:00
Thomas Krijnen 240c78c12a Update IfcHierarchyHelper.h 2025-02-25 14:18:10 +01:00
Andrej730 6de409031e Fix #6222
Mentioned in #6223
2025-02-25 14:21:01 +05:00
Bruno Perdigão ea274588b0 See #6214. Fix how extrusion existing angle is calculated.
The issue happen when the layer has a negative direction sense.
2025-02-24 20:46:37 -03:00
Bruno Perdigão e46e1512fa Fix #6160 where axis snapping in polyline tool were not working consistently 2025-02-24 20:46:26 -03:00
Thomas Krijnen 048f77cfed Getting closer to working SPF again 2025-02-24 20:46:29 +01:00
Thomas Krijnen 70182d943d Update build_osx.yml 2025-02-24 17:11:01 +01:00
Andrej730 0bd4451ce9 Fix issue not cleaning up the mesh after 76277c35d2 2025-02-24 19:31:36 +05:00
Andrej730 899ada0019 Fix purge unused types test after 3bb4243 2025-02-24 18:52:35 +05:00
Andrej730 f6ae711f6c Fix feature tests failing due to AuthoringData changes
relating_type_id now relies on type_elements which relies on ifc_class_current and they wasn't updated when ifc_class was changed.

Typical failing test looked like "TypeError: bpy_struct: item.attr = val: expected a string enum, not int".
2025-02-24 18:52:35 +05:00
Andrej730 1d815cdb67 Fix issue reloading AuthoringData from workspace at every draw call
If data was already loaded for BIMTool ("all") this ` elif ifc_element_type == "all" and AuthoringData.data["ifc_element_type"] is not None:` would always fail and this `AuthoringData.data["ifc_element_type"] != ifc_element_type` would always result to True, constantly recalculating data on every draw call.

This may uncover some issues that were hidden by the constant update (e.g. the bug fixed in the next commit).

Simplified it so now ifc_element_type is almost always referring to either ifc class or None. It's still using "all" in the BIMTool itself but then it's converted to None when passed to draw methods.
2025-02-24 18:52:35 +05:00
Andrej730 ce6339869d Fix some feature tests 2025-02-24 18:52:35 +05:00
Andrej730 5eb9cb2ee4 len(get_inverse) -> get_total_inverses 2025-02-24 18:52:35 +05:00
Andrej730 6eda4e389c typing 2025-02-24 18:52:34 +05:00
Andrej730 0783f8082e black . 2025-02-24 18:52:34 +05:00
Thomas Krijnen 3854afb34d Update build-all.py; --force when fetch tags 2025-02-24 14:01:48 +01:00
Thomas Krijnen 0b2321f478 Add template keyword 2025-02-24 13:33:53 +01:00
Thomas Krijnen 5510fb1e3c Add constexpr 2025-02-24 13:30:45 +01:00
Thomas Krijnen 7331f7361f Workaround explicit in-class specialization to if constexpr #6206 2025-02-24 13:30:24 +01:00
Andrej730 e06684e274 Comment out outdated code #6200 2025-02-24 16:46:32 +05:00
Andrej730 57d6e9b544 Fix error reassigning class for structural items 2025-02-24 15:15:54 +05:00
Andrej730 5fa0aa03e4 util.schema.is_a - use c++ implementation 2025-02-24 15:15:54 +05:00
Andrej730 1d2ac9426d Fix error during class reassignment after 43cc7a0 2025-02-24 15:15:54 +05:00
Andrej730 e79a85a4fd bim.edit_container_attributes - remove deprecated operator
Currently you can edit container name directly from spatial manager, so this operator is no longer needed (and it also was missing from UI either way).
2025-02-24 15:15:54 +05:00
Andrej730 076a6c152d fix typo 2025-02-24 15:15:54 +05:00
Andrej730 76277c35d2 Fix for 365393aa07
ahh, forgot that representation is already removed at this point
2025-02-24 15:01:00 +05:00
Thomas Krijnen a81b4a7dbb Create build_all.yml 2025-02-24 10:30:49 +01:00
Andrej730 ee8a3927b4 Fix displaying some attr types names after e8cb9e7 #6216 2025-02-24 14:20:49 +05:00
Andrej730 365393aa07 Fix #6209 after 67bac44 2025-02-24 14:01:24 +05:00
Thomas Krijnen 9289e1d0cc Try catch to keep the people happy #6176 2025-02-23 15:50:31 +01:00
Thomas Krijnen c30b5cbc08 Add std::array typemap #6137 #6191 #6196 2025-02-23 15:22:36 +01:00
Thomas Krijnen 9736345d79 Test case #6173 2025-02-23 14:46:31 +01:00
Thomas Krijnen 5599e52184 Option to retain original edges in cgal for non-boolean non-face-with-voids inputs #6173 2025-02-23 14:46:10 +01:00
Thomas Krijnen ce26af5a7e Use ProfileType in mapping #6175 2025-02-23 11:01:17 +01:00
Dion Moult 973c9e2ec9 See #1227. Implement axis updating for new wall join code. 2025-02-23 18:59:17 +11:00
Dion Moult 29a890662e See #6201. Another typing regression fix. 2025-02-23 18:30:58 +11:00
Dion Moult b42c3ba8c2 See #1227. Wall layer test script now supports atstart/atend combo test cases and materials. 2025-02-23 17:28:14 +11:00
Dion Moult a7509dbe29 See #1227. Experimental support for 3D layerset slicing. 2025-02-23 17:27:32 +11:00
Dion Moult 23158b1b7e Fix #6201. Regression in creating drawings due to typing in 67bac441ad 2025-02-23 12:02:50 +11:00
Richard Brice 8c16f394c1 Updates alignment api
Fixes mapping of vertical alignment parabola business logic to geometry. Adds creation function of h and v alignment. Adds stationing referent at start of alignment. Fixes utility functions
2025-02-22 16:16:59 -08:00
Richard Brice 12f8a1f769 Adds utility to stringize station values 2025-02-22 16:15:00 -08:00
Richard Brice 7ffd2742d6 Fixes bug mapping geometry for IfcSectionedSolidHorizontal that was introduced in 26ba761 2025-02-22 16:11:10 -08:00
Richard Brice 6429fe34ed Implements IfcHierarchyHelper.addRelatedObject for IfcRelDefinesByType 2025-02-22 16:11:06 -08:00
Jonas Frei d38f56e82d fix: bug in initialization of gltf serialiser fixed 2025-02-22 15:31:45 +01:00
Dion Moult c549dea943 See #1227. Test script for priority-aware wall layer joins. 2025-02-22 20:01:17 +11:00
Thomas Krijnen b4d0cfe0c8 Wim build script 2025-02-21 16:14:48 +01:00
Thomas Krijnen 69139dee5c Update late bound inst in ifcconvert 2025-02-21 16:14:34 +01:00
Thomas Krijnen e82cfda6a3 Update CMake 2025-02-21 16:14:01 +01:00
Thomas Krijnen 5c9ff09517 Rerun codegen 2025-02-21 16:13:39 +01:00
Thomas Krijnen fb1d78b311 Update codegen 2025-02-21 16:13:21 +01:00
Thomas Krijnen da4e86a1d5 Exploration of using rocksdb as file+instance storage 2025-02-21 16:12:16 +01:00
Andrej730 894c05e138 Fix old typo in 686f4a0 2025-02-21 18:45:23 +05:00
Andrej730 92c2fc0b7f Fix errors regarding added PredefinedType to IfcAnnotations in IFC4X3 #6200
In IFC4X3 IfcAnnotation now has PredefinedType and checking ObjectType isn't enough.
2025-02-21 18:45:23 +05:00
Andrej730 ee2fa739bb remove_deep2 - fix traversing same element twice
(I hope I don't miss anything, no tests seem to fail and performance is increased significantly) but because `subelement_queue` initiated with the `traverse` all `element`'s subelements will be traversed inside `while` loop twice - once as a part of initial queue and another time when `element` is traversed inside the loop and all those elements added to the queue again.
Now we just initiate the `queue` with the `element` and it will be traversed inside the loop like any other element.
2025-02-21 18:45:12 +05:00
Andrej730 f7efbe5924 remove_representation - optimizations
1) `do_not_delete` performs best when it's set
2) also_consider when `element` related elements go first, so there will be no need to traverse all other elements to see if they cover `element`'s inverses.
2025-02-21 18:45:11 +05:00
Andrej730 6e20ee9fea remove_deep2 - also_considered_inverses optimization
1) replaced walk with traverse(max_levels=1)
2) early return if there total_inverses == 0
3) early return if also_considered_inverses is enough to cover total_inverses
2025-02-21 18:45:11 +05:00
Andrej730 e6d3396630 typing 2025-02-21 18:45:11 +05:00
Andrej730 cf1647a451 Fix bugs in 17642ca4e9 2025-02-21 17:31:33 +05:00
Andrej730 69535c53e0 Fix typo in 4bb32b252d #6199
ahh
2025-02-21 17:31:33 +05:00
Bruno Perdigão fed8c21625 Polyline tool - Improves the preview fix for #6083 by avoiding overlapping edges. 2025-02-20 22:52:42 -03:00
Bruno Perdigão 0f92c2d26b Fix #6161
Error - cannot access local variable 'snap_point'
2025-02-20 22:21:44 -03:00
Bruno Perdigão c11060b46a Fix #6185 issue when trying to create a slab with only two points. 2025-02-20 21:13:39 -03:00
Bruno Perdigão 9f0d408e79 See #6190. Polyline tool support for XZ and YZ planes for profiles. 2025-02-20 18:46:23 -03:00
Bruno Perdigão d37baa4e0c Fix calculation for polyline tool when working with X, Y and Z. 2025-02-20 18:22:10 -03:00
Bruno Perdigão ae4f125371 Fix auto-angle snapping in polyline tools.
When locked to a plane, the mouse will be loosely locked to and angle
that is divided by 15 degrees. This was not working properly for "XZ"
and "YZ" planes.
2025-02-20 18:22:10 -03:00
Andrej730 25d8fff5fd remove_representation - small optimizations
check schema version instead of accessing attribute directly (hasattr under the hood is just doing getattr and checking whether it returns AttributeError), so one less IFC access

Similar thing with element.Item to access IFC just once.
2025-02-20 19:12:24 +05:00
Andrej730 331f491d50 typing 2025-02-20 19:12:24 +05:00
Dion Moult b19ece18c6 Fix minor regression in linking models due to new tool call. 2025-02-20 23:21:59 +11:00
Andrej730 abddc739fe Fix UI for 4bb32b252d 2025-02-20 17:19:31 +05:00
Andrej730 174f909137 Fix #6192 2025-02-20 17:01:12 +05:00
Andrej730 a826115803 Project Library UI - allow expanding libraries hierarchy even if there are no assets yet 2025-02-20 14:33:00 +05:00
Andrej730 79abbad796 Project Library UI - fix library asset count not considering assets from sublibraries
As a result if all elements were assigned to sublibrary, it was showing that library itself has 0 assets and wasn't allowing to expand to see the sublibraries.
2025-02-20 14:33:00 +05:00
Andrej730 04a20b5c80 small fix for 4bb32b252d 2025-02-20 14:33:00 +05:00
Dion Moult f4d101788d Fix insane bug when replacing element that looped through every single element. 2025-02-20 19:18:35 +11:00
Andrej730 4bb32b252d IFC Delete - add logs to system console
In some cases deletion can take ages, so there should be at least some way for user to find out how it's going.
2025-02-19 18:31:30 +05:00
Andrej730 8b92b28dfc should_clean_mesh - add description 2025-02-19 18:31:09 +05:00
Andrej730 43cc7a0304 Replace direct access to IfcStore with tool.Ifc 2025-02-19 18:31:07 +05:00
Andrej730 67bac441ad typing 2025-02-19 18:31:06 +05:00
Andrej730 6c511f6b1b Project library UI - fix missing elements added to parent libraries
Previously if there was library A and it had sublibrary B and then some element were directly assigned to library A, UI still wouldn't show this element and would show only elements assigned to the B, the last library in the hierarchy
2025-02-19 17:53:59 +05:00
Dion Moult deb0a46acb Fix #6186. Don't hide filter UI if there are no results. 2025-02-19 17:52:34 +11:00
Dion Moult ee0599e263 Fix #6136. Allow setting of custom tmp dir, useful for packaged envs like flatpak 2025-02-19 17:44:48 +11:00
Dion Moult a8efd53d6b Fix #6182. For convenience, precalculate scale value for projected CRS map unit map conversion 2025-02-19 16:41:20 +11:00
Dion Moult 02f0c92a41 Fix bug where updating the null value on an enum property would lead to infinite recursion 2025-02-19 16:39:24 +11:00
Bruno Perdigão f11e09c7d8 See #6121. Area measurement tool now uses IFC area unit. 2025-02-18 19:37:22 -03:00
Richard Brice bb1e00e474 Fixes problems mapping vertical alignment segments business logic to geometry 2025-02-18 12:43:11 -08:00
Andrej730 4efb79e472 fix missing get_spline_points in add_representation 2025-02-18 18:50:35 +05:00
Andrej730 527e0f3dbf set_element_value - fix error for Python 3.9
types.EllipsisType was added only in 3.10
2025-02-18 18:50:35 +05:00
Andrej730 8ea3142451 Fix errors removing layers/constituents after eeac0a2 2025-02-18 18:50:35 +05:00
Andrej730 a68cb74699 ifcopenshell.alignment - fix error in Python 3.9
match statement was added only in Python 3.10
2025-02-18 18:50:35 +05:00
Andrej730 17642ca4e9 typing 2025-02-18 18:50:34 +05:00
Andrej730 83a351b1c7 black . 2025-02-18 18:50:33 +05:00
Dion Moult 37baa7a57b Fix #5845. Allow non GRAPH_VIEW reference representations. Apparently it's a thing in the docs.
If anybody can explain to me how Reference is meant to be used (the
example in the docs is really ambiguous) please do :)
2025-02-18 20:45:05 +11:00
Dion Moult 7ca2c043b5 Fix #6179. Allow searching for materials in parametric object UI. 2025-02-18 20:37:50 +11:00
Dion Moult 1e3ddce5c2 Fix #6174. Accommodate invalid index maps, and also implement an early return for single colours.
A single colour index map is a waste but some IFCs have it apparently.
2025-02-18 18:39:22 +11:00
Dion Moult c79020aeab See #5888. Debugging undos is hard, so include the operator name in the event log. 2025-02-18 16:31:36 +11:00
Dion Moult 645298e9d6 See #5888. Fix crash due to improper modal undo handling. It now considers both FINISH and CANCELLED states. 2025-02-18 16:30:27 +11:00
Dion Moult ae76d3253d See #5888. Fix bug where loading type thumbnails made undo history not synced with Blender.
If a tool.Ifc.Operator updates a prop, the prop update function will
only call _after_ the operator finishes (and therefore adds an undo step
to the undo stack). If the prop update function then calls another
tool.Ifc.Operator, that will result in another "top-level" operator
call. This second operator _won't_ get added to Blender's undo history,
yet the Bonsai history / IfcOpenShell history will have another undo
step added. Yikes!

TL;DR don't call tool.Ifc.Operator from a prop update function.
2025-02-18 16:27:53 +11:00
Bruno Perdigão 693f7c5397 Fix #6119 2025-02-17 18:03:25 -03:00
Bruno Perdigão a8960957c0 Fix #6083 2025-02-17 17:09:13 -03:00
Bruno Perdigão c609aea1de Black . 2025-02-17 16:46:58 -03:00
Bruno Perdigão 247bff4075 Polyline tool initial support for custom transformations.
Still early development. Only works for XY plane.
https://imgur.com/a/qW8gMFW
2025-02-17 16:46:58 -03:00
Bruno Perdigão 5a3a032fe6 Snap - modify intersection plane origin to be related to the view location. 2025-02-17 16:46:58 -03:00
Andrej730 5d8c2f2ec2 deprecate test-safe #5192 2025-02-17 17:58:45 +05:00
Andrej730 93ee92c401 Profiles, Materials UI - indicate in UI currently edited element 2025-02-17 17:58:45 +05:00
Andrej730 8c2d71b306 Rename library references from UI
Example - https://imgur.com/a/Ez99d1N
2025-02-17 17:58:45 +05:00
Andrej730 8f1446bfa4 Library UI - rename assets and libraries from UI
Example - https://imgur.com/a/0kcQrb2
2025-02-17 17:58:45 +05:00
Andrej730 32608ff194 py -m ifcopenshell.validate to use argparse
So command would fail if no arguments provided and there would hints on how to use it.
2025-02-17 17:58:45 +05:00
Andrej730 b0fbea60ae typing 2025-02-17 17:58:44 +05:00
Dion Moult 8f261be338 See #5839. More accurately consider the relating product definition when checking for shape aspects. 2025-02-16 17:08:55 +11:00
Dion Moult 42e184c936 Fix #5839. Appending an asset now also considers shape aspects. 2025-02-16 17:08:34 +11:00
Dion Moult e0a93626a5 Fix #6038. Standardardise passing around as_posix() paths 2025-02-16 16:17:18 +11:00
Dion Moult aaa4be1a94 Fix #5691. UI tweak to show less colour, more text for usability. 2025-02-16 15:54:28 +11:00
Dion Moult 9f453d54d8 Piles should also default to vertical, just like columns 2025-02-16 15:43:03 +11:00
Dion Moult b226a79ee8 See #5888. Fix bug where polyline tools weren't part of the undo system. 2025-02-16 11:48:51 +11:00
Dion Moult 774a770c48 Purge usage of mathutils in grid API functions
The only thing left is add_representation which is Blender specific
anyway and is slowly being refactored out.
2025-02-16 08:20:59 +11:00
Dion Moult aff90e89f7 Don't burn CPU cycles for updating parametric windows 2025-02-16 07:47:03 +11:00
Dion Moult aad4dad9a7 Migrate documentation for IfcTester and make optional deps mandatory in PyPI
I don't like this, but PyPI makes it really, really hard to "discover"
optional deps and what they're used for. So it's just easier to make it
a mandatory dependency and advanced users can always strip it out. This
stops user reports about "it doesn't work out of the box I only did pip
install ifctester"
2025-02-16 07:46:22 +11:00
Dion Moult 6ac6f13018 Fix #5824. Prioritise 3D over 2D. Only then consider subcontexts.
It's unexpected in our 3D default viewing world to have 2D first over
3D.
2025-02-15 19:03:52 +11:00
Dion Moult d23cfcb2cf Fix #2981. Standard case windows can now have different materials and implement shape aspects. 2025-02-15 18:31:25 +11:00
Dion Moult 71668fbaf1 Only switch representation once when creating a door
Previously it would switch representation (and sync changes) every
single time a new representation was created (in the
replace_obj_ifc_representation function). I think this is misplaced
responsibility. The function should change the representation, but not
be responsible for switching.
2025-02-15 18:29:13 +11:00
Dion Moult 81b7f3dc30 New API function to set shape aspect constituents 2025-02-15 18:26:13 +11:00
Dion Moult a0fa861b92 Shape builder can now created triangulated face sets 2025-02-15 16:10:12 +11:00
Dion Moult a63c8e1d70 Don't burn CPU cycles recalculating the door every draw call in parametric door interface 2025-02-15 16:09:26 +11:00
Andrej730 3e1d1bf7fa Library UI - tree view
Example of tree view with libraries hierarchy - https://imgur.com/a/zPuaoPv
Example of library assignment in non-tree view - https://imgur.com/a/9kZFblj
2025-02-14 17:51:47 +05:00
Andrej730 20e1fc2618 Fix bug in get_container not passing specified ifc_class to the parent #6155 2025-02-14 17:49:51 +05:00
Andrej730 1014487d82 black . 2025-02-14 17:49:47 +05:00
Dion Moult 3832077d0f Fix recent regression where util.shape.get_vertices returns a read-only array, so you can't edit in place (e.g. for offsets) 2025-02-14 13:06:09 +11:00
Bruno Perdigão 768bf17b05 Small fix in snap. 2025-02-13 18:26:44 -03:00
Bruno Perdigão fb4ad5290f Fix mix_snap_and_axis() to ignore intersection too close from polyline.
Follows 5fe87bf5aa
2025-02-13 17:20:10 -03:00
Bruno Perdigão f20bdd0ab6 Fix issue where detected snap vector where being changed by other function.
It was probably a reference issue. Copying the vectors solved the issue.
2025-02-13 16:49:37 -03:00
Bruno Perdigão 5fe87bf5aa Modify mix_snap_and_axis() to select the snapping point closest to the last point. 2025-02-13 14:51:40 -03:00
Bruno Perdigão c23a20df84 Small fix 2025-02-13 14:51:40 -03:00
Bruno Perdigão b87cd33b12 Polyline tool a snapping system small refactor. 2025-02-13 14:51:40 -03:00
Bruno Perdigão 8acd5321b0 Fix polyline tool angle lock when using XZ and YZ plane 2025-02-13 14:51:39 -03:00
Bruno Perdigão 1165ef3f33 More refactor of the snapping system, after 7e239ac511e991fd8ccf32add878024d921db38b 2025-02-13 14:51:39 -03:00
Bruno Perdigão 2b7108a1d8 Refactor snapping points data structure. 2025-02-13 14:51:39 -03:00
Bruno Perdigão 33d9e050ec Fix #6123 2025-02-13 14:51:39 -03:00
Andrej730 b88fd964bc bim.refresh_library - add missing undo flag
It's unsafe in Blender to leave operators that edit blend data without undo flag.
2025-02-13 18:55:44 +05:00
Andrej730 0b32c89c26 use_smooth - use correct buffer length
apparently it wasn't creating any issues but still creating larger buffer than necessary
2025-02-13 18:55:44 +05:00
Andrej730 9db1783062 more numpy arrays to match expected buffer type 2025-02-13 18:55:44 +05:00
Dion Moult 2d54a48f8e Add option for door glazing material 2025-02-13 19:18:17 +11:00
Dion Moult 39a30f2577 Redesign profile edit interface to be consistent like all other list+edit button interfaces
I kept on clicking the wrong thing
2025-02-13 19:18:02 +11:00
Dion Moult 1e946fd98e Fix three small but significant typos in previous fixes.
BTW @andrej730 that optimisation is awesome. Here's a timeit:

import bpy
import numpy as np
import timeit

obj = bpy.context.active_object
verts = obj.data.vertices

def foreach_get_method():
    coords = np.empty(len(verts) * 3, dtype=np.float32)
    obj.data.vertices.foreach_get("co", coords)
    coords = coords.reshape(-1, 3)
    coords = coords.astype("d")
    coords /= 10
    return coords

def list_comprehension_method():
    coords = [v.co / 10 for v in verts]
    return coords

# Number of times each function will be executed
num_runs = 10000

t_listcomp = timeit.timeit(list_comprehension_method, number=num_runs)
t_foreach = timeit.timeit(foreach_get_method, number=num_runs)

print("foreach method: {:.6f} seconds over {} runs".format(t_foreach,
num_runs))
print("List comprehension method: {:.6f} seconds over {}
runs".format(t_listcomp, num_runs))

# foreach method: 0.088656 seconds over 10000 runs
# List comprehension method: 0.644446 seconds over 10000 runs
2025-02-13 13:07:29 +11:00
Richard Brice 79046e2970 Compute horizontal project of vertical spiral curve 2025-02-12 16:47:51 -08:00
Dion Moult f6c6cc9a1b Fix #6131. Fix bug where you could potentially create an invalid composite profile with no profiles. 2025-02-13 07:35:58 +11:00
Dion Moult af03953ef7 Apparently you couldn't edit composite profile defs. Now you can. 2025-02-13 07:35:58 +11:00
Thomas Krijnen cdcbc2ad3b Fix 2d boolean check for periodic curves #6147 2025-02-12 16:08:32 +01:00
Andrej730 ba2456ad36 Move common code to create_mesh_from_shape 2025-02-12 18:39:27 +05:00
Andrej730 299b5bcf6b Optimize loading meshes using numpy arrays
1) avoid calling geometry.xxx multiple times as each time it creates a new copy
2) use numpy arrays with correct data type, so Blender could perform buffer copy significantly reducing overhead
2025-02-12 18:39:27 +05:00
Andrej730 cb95539cb0 reuse get_cartesian_point_offset 2025-02-12 18:39:27 +05:00
Andrej730 7b78ebc0f3 Fix possible float precision issues similar to f6087613f0 2025-02-12 18:39:27 +05:00
Andrej730 f39e6ccb54 typing 2025-02-12 18:39:27 +05:00
Dion Moult 3e1710c6fc Fix bug where duplicating a curve (which would result in a new curve) didn't go in the same collection nor was linked to the right item due to a typo 2025-02-12 23:53:54 +11:00
Thomas Krijnen fac5104bd8 Take into account edge orientation also for polygonal edges #6113 2025-02-12 10:57:30 +01:00
Thomas Krijnen 51c4059771 20.04 is closing down 2025-02-12 10:31:14 +01:00
Dion Moult f24de9d384 Fix bug where you couldn't add a meshlike object in a boolean hierarchy 2025-02-12 15:36:57 +11:00
Dion Moult 1e08a71c5a Fix bug where disabling item mode didn't also quit from the boolean editing mode
These two modes should be tied together.
2025-02-12 15:31:56 +11:00
Dion Moult 24b4be3ea1 Fix bug where item positions weren't synced before changing numeric attributes 2025-02-12 08:40:21 +11:00
Dion Moult d2420c2e45 Revert "Hotfix for PyPI < python 3.11". Release made.
This reverts commit d093d80698.
2025-02-12 08:03:36 +11:00
Dion Moult d093d80698 Hotfix for PyPI < python 3.11 2025-02-12 07:53:20 +11:00
Bruno Perdigão aef972a518 Enable snapping of overlapped objects when viewport is in x-ray mode. 2025-02-11 12:31:24 -03:00
Bruno Perdigão 06c6fa5dff Fix #6064
Slabs offset are now measured perpendicularly.
2025-02-11 10:33:29 -03:00
Andrej730 f6087613f0 add_representation - use numpy arrays for calculations that include model offset 2025-02-11 18:14:45 +05:00
Andrej730 45e36590eb Add paste buffer to outliner context menu #6139 2025-02-11 18:14:45 +05:00
Andrej730 7f37acfd38 Fix typo 2025-02-11 18:14:44 +05:00
Andrej730 de2329c352 bim.override_paste_buffer - add description 2025-02-11 18:14:44 +05:00
Andrej730 09abf0c7ab bim.override_paste_buffer - fix issue when ctrl-v might unlink currently selected ifc elements 2025-02-11 18:14:44 +05:00
Andrej730 77c2e626b3 Add info message on paste
Original Blender `view3d.pastebuffer` had an info missing and it wasn't displayed in UI since it's coming from suboperator. New info message also mentions that objects were unlinked from IFC
2025-02-11 18:14:44 +05:00
Andrej730 9ea6a1fc75 typing 2025-02-11 18:14:44 +05:00
Andrej730 5b7964f04c black . 2025-02-11 18:14:44 +05:00
Andrej730 57d7d83ebb Fix Python <3.10 support #6141 2025-02-11 16:50:07 +05:00
tim 2f4c3de92d New icons
add_from_closed_loop and add_from_perimeter
2025-02-11 21:32:03 +11:00
tim 136270b566 IFC icon in Scene dropdown
custom white mode support for IFC icon in scene drop down menu
2025-02-11 21:31:15 +11:00
tim 557a5f03d2 Icon mode for Open-Recent-IFC-Project
Added UIData class with function for storing icon color mode. Open Recent IFC Project icons now supports blender dark, blender light, and custom "white" themes
2025-02-11 21:31:15 +11:00
tim 4e1ff8ea6a Icon mode for IFC Modes
Added UIData class with function for storing icon color mode. IFC Mode dropdown now supports blender dark, blender light, and custom "white" themes
2025-02-11 21:31:15 +11:00
tim 08680d8726 Geographic Element Tool Icon
My tree was missing
2025-02-11 21:31:15 +11:00
Dion Moult 53cf1ee0a1 Fix UI bug where changing the profile name didn't result in the UI being refreshed 2025-02-11 20:03:50 +11:00
Dion Moult ddf7d1b0b9 Change default behaviour of remove_representation not to remove named profiles
I guess this is a Bonsaism but it makes sense as named profiles are
significant, and it isn't the first time materials and profiles have
been treated as "rooted" in a sense. It's also annoying to keep on
having my profile library drop off when I'm just switching profiles.
2025-02-11 20:01:19 +11:00
Dion Moult eeac0a2e30 Fix bug where removing material set items weren't consistent in how they purged materials and profiles
Previously remove_profile would purge unused materials and profiles, but
remove_layer and remove_constituent wouldn't. This was as subtle
inconsitency. Now everything by default consistently retains materials
and profiles, and has options to change this default.
2025-02-11 20:00:17 +11:00
Dion Moult 1f83b4f7a0 Fix bug where non-columns would still behave like columns if they were profiled which is unintuitive
On second thoughts only columns should go up, everything else should go
wherever you click to. Not really a bug, just an unexpected default.
2025-02-11 18:54:45 +11:00
Dion Moult ada8cc90ef Very minor docs rst syntax fix 2025-02-11 18:53:32 +11:00
Andrej730 21562d7e7d Add distinguishable name for arrays constraints 2025-02-11 12:06:40 +05:00
Andrej730 77f9dbf4f0 small fix for 4c0a7e1ca9
mentioned in #6129
2025-02-10 19:11:13 +05:00
Andrej730 875dd37579 Save Blender preferences on Blender Restart #6095 2025-02-10 17:41:28 +05:00
Andrej730 e1c49ad317 Fix error adding transom to parametric door #6129 2025-02-10 16:47:14 +05:00
Andrej730 8e9d4be55d Improve error logs for failing profiles #6131 2025-02-10 16:47:14 +05:00
Andrej730 65d65972ac Fix occurrence name function prop missing after ce8bdff 2025-02-10 16:47:14 +05:00
Andrej730 b2d66bbb89 Fix bug where selecting element / element type without representation wasn't updating bim tools active type 2025-02-10 16:47:13 +05:00
Andrej730 d8a250f153 Update Annotation Tool types when selecting elements #6134
Similar to other BIM Tools

Update handler.py
2025-02-10 16:47:13 +05:00
Andrej730 4c0a7e1ca9 typing 2025-02-10 16:47:13 +05:00
Dion Moult 11c6b55f7c Revise the modern COBie 2.4 implementation to also allow PointOfContact/WarrantyPeriod
Legacy COBie 2.4 allowed this but not sure why it dropped off.
2025-02-10 17:26:51 +11:00
Dion Moult 1d2214efd9 Fix IfcOpenShell-Python on Python 3.10
Elipsis is not allowed for generic typing
2025-02-10 17:26:03 +11:00
Dion Moult cb027c80f9 Fix dev install script - brick schema directory changed 2025-02-10 10:50:25 +11:00
Dion Moult 44c7c6d14e Bump to 0.8.2 2025-02-09 16:45:44 +11:00
Dion Moult 3e7f244100 Drop Windows 32bit support for this release as it isn't built. We can restore it in the future if needed. 2025-02-09 14:59:15 +11:00
Dion Moult da1c92c42b Bump IOS
Previous one didn't have the full matrix, so we can't release with it
2025-02-09 14:53:32 +11:00
Dion Moult 17682498da Minor UI cleanup for reorganised visibility buttons 2025-02-09 14:53:09 +11:00
Dion Moult 5db6738ac2 Test to see if this has any impact on reloading the add-on. 2025-02-08 19:27:34 +11:00
Dion Moult eabdb5d281 Consolidate selection and visibility tools in the spatial manager into a single location with a single function for filtering
There were a number of inconsistencies between the modes and how keyword
filtering affected results. This should resolve it.
2025-02-08 16:38:29 +11:00
Andrej730 59dd105e99 fix get_applicable_entities / get_applicable_types missing schema #6108 2025-02-08 07:54:49 +11:00
Andrej730 a28070afef Hide Edit Profile for material sets without profiles #6103 2025-02-08 07:54:49 +11:00
Andrej730 689e2718e5 Fix conversion to profile for breps #6103 2025-02-08 07:54:49 +11:00
Andrej730 a2ab3972c8 bim.update_representation - add note about about material unassignment 2025-02-08 07:54:49 +11:00
Andrej730 667223da8e typing 2025-02-08 07:54:49 +11:00
tim 1e58a517a0 Dark mode extend icon (#6112)
dm_extend.png icon was missing

Co-authored-by: tim <tjrhyder@gmail.com>
2025-02-08 07:51:33 +11:00
Dion Moult fcee54c572 Fix regression when removing an active representation.
Some tests removed since they no longer make sense with the new item
editing mode.
2025-02-08 00:21:38 +11:00
Dion Moult 889a9e3891 Tweak failing test to now allow assigning elements to scaled multi-user objects
Previously this was not allowed, but I don't see why not
2025-02-08 00:20:25 +11:00
Dion Moult 7bc1992963 Fix regression where adding a new occurrence should not change your active context back to body if you've switched it. 2025-02-07 23:52:55 +11:00
Dion Moult 49c3a55456 Fix failing pset_template tests. Regression in 5bd24b276 for editing pset template properties. 2025-02-07 23:33:33 +11:00
Dion Moult f11d79f8c1 Fix cost and drawing feature tests 2025-02-07 22:40:17 +11:00
Dion Moult 2cc4f96b7f Fix failing project feature tests. Fix regression where appending an asset might append a named style twice. 2025-02-07 22:02:44 +11:00
Dion Moult bb46a1659d Fix light and georeference feature tests
Not setting the year meant our date calc tests would fail every year :)
2025-02-07 17:19:27 +11:00
Dion Moult f09002c7e2 Fix regression in caeabe2 where actor data didn't load. 2025-02-07 16:58:45 +11:00
Dion Moult 9f75a14204 Update issue templates 2025-02-07 13:31:59 +11:00
Dion Moult c40d21d945 Fix #6106. True north must always be 2D. 2025-02-07 13:19:33 +11:00
Dion Moult 0d3245102f Fix remaining failing tool tests 2025-02-07 13:12:02 +11:00
Dion Moult 3aa4fa580b Fix regression where you couldn't upgrade schema of IFCs with invalid headers 2025-02-07 12:38:52 +11:00
Dion Moult 4c255cca43 Fix failing model tests and regression 0899a2a8 where switching geometry can invalidate old meshes
The fix in 0899a2a8 ensured that when you switched geometry, all other
elements (sharing the same type or representation) would also switch
alongside it. However it would lead to mesh invalidation which broke
some assumptions in the style code. The style code also repeated a lot
of the logic of switch representation (i.e. finding shared
representations) so this seems simpler.

In general the whole representation part of the code is messy and
hopefully over time it'll get better.
2025-02-07 12:35:08 +11:00
Dion Moult e603ebed04 Fix bug where loading a types ignored style assigned via a material
For occurrences, the iterator would populate ios_materials if there is a
material / style associated with it. However, for types we do
create_shape to the representation directly, so we need to do the
material / style check manually.
2025-02-07 12:29:17 +11:00
Andrej730 38e6f09c91 Fix #6096 2025-02-06 18:26:14 +05:00
Andrej730 6473fa4b67 Deprecate workaround for universal wheels
Tested on Blender 4.3.2 and universal wheels are now supported without this hack, see https://projects.blender.org/blender/blender/issues/125091
2025-02-06 18:26:14 +05:00
Andrej730 38adaf4d18 Fix running critical tests in ci 2025-02-06 18:26:14 +05:00
Dion Moult b7fb5c90bc Continue fixing failing tool tests. Fix regression where UV coordinates might have the wrong order. 2025-02-06 17:22:54 +11:00
Dion Moult 23efb09ba6 Add links to Linux packages 2025-02-06 09:46:59 +11:00
Dion Moult cf6280b928 Rename BlenderBIM to Bonsai in a few more spots 2025-02-06 09:24:25 +11:00
Andrej730 c16894cabf Fix bug in 124c028 saving defined unit as defining 2025-02-05 18:27:27 +05:00
Andrej730 5df297c23c Fix failing facet test after 124c028 2025-02-05 18:27:27 +05:00
Andrej730 b2b3a83463 ci - fix missing ifctester for tests 2025-02-05 18:27:27 +05:00
Andrej730 4b0b0191ba Test enabling/disabling Bonsai before uploading to unstable repo #6075 2025-02-05 18:27:27 +05:00
Dion Moult a92306d413 Fix #6097. Be more defensive against selection state when moving objects into new containers. 2025-02-05 20:28:29 +11:00
Dion Moult f457ce8270 Fix failing unit/system/geometry tool tests. Fix regression where object scales weren't applied in the new add element approach. 2025-02-05 18:50:37 +11:00
Dion Moult 590c2e120c Fix failing drawing tool tests. Also consolidate relative paths using tool.Ifc.get_uri.
The same issue of handling relative paths, doing as_posix, checking
drives, etc was solved again and again in slightly different ways. This
centralises it.
2025-02-05 17:17:09 +11:00
Dion Moult 13746eb55e Fix CI job a unique name so it can be used as a requirement for PRs
It seems as though the UI only selects by job name and we use the name
"build" everywhere.
2025-02-05 14:28:42 +11:00
Dion Moult 55b9c7d6bf Fix failing ifcpatch tests 2025-02-05 14:10:41 +11:00
Dion Moult e86624873b Fix segfault from editing a IFC2X3 georeferencing pset with a null map unit.
Doing createIfcIdentifier(None) segfaults.
2025-02-05 14:10:41 +11:00
Andrej730 ae11f205f3 Fix missing unregister for some tools #6075
PileTool, PlateTool, RampFlightTool, StairFlightTool were never unregistered leading to issues on Bonsai update
2025-02-04 17:37:57 +05:00
Andrej730 457f9c6aef Select pset template for the pset in pset template ui for editing
Example - https://imgur.com/a/h46Ewhk
2025-02-04 17:37:56 +05:00
Andrej730 cc88bd4a9d Fix issue adding project library if other library was already in edit 2025-02-04 17:37:56 +05:00
Andrej730 8f74f4d9f1 Change IfcProjectLibrary's parent library from UI
Example - https://imgur.com/a/4PZr0px
It's very clunky and mainly exposed just to be available in some way, it will all make more sense when we display project libraries as trees in project library ui.
2025-02-04 17:37:56 +05:00
Andrej730 56f0c19a85 append_asset to support IfcPresentationLayerAssignment #6023 2025-02-04 17:37:56 +05:00
Andrej730 76747bdf5a Recent files - dim button for filepaths that do not exist
Example - https://i.imgur.com/dwEBtG6.png
2025-02-04 17:37:56 +05:00
Andrej730 a4de196259 space module operators - remove unnecessary ifc operators 2025-02-04 17:37:56 +05:00
Andrej730 049b157c8a bim.toggle_space_visibility - description 2025-02-04 17:37:56 +05:00
Andrej730 7ec1bc5272 Fix error toggling boundary decorations after one was removed #6088 2025-02-04 17:37:56 +05:00
Andrej730 d4f44cb0a1 typing 2025-02-04 17:37:55 +05:00
Andrej730 ecd7282150 black . 2025-02-04 17:37:55 +05:00
Dion Moult bd2c3a0ca1 Continue fixing tool tests.
Just chipping away at it give me time.
2025-02-04 17:04:29 +11:00
Louis Trümpler f0f2dda40e Add assign constituent fractions recipe (#5979)
* Add AssignConstituentFractions recipe

* license, units & added context description

* removed src, using better unit handling and several other small improvements based on feedback
2025-02-04 14:23:08 +11:00
Dion Moult 0c41f0c32c Fix #6094. Fix failing core tests. 2025-02-04 13:36:28 +11:00
Dion Moult a35ef32ee6 Forgot to commit docs for serialiser settings 2025-02-04 07:35:34 +11:00
Andrej730 00eff23b74 Rename bim_boundary_properties -> BIMBoundaryProperties for consistency 2025-02-03 17:43:01 +05:00
Andrej730 88af3eb1a6 Explicitly enable Bonsai in the second Blender instance #6092
To cover cases when Bonsai was enabled in current Blender sesssion and user prefs are not saved.
2025-02-03 17:28:48 +05:00
Andrej730 a48d774337 typing 2025-02-03 17:28:47 +05:00
Andrej730 734cd47ea5 black . 2025-02-03 17:28:47 +05:00
Dion Moult 5159a69225 Fix #6070. Button was pointing to the wrong function to confirm/cancel editing an extrusion profile.
Probably a copy paste mistake during the UI refactor.
2025-02-03 23:07:16 +11:00
Dion Moult 2f2072cf7f Fix #6080. Bug where renaming introduced suffixes during bulk reassignment of classes. 2025-02-03 23:00:04 +11:00
Andrej730 8c47f2a72f Fix issue infinitely adding new ports on bim.show_ports #6074 2025-02-03 16:37:51 +05:00
Andrej730 a6632167be system module operators - remove unnecessary ifc operator 2025-02-03 16:37:46 +05:00
Andrej730 12d1fd221d Clean up orphaned curves creating new elevation/section annotations 2025-02-03 13:45:54 +05:00
Andrej730 10642618e5 Fix error entering item mode for elevation/section annotations #6081 2025-02-03 13:45:54 +05:00
Andrej730 be4f6ac222 small fix for 3eaf4367ad 2025-02-03 12:45:05 +05:00
Andrej730 3eaf4367ad Fix #6082 2025-02-03 12:40:36 +05:00
Andrej730 305b4c27b5 fix a typo 2025-02-03 11:45:41 +05:00
Andrej730 b56f2d7514 black . - ignore simple_spf submodule 2025-02-03 11:43:08 +05:00
Andrej730 cf026dccc2 bump ios build #5987 2025-02-03 11:43:08 +05:00
Dion Moult c5185aaf54 Fix #6085. Failing unit test. 2025-02-03 16:33:04 +11:00
Dion Moult 50ed756353 Found out layer names don't exist in IFC2X3 that's incredible 2025-02-03 16:04:56 +11:00
tim 0f0578e1c5 Geographic Element Tool (#6089)
New icon tool for adding landscape elements

Co-authored-by: tim <tjrhyder@gmail.com>
2025-02-03 15:38:10 +11:00
Herlianto 0d086fda33 delete unused import (#6093) 2025-02-03 15:35:55 +11:00
Dion Moult f3f7510b48 Fix #6087. (again)
I don't know why depress was used. To make it colour in blue?
2025-02-03 12:36:18 +11:00
Thomas Krijnen b2a4529904 Don't fail on empty build deps cache #6054 2025-02-02 10:00:56 +01:00
Thomas Krijnen 7de50ff0c5 Don't fail on empty build deps cache #6054 2025-02-02 09:46:13 +01:00
Thomas Krijnen 7b0a7e51bb Try 'Build IfcOpenShell Linux ARM' workflow #6054 2025-02-02 09:35:15 +01:00
Thomas Krijnen 507d13363d delete obsolete files 2025-02-02 09:21:01 +01:00
Thomas Krijnen 9713b06d75 delete obsolete files 2025-02-02 09:01:24 +01:00
Dion Moult be6a4de6f0 Fix #6087. High CPU usage due to function in draw call.
I assume this is the problem.
2025-02-02 17:05:56 +11:00
Dion Moult ea85a4247a Fix #6079. Regression in editing space boundaries due to leftover line in commit. 2025-02-01 16:42:06 +11:00
tim f377d794a0 Unify icon modes to work with default Blender Light theme (#6078)
Force the color of the icons in the Properties-Scene tab to match Regular Text
Use the icon display mode function to detect where to use dm_ifc.png or lm_ifc.png

Co-authored-by: tim <tjrhyder@gmail.com>
2025-02-01 16:18:48 +11:00
tim 16d077f1cb Rename dm_IFC.png to dm_ifc.png (#6076)
renaming to lowercase to match lm_ifc presidents.
2025-02-01 16:18:26 +11:00
Dion Moult 3f62f72f35 See #2981. First attempt at having the door generator also do shape aspects, material constituents, and styles all simultaneously 2025-02-01 16:15:58 +11:00
Dion Moult dc79e9e005 More utility functions to jump between representations, styles, and shape aspects
It's a bit uncertain where these belong best, we'll find out over time
2025-02-01 16:11:37 +11:00
Dion Moult d25f57ec40 See #2981. Adding a door representation now also adds associated shape aspects
It doesn't add materials though, that's a separate responsibility right
now
2025-02-01 16:02:57 +11:00
Dion Moult 9f93779ac2 Adding set items can now specify a name at creation for convenience 2025-02-01 16:00:43 +11:00
Dion Moult 8436817408 Update incorrect docs and raise suspicion about how shape aspect styles are assigned 2025-02-01 15:55:34 +11:00
Dion Moult 1a98504328 Fix bug and typo where getting shape aspects for non-geometric types (e.g. walls) would fail
This caused an error when updating a style of a material used in a wall
type
2025-02-01 15:54:57 +11:00
Bruno Postle 1680c3135a Update to latest ifcmerge on Windows
Handle missing IfcRelationship - eg. if all sofas are deleted the
IfcRelDefinesByType is deleted too, but we reincarnate as an empty list
so it can be merged.

Sanity check internal graph - If an entity is deleted in one branch but
has a new usage in another branch, merging would break the graph leaving
a dangling reference. ie.  now you can't delete types, materials etc..
in one branch while using them for new objects in another and still
expect the merge to succeed.
2025-01-31 15:05:34 +00:00
Dion Moult 79e4ba5b19 New usecase to add shape aspect with tests 2025-02-01 00:46:00 +11:00
Andrej730 d6d1f7714f black . to ignore ifcconvert's cityjson submodule 2025-01-31 18:21:23 +05:00
Andrej730 68543c7f05 Simplify types used in debug module express methods #6071 2025-01-31 18:21:14 +05:00
Andrej730 135655f8a0 bim.add_pset - remove unnecessary ifc operator 2025-01-31 17:12:32 +05:00
Andrej730 df49356104 Support adding a new IfcProjectLibrary from UI
Example - https://imgur.com/a/NUQkvHf
2025-01-31 17:12:31 +05:00
Andrej730 04bcf8e2a9 Fix error switching between libraries 2025-01-31 17:12:31 +05:00
Andrej730 9f17ec5bf5 Support editing project library attributes
Example - https://imgur.com/a/MFtLDlh
2025-01-31 17:12:31 +05:00
Andrej730 67aa8f1413 Update project library enum on changing library file 2025-01-31 17:12:31 +05:00
Andrej730 8469d10c85 Project library UI - make filter optional and allow assigning to different libraries 2025-01-31 17:12:31 +05:00
Andrej730 87cbc66c99 typing 2025-01-31 17:12:31 +05:00
Andrej730 c2ae3dcb08 append_asset - extend existing rels matching them by project guid
Mentioned in #6039
2025-01-31 17:12:31 +05:00
Andrej730 089f15a5cc fix a typo 2025-01-31 15:06:37 +05:00
Thomas Krijnen 919df92888 Virtual inheritance configurable at codegen time 2025-01-30 13:12:42 +01:00
Andrej730 553872ced2 append_asset - fix issue appending elements that have as_entity() -> None #6037 #6039 2025-01-30 16:06:19 +05:00
Andrej730 bc33cb6391 append_asset - remove unnecessary partial 2025-01-30 16:06:19 +05:00
Dion Moult d010d4e1b5 Fix #6067. Bug where adding a door ignored the Z offset option. 2025-01-30 19:52:33 +11:00
Andrej730 af29f264a8 Show info message when trying to edit presentation layer and project has no layers #6051
Instead of the error.
Also fix a bug with update callback was attached to the wrong prop.
2025-01-30 13:42:01 +05:00
Dion Moult 2570864f58 Fix #6066. Bug where spatial manager didn't toggle visibility correctly for spaces.
Previously I was only toggling Blender collections which is an
optimisation for large projects but will result in incorrect behaviour
if things aren't in the collection you think they're in. So for now it's
slower but more correct. We can optimise it later.
2025-01-30 19:17:12 +11:00
Dion Moult 2ad48aba36 Fix bug where download CSV icon would disappear on web interface after refreshing table data 2025-01-30 18:55:05 +11:00
Dion Moult 4e17a2d6de The shape builder can now create half space solids for convenience 2025-01-30 18:44:38 +11:00
Dion Moult eaaec4a12d Fix ridiculous bug where util.element.get_container didn't consider all parents and therefore didn't correctly contain feature elements in the spatial hierarchy 2025-01-30 18:44:27 +11:00
Dion Moult abec29af7f Fix attribute tests. Turns out latest pytest-bdd is stricter when parsing feature files and fails when encountering our blank demo tutorial file. 2025-01-30 17:59:13 +11:00
Dion Moult 838e22d27c Fix #6060. Updating long name in spatial manager now also edits attribute for convenience.
Editing attributes now also refreshes the spatial manager (i.e. vice
versa), and so does bulk attribute copying.
2025-01-30 17:47:29 +11:00
Dion Moult 8f78fe56de Prevent copying globalids to selected objects as it makes no sense 2025-01-30 17:46:23 +11:00
Andrej730 e435863500 Fix missing pset templates after 5e93097 #6049 2025-01-30 11:30:52 +05:00
Dion Moult 15d43e9166 Fix bug where spatial object may not exist when renaming from the spatial tree (e.g. partial loads), and also refresh UI (to see updated attributes) 2025-01-30 17:07:57 +11:00
Dion Moult 1768026891 Fix #5854. Update docs with new IOS v0.8 settings. 2025-01-30 15:32:14 +11:00
sboddy d6443e46f6 Update debugging guide to deal with MS's Marketplace changes. (#6035) 2025-01-30 08:08:28 +11:00
tim 77722fcf89 New Tools (#5983)
* New tools wip

- New icons: Opening, Furniture, Roof, Railing
- New groupings
- New tools: Opening tools (not working), Furniture (needs default), Roof
- New defaults: Railing, Roof (Hip Roof doesn't work)

* WIP on (no branch)

* Railing icon fixed

* New icons added, old icons tweaked

* Working version

* Just updating some wip - not ready for review yet

* Tool icon update

- New: pile, plate, ramp, ramp flight, stair, stair flight, roof, railing, footing, member, curtain wall
- Updated: wall, window, door, cable
- Expanded tool descriptions to include predefined types
- Added relevant default types
- Revised tool grouping

* IfcStairType and IfcRampType icon's removed

* Curtain wall removed

---------

Co-authored-by: tim <tjrhyder@gmail.com>
2025-01-30 08:07:54 +11:00
Thomas Krijnen 241329325d Update ci.yml - 22.04 2025-01-29 20:10:19 +01:00
Bruno Perdigão 2e70544bb8 Adjust offset in "change_extrusion_x_angle" to maintain position relative to the slab's top face. 2025-01-29 14:01:23 -03:00
Bruno Perdigão 03267a441a Fix #6058 2025-01-29 14:01:23 -03:00
Kipre 4bee713455 Fix transform matrix computation in Axis2Placement3D 2025-01-29 15:37:59 +01:00
Andrej730 1d6e560b4f Change entire material category name from UI #6061
Example - https://imgur.com/a/LJUkC2l
2025-01-29 18:16:05 +05:00
Andrej730 71a6ad8cb0 Display assets count for the loaded library
Example - https://imgur.com/a/yZTkZgu
2025-01-29 18:16:05 +05:00
Andrej730 83d7cda26b Select IfcProjectLibrary to display for the loaded library
Example - https://imgur.com/a/14LOL0J
2025-01-29 18:16:05 +05:00
Andrej730 8bddde49a2 Hide assign/unassign library declaration button for elements that cannot be declared
E.g. IfcMaterials, IfcProfileDefs
2025-01-29 18:16:05 +05:00
Andrej730 909a7ad7a2 Project libraries UI - use cached project library data
instead of accessing IFC directly on every draw call
2025-01-29 18:16:05 +05:00
Andrej730 c9da643fe1 typing 2025-01-29 18:16:04 +05:00
Andrej730 0599138bca Fix #6050 after 5e93097 2025-01-29 17:25:30 +05:00
Andrej730 871710a0aa Fix remove_representation error #6059
After to_delete was explicitly added as an attribute to ifcopenshell.file (previously it was kind of hacky assigned during batch remove).
2025-01-29 16:02:50 +05:00
Andrej730 85e0fa9147 assign/unassign layer - mention representations 2025-01-29 16:02:50 +05:00
Dion Moult 5d3dc84556 Tabbing now works consistently on all elements including those with usage
This means that seeing the extrusion type graphically is now possible,
adding booleans is now through a consistent interface. It's still
possible to immediately edit the axis via Alt-E and profile via Shift-E.
This helps consoliate code too.
2025-01-29 21:38:01 +11:00
Dion Moult a9abf1e993 Forgot to remove these mentions
Still need to update tests
2025-01-29 21:32:26 +11:00
Dion Moult c2b00e09cf Remove elements menu and purge the "potential" openings feature as this is now properly integrated in the new element menu 2025-01-29 19:55:42 +11:00
Dion Moult 121af475a7 The collector should be responsible for handling global fixed display settings too perhaps 2025-01-29 19:54:25 +11:00
Dion Moult 424cd96fef Add warning that api.run is deprecated 2025-01-29 19:53:50 +11:00
Bruno Postle 84392f1457 Typo: strucutural > structural 2025-01-28 21:20:20 +00:00
raj-open 1b3b74127a guid-stdlibs > v0.8.0: linting 2025-01-28 21:46:34 +01:00
raj-open 85308133e2 guid-stdlibs > v0.8.0: added unit tests
NOTE: added in prefix-cases post PR review
2025-01-28 21:46:34 +01:00
raj-open 64a027cfba guid-stdlibs > v0.8.0: linting 2025-01-28 21:46:34 +01:00
raj-open 285c4bff67 guid-stdlibs > v0.8.0: used underlying base64-to-hex to speed up computations
NOTE: The conversions remain exactly as before. But by using standard libraries for conversion, we clean up computations.
2025-01-28 21:46:34 +01:00
Bruno Perdigão c2c2d2d8f3 Revert 87c7309724. I misunderstood the expected behavior. 2025-01-28 17:37:20 -03:00
Bruno Perdigão 87c7309724 See #5938. Fix bug where x_angle where changing the wall thickness. 2025-01-28 16:28:23 -03:00
Bruno Perdigão d9903e93f2 See #5938. This commit starts fixing this issue by:
- Fix wall decorator with obtuse angles.
- Preventing slabs from using obtuse angles, for now.
2025-01-28 16:10:17 -03:00
Andrej730 ab0549daa6 Support editing representation's presentation layers from UI
Example - https://imgur.com/a/QgtSUoq
2025-01-28 17:22:26 +05:00
Andrej730 f43e33b969 apped_asset - fix passed removed elements after 3ffc0bc #6044
Before 3ffc0bc checking identities were handled by file.add but now it's handled append_asset, therefore should be a way to clean removed entities.
2025-01-28 17:22:26 +05:00
Andrej730 cc014e9792 Change message when no object queries in a linked model
to give a hint for new users
2025-01-28 17:22:26 +05:00
Andrej730 c0306fc729 typing 2025-01-28 17:22:26 +05:00
Andrej730 7b94a8d1f5 black . 2025-01-28 17:22:25 +05:00
Andrej730 7bfe844d53 Rename void to feature in code 03bfd828e2 2025-01-28 15:23:43 +05:00
Andrej730 23648ef221 remove duplicated add_feature method
It was moved to feature module in 03bfd828e2
2025-01-28 15:23:43 +05:00
Dion Moult 693244e20e Fix bug in SetFalseOrigin which incorrectly handled z height and also add ability to handle non-mapconversion based transformations.
I can't believe I accidentally left out the minus sign. The ability to
handle simple remapping of location A --> B is useful for software that
doesn't support map conversion properly.
2025-01-28 17:33:15 +11:00
Dion Moult 03bfd828e2 See #5919. API now has support for features, not just openings. Void module is renamed to feature. 2025-01-28 14:18:17 +11:00
Dion Moult 5300f4c78f Fix failing tests 2025-01-28 10:54:37 +11:00
Dion Moult 8e29e7cdee Be a bit more forgiving in calculate unit scale to not glitch out on models with no project.
It's technically invalid but useful for small snippets.
2025-01-28 10:46:24 +11:00
Dion Moult 6e0954e855 Purge constants file that came from PR. 2025-01-28 10:45:54 +11:00
Dion Moult 4d052ba864 Fix bug where decorator had errors if the 3D location was outside the 2D window.
Checking for none for `location_3d_to_region_2d` should always be done.
2025-01-28 10:33:08 +11:00
Bruno Perdigão 562c32b96e Fix issue where area measurement lines where not showing correctly. 2025-01-27 18:58:02 -03:00
Bruno Perdigão 818ad536af Small fix after a4a52d6576 2025-01-27 18:49:19 -03:00
Bruno Perdigão a4a52d6576 Make slab's editing profile to horizontal orientation when x_angle is present. 2025-01-27 15:16:22 -03:00
Bruno Perdigão 47b2a00614 Fix Z location for wall axis decorator 2025-01-27 10:59:21 -03:00
Andrej730 ff4d3adf0b Select Layer In Layers UI
Example - https://imgur.com/a/bXctIxc
2025-01-27 17:41:32 +05:00
Andrej730 13a182cd95 Representation Items UI - support editing layers
Example - https://imgur.com/a/3fn051N
2025-01-27 17:41:31 +05:00
Andrej730 56af23b89f revert possible empty layer names in ui 2025-01-27 17:41:31 +05:00
Andrej730 605cf8d99a Styles UI - add indicator for currently edited style
Example - https://i.imgur.com/YT0a63S.png
2025-01-27 17:41:31 +05:00
Andrej730 744487c786 fix test_element after 7b62b03 2025-01-27 17:41:31 +05:00
Andrej730 b735ce74ad Bonsai - Select By Profile operator
Location - https://imgur.com/a/gInY1sl
2025-01-27 17:41:31 +05:00
Andrej730 5fe77b659a ifcopenshell.util.element.get_elements_by_profile 2025-01-27 17:41:31 +05:00
Andrej730 e71a220f21 typing 2025-01-27 17:41:30 +05:00
Andrej730 5bd24b2760 Enable pset template prop editing on adding a new one #6019 2025-01-27 17:41:30 +05:00
Andrej730 14a792a1e7 Enable pset template editing on adding a new one #6019 2025-01-27 17:41:30 +05:00
Andrej730 7b4fa6b5c0 black . 2025-01-27 17:41:30 +05:00
Gorgious56 378086ac7b Fix bug when trying to delete an opening object that was already deleted 2025-01-27 12:56:27 +01:00
Dion Moult c4dbbe85fc Fix bug where library wasn't actually removed when unlinking an IFC.
Previously the collection and scene object was removed, but this is
obviously not sufficient since the bpy.data.library still exists (which
meant that if you relinked it, regardless of your cache setting, it'd
just load the existing Blender file which is completely useless).
2025-01-27 20:41:26 +11:00
Dion Moult 559db259a3 See #6030. Add isolate, show, and hide operators to group manager. 2025-01-27 17:14:13 +11:00
Dion Moult 3582dc43d9 Add tests for PR #5257 (using cache for fetching units) 2025-01-27 14:40:15 +11:00
Dion Moult c0aaebcbe9 Fix bug where assigning units didn't necessarily assign to the project, and also didn't overwrite existing units of the same type. 2025-01-27 14:23:02 +11:00
Dion Moult 4af6c24314 Completely untested refactor of #5257.
Removes dependency of file to util (util should depend on file, not vice
versa). Removes auxiliary method.
2025-01-26 21:11:11 +11:00
Dion Moult ecd72912aa Purge constants from PR #5257.
I'm not sure I agree here, considering that types are dynamic based on
schema version.
2025-01-26 19:07:02 +11:00
Raj 124c02897c Feature faster unit method ---> Main (#5257)
* feature_faster_unit_method > main: added constants

* feature_faster_unit_method > main: extended `file` class to dynamically save unit information

* feature_faster_unit_method > main: refactored `get_property_unit` method

1. split out case that returns the wrong type (dictionary of units) into its own method

2. cleaned up (but preserved) logic

3. refactored common part of all cases (the method which prioritises unit then value-entity then measure_class)

---------

Co-authored-by: raj-open <raj-open@users.noreply.github.com>
Co-authored-by: Dion Moult <dion@thinkmoult.com>
2025-01-26 19:04:49 +11:00
Raj 3b1e893d34 Linting-Workflow ---> v0.8.0 | Make wf only fail on syntax errors instead of unformatted code (#6041)
* linting-workflow > v0.8.0: make QA only throw warning instead of error on unprettified code with no syntax errors

Without a Linting policy, the workflow should only fail if code base contains syntax errors.

* linting-workflow > v0.8.0: better logging

* linting-workflow > v0.8.0: changed instruction to notice-type

---------

Co-authored-by: raj-open <raj-open@users.noreply.github.com>
2025-01-26 18:54:46 +11:00
Bruno Perdigão 2b1a59a4f8 Refactor how offset and direction sense interact for wall and slabs. 2025-01-25 16:05:04 -03:00
Dion Moult c49ca699eb Forgot to commit new feature tool 2025-01-25 21:39:54 +11:00
Dion Moult 75c6505121 See #5919. You can now add openings through "Add Element" just like everything else.
This means that openings can (and default to) start with extrusions. It
also starts to open up the possibility to add other types of feature
elements. Still really incomplete.
2025-01-25 20:43:08 +11:00
Dion Moult 2c531501c3 Fix #5614. Fix bug where removing an object that had voids showing didn't also remove the voids. 2025-01-25 16:36:57 +11:00
Dion Moult eab527e7a2 Fix #6033. Add tools for generate slab from wall and vice versa in the toolbox. Still needs a nice icon. 2025-01-25 15:59:11 +11:00
Dion Moult 83368d7ee1 Fix #6014. Incorrect units used for position matrix when detecting profiles. Fix by @brunoperdigao 2025-01-25 15:20:01 +11:00
Dion Moult 38835a4092 See #6030. You can now select elements in groups recursively. 2025-01-25 14:11:42 +11:00
Dion Moult a2a4da596f Fix #6030. Consolidate group management into single UI and allow for bulk assign / unassign. 2025-01-25 14:01:56 +11:00
Bruno Perdigão 5fbb496818 Improve wall axis decorator.
- Blue: base
- White: side
- Green: reference
- Arrow: direction
See: https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcMaterialLayerSetUsage.htm
2025-01-24 16:46:03 -03:00
Bruno Perdigão 8b3bf8200f Add wall and slab regeneration when editing layer set usage, after 755d178b6b 2025-01-24 16:36:24 -03:00
Andrej730 fbab13339c set_material_name to prevent triggering name callback if it's not necessary 2025-01-24 18:45:14 +05:00
Andrej730 57150e9f63 deprecate style.edit_presentation_style listener 2025-01-24 18:45:14 +05:00
Andrej730 e4ded8c477 Fix editing IfcSurfaceStyle attributes
Apparently it was broken for a while now...
2025-01-24 18:45:14 +05:00
Andrej730 d21c24b070 Bonsai - support editing IfcPresentationLayerWithStyle attributes
Example - https://imgur.com/a/JRs8RZm
2025-01-24 18:45:13 +05:00
Andrej730 e3ea12a517 Reuse export_attributes for layers, groups, constraints, classifications 2025-01-24 18:45:13 +05:00
Andrej730 60f8044820 Support adding IfcPresentationLayerWithStyle from UI
Example - https://i.imgur.com/0mssU2s.png
2025-01-24 18:45:13 +05:00
Andrej730 d5b1b6f66a Reuse draw_attributes for groups, layers, structures and systems 2025-01-24 18:45:13 +05:00
Andrej730 f3fc55f246 Change <logical> primitive data type from bool to enum
As it also has a third value "UNKNOWN" which has it's own meanig in IFC and therefore IfcLogical cannot be represented by simple booleans.

Example in Bonsai - https://i.imgur.com/xuPMcwA.png
2025-01-24 18:45:13 +05:00
Andrej730 d37caedda7 layer.add_layer_with_style 2025-01-24 18:45:12 +05:00
Andrej730 d1082897b1 bim.select_representation_item - add poll message 2025-01-24 18:45:12 +05:00
Andrej730 c12636f4cc black . 2025-01-24 18:45:12 +05:00
Andrej730 35d20e649d button to open pset templates user folder
to make it more discoverable

Example - https://i.imgur.com/BKN3rkj.png
2025-01-24 12:57:41 +05:00
Andrej730 5c7bea6dea bim.open_path - utility operator 2025-01-24 12:57:40 +05:00
Andrej730 d979c6a044 bim.open_uri - display url in description 2025-01-24 12:57:40 +05:00
Andrej730 65f2da4beb Fix creating pset templates after 5e930972d6 #6017 2025-01-24 12:34:36 +05:00
Dion Moult 755d178b6b Fix bug where adding / removing layers never triggered a regeneration of walls.
Continue our slow, ongoing purge of listeners.
2025-01-24 17:28:45 +11:00
Dion Moult f1187e33d9 Don't show IFC product selection in the type manager since it's assumed to be IfcElementType from context 2025-01-24 16:36:07 +11:00
Dion Moult 2ec7882c57 Fix #6034. Boundary module now uses the collector tool like everything else. 2025-01-24 09:57:33 +11:00
Dion Moult 1083651d0a Bump IOS back up to 2024-12-14 2025-01-24 09:49:44 +11:00
Dion Moult 03bd34d98c Workaround for speed regression in advanced brep models. See #5999. 2025-01-24 09:47:17 +11:00
Bruno Perdigão fa174feaae Refactor wall offset and direction after f724bb692 2025-01-23 15:33:39 -03:00
Bruno Perdigão 5ec5594c69 Polyline slab tool - You can now change offset and direction
As it was implemented in Polyline wall tool, the user can press "O" to
change offset and "F" to flip the direction
2025-01-23 15:33:39 -03:00
Bruno Perdigão 4f77df99a5 Add slab preview decorator 2025-01-23 15:33:39 -03:00
Thomas Krijnen fa191e44f2 cgal kernel: Move orientation logic #5987 2025-01-23 16:35:51 +01:00
Thomas Krijnen 638b2c59ea Catch string encoding errors and set status #5992 2025-01-23 16:20:06 +01:00
Bruno Perdigão 4aff6ac842 Fix profile tool after 8b678309f 2025-01-23 11:21:29 -03:00
Andrej730 f67e3f35c7 Fix error tabbing into point cloud representations 2025-01-23 18:14:17 +05:00
Andrej730 1ea6d2a194 Add IfcStructuralPointConnection to reimport_element_representations 2025-01-23 18:14:17 +05:00
Andrej730 3c96ad2965 Fix error tabbing into IfcStructuralPointConnections 2025-01-23 18:14:17 +05:00
Andrej730 4ee8176654 Bonsai to display units for force measure props
Example - https://i.imgur.com/EhcyIxp.png
2025-01-23 18:14:17 +05:00
Andrej730 4717dffcdc Bonsai - assign/unassign structural model for all selected elements 2025-01-23 18:14:17 +05:00
Andrej730 3eeb58dded assign_structural_analysis_model to support batching 2025-01-23 18:14:17 +05:00
Andrej730 70f17c2094 Structural operators - remove unnecessary Ifc Operators 2025-01-23 18:14:17 +05:00
Andrej730 2e71765f4f Fix structural operator names for consistency with Blender naming 2025-01-23 18:14:16 +05:00
Andrej730 582476cabe Fix LoadGroupDecorationData data item name for consistency 2025-01-23 18:14:16 +05:00
Andrej730 8f9417a59a Fix UI errors in Structural Analysis panel when project has no IfcStructuralAnalysisModel 2025-01-23 18:14:16 +05:00
Andrej730 e18475e1ef Use cancel icon for disabling operators for consistency 2025-01-23 18:14:16 +05:00
Andrej730 d38608ea04 Fix UI errors with not unset active library id after disabling editing
It lead to UI errors when library was removed and Bonsai was still trying to get it from active_library_id.
2025-01-23 18:14:16 +05:00
Andrej730 42d01ac222 Fix append_asset conversion issue after 3ffc0bc #6012
Custom file.add wasn't considering IfcLengthMeasure attributes...
2025-01-23 18:14:16 +05:00
Andrej730 5bc91ec4e4 append_asset - fix bug identifying None profiles as equivalent 2025-01-23 18:14:16 +05:00
Andrej730 ad99990f17 typing 2025-01-23 18:14:15 +05:00
Andrej730 8dce7b9f68 black . 2025-01-23 18:14:15 +05:00
Bruno Perdigão d8342134a0 Wall polyline tool - refactor offset functionality 2025-01-23 09:31:28 -03:00
Bruno Perdigão 8b678309fd Refactor polyline tool instructions.
Follows 8fc0d7a808
2025-01-23 09:31:28 -03:00
Bruno Perdigão 88dc9d7633 Enable "shift + mouse wheel" to function before locking angle. 2025-01-23 09:31:28 -03:00
Bruno Perdigão 09dbae7c56 Replace hard-coded unit scale with ifcopenshell.util.unit.calculate_unit_scale 2025-01-23 09:31:28 -03:00
Dion Moult c6b64baccb Fix #6028. Deprecate schema dir as it's basically just data. 2025-01-23 23:10:40 +11:00
Dion Moult 15bc968179 Remove dead code from schema.py
Slowly getting to a point where we can completely delete this legacy
file.
2025-01-23 22:59:41 +11:00
Dion Moult b7e4904905 Change gitkeep into gitignore and move ignore up to root gitignore
I kept on getting confused on why things were being ignored in the data
dir and didn't know where to look.
2025-01-23 22:48:25 +11:00
Kipre 039b7ef4ca Fix issue with eliminate_touching_operands 2025-01-23 11:23:34 +01:00
Dion Moult e2f10a5784 Minor UI improvement to keep the right alignment of total elements in the material manager 2025-01-23 20:54:43 +11:00
Dion Moult adff44febd Snaps are on by default
Users can still turn them off. We are a precision modeling app after all
:)
2025-01-23 20:44:20 +11:00
Dion Moult 35d2791657 Fix warning when aggregate decorator cannot be drawn on the screen. 2025-01-23 20:29:21 +11:00
Scott Lecher a7a9fcc73a adds calculations for projected_length of gradient curve segments (#6006) 2025-01-22 15:37:29 -08:00
Andrej730 5c3045b4db Temporarily disable 3ffc0bc due to a bug with units conversion 2025-01-22 20:45:06 +05:00
Andrej730 b812d21282 Fix non-existent name argument in add_si_unit docs 2025-01-22 19:07:44 +05:00
Andrej730 083aa4da85 Fix error after 5e93097 2025-01-22 19:07:44 +05:00
Andrej730 605a29786c Fix tests after 7b62b03
Since calculate_unit_scale now requires a project.

    def calculate_unit_scale(ifc_file: ifcopenshell.file, unit_type: str = "LENGTHUNIT") -> float:
        """Returns a unit scale factor to convert to and from IFC project units and SI units.

        Example:

        .. code:: python

            ifc_project_length * unit_scale = si_meters
            si_meters / unit_scale = ifc_project_length

        :param ifc_file: The IFC file.
        :param unit_type: The type of SI unit, defaults to "LENGTHUNIT"
        :returns: The scale factor
        """
>       if not (units := ifc_file.by_type("IfcProject")[0].UnitsInContext):
E       IndexError: list index out of range
2025-01-22 18:24:52 +05:00
Dion Moult 3dfc7097b2 Fix #6013. Fix bug where Blender object names weren't updated when using copy attributes. 2025-01-22 22:54:58 +11:00
Andrej730 4adca79301 Fix edit_attributes triggering name_callback and adding indices to names #6013
It was triggering name_callback, adding indices to the names and writing the name with index to ifc.

Also now check previous and new object name explicitly instead of relying on `obj.name` as it may have Blender indices (Blender doesn't support multiple objects sharing the same name).
2025-01-22 16:35:23 +05:00
Andrej730 a8672bc5cb root.set_object_name to reuse loader.get_name 2025-01-22 16:35:23 +05:00
Andrej730 882bacf91a bim.copy_attribute_to_selection - add info message
It's important to have somewhere information on how many elements were actually affected since some of the selected objects may not support the used attribute.

Example - https://i.imgur.com/UrLNWcF.png
2025-01-22 16:35:23 +05:00
Andrej730 23a6721f8e Fix bim.copy_attribute_to_selection missing undo 2025-01-22 16:35:23 +05:00
Andrej730 db93ca1067 bim.inspect_from_object - support representation items 2025-01-22 16:35:22 +05:00
Andrej730 f02fd69934 Bonsai - deprecate bpy.app.version checks
As we support only Blender 4.2+
2025-01-22 16:35:22 +05:00
Andrej730 74a9669fa8 Fix error tabbing into IfcRevolvedAreaSolid with a boolean + add resolve_base_items
resolve_items couldn't find IfcRevolvedAreaSolid inside a boolean result
2025-01-22 16:35:22 +05:00
Andrej730 6ce4b5d0e8 Fix error selecting boolean (RepresentationItemObject missing ifc_definition_id) 2025-01-22 16:35:22 +05:00
Andrej730 391091ad12 typing 2025-01-22 16:34:58 +05:00
Andrej730 a774a75509 black . 2025-01-22 16:00:11 +05:00
Andrej730 06f25b9846 bim.select_boolean - fix operator name 2025-01-22 11:50:49 +05:00
Andrej730 b752f798bd bim.enable_editing_booleans - add poll message 2025-01-22 11:50:48 +05:00
Andrej730 5ca615114f Also support changing profile for other sweptsolids
E.g. changing it for IfcRevolvedAreaSolid - https://imgur.com/a/jHOC8rt
2025-01-22 11:50:48 +05:00
Bruno Perdigão c72f17068c Add support for direction sense and offset in slabs with x_angle 2025-01-21 10:49:29 -03:00
Bruno Perdigão 372654267c Fix issues with add/remove layer handler when using "Quick Create Type". 2025-01-21 10:49:29 -03:00
Bruno Perdigão 5cf4740f8e Add direction sense and offset support for slabs 2025-01-21 10:49:29 -03:00
Bruno Perdigão 3740b86678 Add handlers to update layer when adding and removing material layer 2025-01-21 10:49:29 -03:00
Bruno Perdigão 325d6138d3 Add more options to Bonsai snap target. Follow 5649708ca4 2025-01-21 10:10:57 -03:00
Gorgious56 fc58b1769c Improve logic for https://github.com/IfcOpenShell/IfcOpenShell/commit/bced62bd5c6615ec1ff8c3a6af3334e469e5f9fa 2025-01-21 13:56:32 +01:00
Dion Moult 82fbec68d1 Fix #5973. You can now select the item from the item panel. 2025-01-21 23:52:33 +11:00
Andrej730 bb1ec569bc Option to name existing used unnamed profiles
Example - https://imgur.com/a/IhMbs6K
2025-01-21 17:31:21 +05:00
Andrej730 5a766e79bd Show error message trying to edit not supported type of profile
E.g. previously if you would tab into editing IfcExtrudedAreaSolid that was using not supported profile type (e.g. IFCCSHAPEPROFILEDEF) it would import it as empty geometry and tabbing out then would save it corrupting the original profile. Now there is an error message that it's not yet supported - https://i.imgur.com/NzksYVP.png
2025-01-21 17:31:21 +05:00
Andrej730 ff337bc849 Change currently edited item's profile
Example - https://imgur.com/a/2yiVIW5
2025-01-21 17:31:20 +05:00
Andrej730 992424c748 Update item decorator when moving item in viewport
Before this fix - https://imgur.com/a/mhpBvCG
2025-01-21 17:31:20 +05:00
Andrej730 0268f140ad typing 2025-01-21 17:31:20 +05:00
Andrej730 59c0719b03 black . 2025-01-21 17:31:20 +05:00
Andrej730 c91fbc4d40 Setup user data dir
Create some empty folders in the user data directory to hint the user.
2025-01-21 17:30:38 +05:00
Gorgious56 bced62bd5c When switching between ElementType and Element, keep the same class and predefined type if possible 2025-01-21 13:29:25 +01:00
Dion Moult b809bc89f0 See #5973. Representation items UI now works in item mode. 2025-01-21 23:28:33 +11:00
Dion Moult 2452b1be50 See #5973. Only show shape aspect attributes if creating a new shape aspect to make it clearer how to use the UI.
Previously the UI for creating new aspects and reusing an existing
aspect showed simultaneously which was confusing.
2025-01-21 23:21:07 +11:00
John Yani 7de8427a28 [Bonsai docs] Update version switching logic (#6005)
* Create brand.html

* Update custom.css for version switcher

* Update brand.html

* Update brand.html

Improve select box logic
2025-01-21 11:06:24 +11:00
John Yani ee0adf2fff [Bonsai docs] Add version switcher to sidebar and update custom styles (#6004)
* Create brand.html

* Update custom.css for version switcher

* Update brand.html
2025-01-21 10:24:53 +11:00
John Yani 2ce420ef6f Follow up #5994 (#6003)
* Create docs-deployment.yml

* Update docs-deployment.yml

Add CNAME

* Update docs-deployment.yml

* Create docs-deployment-unstable.yml

* Add requirements.txt

* Change trigger branch
2025-01-21 08:45:39 +11:00
Bruno Perdigão 290849d43a Fix snap to axis after 5649708ca 2025-01-20 14:59:04 -03:00
Andrej730 5e930972d6 User 'data' folder #5564
Bonsai now creates a user data folder that allows you overriding Bonsai data files. E.g. you can put you own `default.css` as `data/assets/default.css` in that folder and it will override the `default.css` Bonsai is using for the drawings. Previously you could have change internal `default.css` but Bonsai would always restore the original one on every update / reinstallation.

You can also store your .ifc files in data/libraries or data/templates and Bonsai will ensure they're loaded and you won't need to worry about Bonsai removing them later.

E.g. on Windows this path is `C:\Users\xxx\AppData\Roaming\bonsai\bonsai\data`/

You can also find path in the preferences - https://i.imgur.com/kwMc0JU.png
2025-01-20 19:32:59 +05:00
Bruno Perdigão c08d25de42 Change Bonsai snap target UI to column. 2025-01-20 11:31:58 -03:00
Bruno Perdigão 5649708ca4 Add support and UI for Bonsai snap target.
The user can now select snap target for Bonsai polyline tool.
The options are shown in the bottom of Blender's Snapping panel.
2025-01-20 10:56:22 -03:00
Bruno Perdigão 9e81a3da17 Rename "Edge-Intersection" to "Edge Intersection" 2025-01-20 10:56:22 -03:00
Bruno Perdigão b509374c27 Add initial curve snapping functionality 2025-01-20 10:56:22 -03:00
Gorgious56 704bb27cf5 You can now user ALT + Click to ensure an object is unlinked from non-IFC collections when assigning a new container 2025-01-20 14:25:55 +01:00
Dion Moult 7b62b035c9 Fix #5964. Only get the unit assignment from the project to prevent ambiguity.
I really don't know why I didn't do this before.
2025-01-20 23:50:03 +11:00
Dion Moult c5fe80db7b Make georeferencing decorator use soft limits. Don't scale font. 2025-01-20 23:48:51 +11:00
Andrej730 3ffc0bc39c append_asset to use custom file.add to prevent duplicating profiles and materials #5925 2025-01-20 16:23:31 +05:00
Andrej730 0a266bba5d Fix #6000 2025-01-20 16:16:39 +05:00
Andrej730 ecf0d255f7 Roll back build from a65aa92 #6001 2025-01-20 16:16:39 +05:00
Andrej730 c0499a2c88 black . 2025-01-20 16:16:38 +05:00
John Yani 3ad247b9a7 Automatic build and deploy bonsai docs on push (#5994)
* Create docs-deployment.yml

* Update docs-deployment.yml

Add CNAME

* Update docs-deployment.yml

* Create docs-deployment-unstable.yml

* Add requirements.txt
2025-01-20 21:13:21 +11:00
Bruno Postle 13b93a9ea8 Move cache_dir from site-packages to local folder (#5856)
Previously cache_dir was located under site-packages, which is managed
by blender and could be read-only. Now location defaults to eg.
~/.cache/bonsai or equivalent location on other platforms. See #5564

Note this adds a dependency on the platformdirs python module
2025-01-20 13:14:51 +05:00
Dion Moult ebdfe2bccd Fix #5319. Workaround for upstream bpypolyskel bug where dormer ridges were not flat. 2025-01-20 17:17:37 +11:00
Dion Moult 942c3fec87 Add missing bin directory 2025-01-20 14:35:50 +11:00
Dion Moult 651c24bbfe See #5799. Fix segfault in upstream Blender when unlinking material objects in specific scenario.
I can't explain this one so I'm pretty embarrassed to commit this, but
it crashes (see situation in #5799) on my machine and I can't recreate
it outside this scenario. In any case I think as a general strategy we
should:

 1. Minimise reliance on msgbus
 2. Msgbus listeners themselves should be wary of invalid state (e.g. if
object is now unlinked)
 3. Not clear listeners (don't overreach)
2025-01-20 14:01:11 +11:00
Dion Moult b2213592ea Fix #5799. Also purge presentation style assignment when purging unused styles. 2025-01-20 13:59:00 +11:00
Dion Moult c311b65af5 See #5799. Allow merging unnamed styles.
Styles are special because their names aren't critically semantic. It's
more to do with the style definition.
2025-01-20 13:58:39 +11:00
Dion Moult e8b097e2cb See #5799. Remove slow / unnecessary material criticals that also have a risk of crashing
In general Blender on my machine at least sometimes has huge lag with
material previews.
2025-01-20 13:57:07 +11:00
Dion Moult 193ff1cd0c Mention builds website in docs. 2025-01-20 12:15:49 +11:00
Dion Moult a65aa92c87 See #5999. Revert to older bot build before speed regression. 2025-01-20 12:15:36 +11:00
Dion Moult 6af19bc98d Fix 3x slower major speed regression introduced in 98a9550260
The commit that introduced the problem was trying to optimise rendering
dense meshes with the opening decorator. However, it introduced more
calculation in the initial project load and stored more data on every
object. This resulted in models loading 3x slower for me which is pretty
major. The original problem needs further investigation.
2025-01-20 11:24:19 +11:00
Dion Moult 5769c0d442 Fix #5754. Cosmetic bug where UI was not refreshed when using advanced mode causing incomplete decorators to be drawn. 2025-01-20 00:25:29 +11:00
Dion Moult 5c058dff3e Fix #5766. Bump IOS. 2025-01-19 21:49:51 +11:00
Dion Moult f86e414055 Forgot to add a placement for new elements which is invalid. 2025-01-19 21:38:52 +11:00
Dion Moult c17febac0c Fix #5996. Bug where getting selected or active objects was not clear.
Sometimes we want to fetch selected objects, and that includes the
active object, even if the active object isn't actually highlighted in
the viewport (albiet rare, I think?).

Conversely sometimes we want to get the active object, even if it isn't
actually highlighted. The tool.Blender functions now have kwargs to
distinguish between these.
2025-01-19 17:17:56 +11:00
Dion Moult 2d811a6786 Fix fetching layers in item mode. Apparently the inverse name changes slightly.
Maybe because an item has a single layer whereas the shape is meant to
have many layers?
2025-01-19 17:09:32 +11:00
Dion Moult 6eed5607c4 Fix #5972. Purge old non-item-based boolean code 2025-01-19 17:09:02 +11:00
Dion Moult 0b46a31c25 Add item menu is now tailored for CSG representations.
I find this a bit of a strange behaviour in IFC. Imagine you start with
a Tessellation representation type. You're only allowed meshy things, no
solid extrusion. And vice versa if you have a SweptSolid representation
type.

Now imagine you suddenly create a boolean. Now, you can mix both
tessellations and solids together.
2025-01-19 16:58:10 +11:00
Dion Moult 4d7f078f8b Ensure item decorator is updated when editing things in item mode. 2025-01-19 16:56:31 +11:00
Dion Moult 046f7cbfd2 See #5972. You can now select booleans recursively. 2025-01-19 13:54:40 +11:00
Bruno Postle 4152641d1f Ensure files in libs/bin are executable
When blender extracts wheels it doesn't preserve executable permissions
2025-01-18 21:17:43 +00:00
Bruno Postle ec55c8183f remove duplicate 'libs' folder
The Bonsai installer contained a 'libs' folder in both the ZIP bundle
and the bonsai wheel, but only the one in the wheel was actually used
2025-01-18 19:59:57 +00:00
Bruno Postle b54741dd0b Merge branch 'v0.8.0' of github.com:IfcOpenShell/IfcOpenShell into v0.8.0 2025-01-18 19:18:15 +00:00
Bruno Postle b4190876b0 Actually put ifcmerge in the linux ZIP installer 2025-01-18 19:16:50 +00:00
Bruno Perdigão 864eeb42e9 Add filling objectcs to OverrideMove 2025-01-18 15:15:54 -03:00
Bruno Perdigão 7fcb7c6433 Allow moving the current aggregate/nest when aggregate/nest mode is active 2025-01-18 12:17:28 -03:00
Bruno Perdigão 015d8f6722 Add nest mode operators to workspace UI. 2025-01-18 12:06:00 -03:00
Bruno Perdigão c07c2d7692 Complement changes from abd05e939a 2025-01-18 11:48:37 -03:00
Dion Moult a57a0eb4eb See #5972. Prioritise clipping results where possible. 2025-01-19 01:09:11 +11:00
Dion Moult e40644c4f6 See #5972. You can now remove boolean operations in the stack without deleting operands. 2025-01-19 01:08:47 +11:00
Dion Moult 8c746b1a2c Validate representation type items when leaving item mode. 2025-01-19 00:30:30 +11:00
Dion Moult 8e98aecc0b Document add boolean API 2025-01-19 00:30:30 +11:00
Bruno Postle 34a2d95524 Bonsai offers to install Git and ifcmerge (#5961)
The ZIP installer now contains a `libs/bin` folder that contains
`ifcmerge`. Bonsai on `register()` adds this folder to the system `PATH`
for the current Blender session. Advantage of this is that we don't have
to fiddle with the registry on windows, or install files to
`~/.local/bin` on Linux, it _should_ work on Darwin, updates are
automatic, and we have a mechanism to ship other executables if
required.

(Note that ifcmerge.exe increases the size of the Windows Bonsai ZIP
download by about 7MB)

If Git isn't installed on Windows, the Git panel now offers to install
it from the Windows Package Manager Community Repository using `winget`.
2025-01-18 10:22:45 +00:00
Dion Moult a12427e44a See #5972. Add tests for adding boolean and check against recursive booleans and invalid boolean items. 2025-01-18 21:13:54 +11:00
Dion Moult 35734f4b67 Guess representation type from items based on where rule
Previously we never implemented this in a very strict way so it was
prone to mistakes.
2025-01-18 18:35:13 +11:00
Dion Moult c54ea1e5d2 Shape builder can now create blocks 2025-01-18 18:34:40 +11:00
Bruno Perdigão abd05e939a Add nest decorator 2025-01-17 23:00:05 -03:00
Bruno Perdigão d02c5ca1e6 Rename OverridaAggregateMove to OverrideMove.
It now deals with nests too.
2025-01-17 22:58:29 -03:00
Bruno Perdigão a5afba03ab Add "nest mode" similar to "aggregate mode". 2025-01-17 22:47:11 -03:00
Bruno Perdigão 3f914cdf27 Remove unused handler from AggregateModeDecorator 2025-01-17 22:43:05 -03:00
Bruno Perdigão 1d03e916f3 Fix after c4f85dffa4 2025-01-17 17:45:21 -03:00
Bruno Perdigão fd279234f3 Fix #5818 2025-01-17 16:41:01 -03:00
Bruno Perdigão a44439655c Install Bonsai decorators from Viewport Overlays in load_post. 2025-01-17 16:23:40 -03:00
Bruno Perdigão c4f85dffa4 Fix OverrideMoveAggregate to work for multiple layers of aggregates. 2025-01-17 15:51:26 -03:00
Bruno Perdigão 8d63845f3d Change AddSlabFromWalls to consistently create walls in a counterclockwise direction.
This guarantees that the external face of the walls aligns with the edges of the slab.
2025-01-17 15:09:57 -03:00
Thomas Krijnen e0e24948be Update build_rocky.yml - safe.directory 2025-01-17 14:07:36 +01:00
Thomas Krijnen 84420a8973 Don't allow empty sha for add_commit_sha 2025-01-17 13:57:14 +01:00
Dion Moult 7ee055f4f3 See #5972. You can now add half space solid items in item mode. 2025-01-17 23:02:32 +11:00
Andrej730 1f436bcec6 replace date picker util operators with wm.context_set_string
Since they were just setting a scene property which can be done by a default operator.
2025-01-17 17:00:06 +05:00
Andrej730 468c1a2580 Highlight currently selected date in date picker
Example - https://imgur.com/a/ItNg9sZ
2025-01-17 17:00:06 +05:00
Andrej730 e8cb9e7f3c Date picker to support IfcDateTime
See https://imgur.com/a/9a7JfMO
2025-01-17 17:00:06 +05:00
Andrej730 fa98a7e8f7 black . 2025-01-17 17:00:06 +05:00
Andrej730 686a5e7387 Fix #5988 after 6fb0f5e63a 2025-01-17 15:24:02 +05:00
Dion Moult e1da08579c See #5972. You can now add booleans in item editing mode, with support for all three boolean operators. 2025-01-17 20:55:27 +11:00
Dion Moult 0a87e92dcf Move geoference visualisation UI into panel header to be consistent. 2025-01-17 20:54:06 +11:00
Dion Moult 24b3cfc067 Fix #5897. Fix #5488. Fix #5498. Bug where you couldn't edit newly added annotation.
The annotation adding code was a bit of a mess, spread around
create_annotation, create_annotation_occurrence, and
bpy.ops.bim.add_annotation. I've now consolidated it all into
core.add_annotation and updated it to work with the new item editing
mode (basically new objects need to reload their representation to
populate item_ids). Things are still messy, but a bit less now.
2025-01-17 20:53:29 +11:00
Thomas Krijnen c163b260cf Try solve #5989 2025-01-17 10:45:21 +01:00
Andrej730 9e50c89c01 Work schedule UI - use cached data instead of accesing IFC 2025-01-16 18:30:44 +05:00
Andrej730 b28a3b6e32 Basic header for work schedule panel header #5928
Example - https://i.imgur.com/9thZQCX.png
2025-01-16 18:30:44 +05:00
Andrej730 9573628bf6 fix typo in sequence/prop.py and use more consistent name for props
Issue was that taskcolumns_enum doesn't exist
2025-01-16 18:30:44 +05:00
Andrej730 5f034bf4a9 bim.copy_railing_parameters - add poll message 2025-01-16 17:36:12 +05:00
Andrej730 de6e54040a FilledOpeningGenerator - update only parts instead of the full decomposition
similar to 0662b0c
2025-01-16 17:36:12 +05:00
Andrej730 50b39fdd10 bim.clone_opening - update affected representations 2025-01-16 17:36:12 +05:00
Andrej730 eef04fb91c bim.clone_opening - always show in opening's ui
Otherwise it was hidden until user guesses that 2 objects need to be selected for it to appear.
Also, not sure if it's useful operator anymore - it seems just duplicating an opening and then adding it does the same thing.
2025-01-16 17:36:11 +05:00
Andrej730 a383f60915 Show voided elements in UI
E.g. show voided wall when window or wall's opening is selected.
Example - https://i.imgur.com/jxjWPeE.png
2025-01-16 17:36:11 +05:00
Andrej730 44131a7fe5 Select filling objects from UI
Example - https://i.imgur.com/BijTwgo.png
2025-01-16 17:36:11 +05:00
Andrej730 c66f2131e2 bim.select_entity - move to bim module
as it can be generally useful, not just in tester
2025-01-16 17:36:11 +05:00
Andrej730 035999d0c3 bim.update_openings_focus - remove unnecessary ifc operator 2025-01-16 17:36:11 +05:00
Andrej730 61d68b74ca bim.add_filled_opening - remove unused operator 2025-01-16 17:36:10 +05:00
Andrej730 133459faec typo 2025-01-16 17:36:10 +05:00
Andrej730 6fb0f5e63a typing 2025-01-16 17:36:10 +05:00
Andrej730 2859e9632e black . 2025-01-16 17:36:10 +05:00
Andrej730 521a8183e7 Fix #5953 after d6e6a6d 2025-01-16 17:36:09 +05:00
Dion Moult a63f67ad32 Fix #5841. Incorrect axis usage when generating LAYER2 elements from polyline. 2025-01-16 23:19:11 +11:00
Dion Moult aeba2885e4 Fix #5984. Incorrect axis usage when generating slabs. 2025-01-16 23:11:51 +11:00
Dion Moult f50ae2faa5 See #5972. You can now load a hierarchy to visualise the boolean result tree. 2025-01-16 22:58:17 +11:00
Dion Moult bd739f8bfd Fix undo bug when marking booleans as manual 2025-01-16 22:39:37 +11:00
Dion Moult 5b2243089d See #5972. You can now delete boolean operands in item editing mode. 2025-01-16 22:10:28 +11:00
Dion Moult 2fe4680ca1 See #5972. Boolean operands are now loaded in item editing mode and are editable. 2025-01-16 21:28:05 +11:00
Taku Makoni 21624d6065 Wrong Import Package (#5982) 2025-01-16 12:20:59 +11:00
Taku Makoni b9f40342b2 Grammatical error 2025-01-16 11:52:09 +11:00
Bruno Perdigão 3e879c6156 Change how new objects added are handled in aggregate mode.
When in aggregate mode, new objects will now be automatically assigned to
the current aggregate.
2025-01-15 16:11:27 -03:00
Bruno Perdigão c360b91f4a Remove constraints from the aggregates. 2025-01-15 16:11:27 -03:00
Andrej730 23b1a71cba Support adding duplicated existing boolean
Example - https://imgur.com/a/rRQz9dx
2025-01-15 18:41:21 +05:00
Andrej730 5d17554d04 bim.add_boolean - support adding multiple booleans at once
Example - https://imgur.com/a/IWDqMRT
2025-01-15 18:41:20 +05:00
Andrej730 1f3fc3c2b9 bim.add_openings - display in UI if multiple potential openings are selected 2025-01-15 18:41:20 +05:00
Andrej730 d6da8a7ee1 Support duplicating potential openings and potential/existing booleans 2025-01-15 18:41:20 +05:00
Andrej730 cfb4cd8af9 bim.add_potential_opening - remove unused code
draw_settings() was never used
2025-01-15 18:41:20 +05:00
Andrej730 7eff4db4eb reuse add_tracked_opening 2025-01-15 18:41:19 +05:00
Andrej730 689688c76b Fix error selecting material usage in Materials UI
Previously it would error, now it selects related profile / layer set.
2025-01-15 18:41:19 +05:00
Andrej730 0ea513818b Support assigning material sets as usages from UI #5933
It's on alt+click in Materials UI, see example - https://imgur.com/a/8gP7iAZ
2025-01-15 18:41:19 +05:00
Andrej730 2fdcb41c4e black . 2025-01-15 18:41:19 +05:00
Dion Moult 65c99c57cd Prefill class / product type if using a particular BIM tool for convenience, and hide fields. 2025-01-15 22:04:58 +11:00
Dion Moult fe54b24f5f Fix bug where box decoration when adding empty geometry failed 2025-01-15 22:04:24 +11:00
Dion Moult 7fdfdbf8b4 Fix #5971. You can now specify a name and description when adding objects. Clean naming and description is critical! 2025-01-15 20:57:19 +11:00
Dion Moult 53906d824a Fix #5977. Silly mistake I forgot all([]) is still True. 2025-01-15 20:47:56 +11:00
Thomas Krijnen a687a90039 Break out multiple tasks per representation when rep is directly reused #5978 2025-01-15 10:24:52 +01:00
Thomas Krijnen c37fd6ae0b Don't throw exception but set to $ when encountering invalid instance name #5680 2025-01-15 10:08:31 +01:00
Dion Moult 06e8e2b35c Remove obsolete separate_verts_layer when marking edge angles for roofs
New roof system automatically handles this scenario (using poke
operator) so no need to mark it.
2025-01-15 19:46:34 +11:00
Dion Moult fd51b9a9e9 Fix #5968. Fix #4040. Rewrote roof generation using per face extrusions and cutting planes instead of edge sliding.
WARNING! The roof generation is now quite significantly different. This
WILL change your geometry when you refresh roofs from existing models.

 - The roof profile now always represents the top of eave. This better
represents how things are built rather than bottom of eave which was
previous.
 - The roof therefore always grows down from the profile. The rafter
edge angle can only be acute. This means that the roof will never grow
larger than the footprint profile that you've drawn. (before, the
footprint was not guaranteed to match).
 - The roof thickness is now the actual thickness of the roof, not the
"vertical dimension" of the roof. This means that the roof thickness can
now match intended layer thicknesses instead of you needing to do math
to work it out.

I've rewritten the internals of how roofs were generated to be hopefully
a lot simpler but as a tradeoff it's more restrictive. After the
skeleton is generated, non-uniform angles would be handled through
vertex splitting and moving. This works in simple scenarios but fails in
more complex ones. The new approach only handles non-uniform angles on
triangular faces. These faces are really easy to handle compared to
ngons, but are also more robust. The rafter edge angle is also now
handled using a clipping plane, which is a lot, lot simpler than vertex
sliding math.

Each face is now processed separately and then merged at the end. This
means that if a face has a different angle, it will now correctly
represent the different thickness at that portion of the roof.

In the process consistent roof thickness / rafter angle bugs were fixed.
2025-01-15 19:43:39 +11:00
Andrej730 3f2f296d5f Fix error with Shift-E #5975
E.g. two objects are selected - tesselation and profile and tesellation being active object. Using s-e with deselect tesselation object as it doens't have a usage but Bonsai would still try to run bim.enable_editing_extrusion_profile on it leading to the error.

Also fix possible issues for hotkey executed without active object (it seems all operators in hotkey do require active object)
2025-01-14 17:42:03 +05:00
Andrej730 020937835a Fix issue enabling ifcsverchok if sverchok installed under a different name #5913 2025-01-14 17:42:03 +05:00
Andrej730 a52e3615d6 Map ifc2x3 IfcAnnotationOccurrence to IfcStyledItems in ifc4 #5917 2025-01-14 17:41:58 +05:00
Andrej730 adb61c5a16 bonsai makefile - use new option for old no-clobber behaviour
Apparently (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=62572) coreutils have changed `mv -n` to throw an error now instead of working silently, therefore our build was failing on Mac when Github Action switched from Ubuntu 22 to 24.
`--update=none` seems to restore the old behaviour.
2025-01-14 17:41:58 +05:00
Andrej730 a50973ede7 typing 2025-01-14 17:41:58 +05:00
Andrej730 74ca86678a ifcfm cobie - color code ods file tabs too 2025-01-14 13:48:50 +05:00
Gorgious56 ac2e69bd66 Don't close type manager when using the enum search feature while adding a new type
Also reduce the attribute name a bit
2025-01-14 08:44:21 +01:00
Dion Moult 595a3b3f87 Preselect IFC class when adding elements for convenience. 2025-01-14 14:22:15 +11:00
Dion Moult 48f534e7c1 Say "Type" instead of None in the general BIM tool. 2025-01-14 14:13:39 +11:00
Dion Moult 1ed770d454 Fix #5921. Bug when parsing IDS XML of facets with no attributes. 2025-01-14 13:36:33 +11:00
Dion Moult ec600ec72e IfcTester can now read from XML strings in addition to opening files on disk 2025-01-14 13:35:45 +11:00
Dion Moult adcc23541a Fix bug where starting a new file in an existing session would prompt an error.
Bpy.context.active_object is not available in-between loading / starting
a new file.
2025-01-14 13:35:01 +11:00
Dion Moult 9a77c94758 Fix #5967. Incorrect logic in the for/else block when adding new elements.
The for/else block was too greedy, meaning that if nothing was selected,
it would still try to create slabs from walls. I find for/else confusing
so I restructured the section to do more early returns and unindent the
logic.
2025-01-14 12:20:22 +11:00
Moritz Amberger e89d195f9b moved full_schema, is_strcit, should_expand, should_get_inverse, should_get_psets. should_get_geometry and should_skip_geometry_data to the Patcher class definition. deleted those parameters from the patch definition so that users are able to set them by themselves. removed the hardcoded tmp-File for the db_file name 2025-01-14 09:30:34 +11:00
tim 228e9d0571 Refactor detect_icon_color_mode to accept attribute path suffix
•	Removed bpy.context.preferences.themes[0] from the input and hardcoded it in the function.
	•	color_path now only requires the attribute path suffix (e.g., "user_interface.wcol_regular.text").
	•	Updated error handling to default to "dm" instead of "lm".
2025-01-14 09:22:53 +11:00
tim 7280669725 Typo 2025-01-14 09:22:53 +11:00
tim 83b8bb153d One function for model and cad custom icons
Apply detect_icon_color_mode function to model and cad workspaces
2025-01-14 09:22:53 +11:00
tim 88891409fd New icon color mode function
New function for determining which icon color mode to use: dark (dm) or light (lm)
2025-01-14 09:22:53 +11:00
tim b6ba1aaa8c Hide shortcuts from header 2025-01-14 09:22:22 +11:00
ti ffb3d2d6e9 check for None 2025-01-14 09:22:03 +11:00
Dion Moult efede9eb03 No idea why Github actions is failing for MacOS. All code looks good to me. 2025-01-14 00:14:03 +11:00
Andrej730 ac315e8a55 ifcfm cobie 2.4 - color code excel tabs
example - https://i.imgur.com/tSeqyjj.png
2025-01-13 17:53:02 +05:00
Andrej730 b7c18221f4 get_bbox - optimize by using numpy arrays 2025-01-13 17:53:02 +05:00
Andrej730 7a49f1611e get_shape_matrix - small optimization
reuse existing matrix instead of recreating new
2025-01-13 17:53:02 +05:00
Andrej730 5c0a7af830 cobie24 - implement Coordinate tab #5926 2025-01-13 17:53:02 +05:00
Andrej730 a968b61d02 np_matrix_to_euler, np_matrix_normalized 2025-01-13 17:53:01 +05:00
Andrej730 0ac9d739f8 remove unused code 2025-01-13 17:53:01 +05:00
Andrej730 74c6480808 bim.add_element to select added object 2025-01-13 17:53:01 +05:00
Andrej730 0601802005 typing 2025-01-13 17:53:01 +05:00
Dion Moult 9784fb1c49 Pyodide example app should use IfcShapeRepresentation to be valid 2025-01-13 23:12:49 +11:00
Gorgious56 039dcbaefa Stair Modifier : You can now set a total length target that will update individual tread runs automatically. You can lock the total length target and modify tread run or number of treads to keep the same global dimensions. 2025-01-13 12:04:13 +01:00
Gorgious56 1cd17fd5f8 Merge pull request #5947 from IfcOpenShell/update_type_manager
Update Type Manager
2025-01-13 09:40:42 +01:00
Gorgious56 2f0f9fe08b Merge branch 'v0.8.0' of https://github.com/IfcOpenShell/IfcOpenShell into update_type_manager 2025-01-13 09:38:41 +01:00
Gorgious56 50ed75fcc2 Fix potential bug where a class doesn't have a predefined type 2025-01-13 09:32:23 +01:00
Gorgious56 9eaf41c9f0 The filter search field now also filters description and predefined type 2025-01-13 09:28:56 +01:00
Dion Moult 581a674654 Fix #5952. Aggressively block scaling of IFC elements to prevent user confusion. 2025-01-13 18:01:25 +11:00
Dion Moult e29f686d3f Update setting literal from old name of "debug" to new name "debug-boolean". 2025-01-13 15:45:27 +11:00
Dion Moult 8cf7057abc Fix #5954. Special automatic movement of features shouldn't then also move children of those features.
If you move a wall, and that wall has features (e.g. openings), it's
desirable to also move those openings (because they are invisible). This
is a special exception to `should_transform_children` because the
definition of the feature (opening) is inherently tied to the parent
(wall).

What wasn't considered is that this would typically then also move
subchildren of the features (e.g. fills like doors). I'm surprised
nobody caught this earlier.

I did also consider another approach where if you move a wall, it moves
all unfilled openings, and if you move a door which fills a opening, it
moves the opening too. Intuitively it sounds nice, but it doesn't work
because:

 - Openings can have multiple fillings. If you move all fillings, they
all fight to move the openings.
 - All logic about children goes one way: a placement may have child
placements relative to it. This breaks the convention (if moving a door
instead moves its opening) which can make brains explode.
 - It starts to conflate rules about relative / referenced placements
with spatial decomposition. We assume all IFCs are valid and follows the
convention of relative placement but we cannot guarantee this. This also
leads to brain explosion.
2025-01-13 15:44:52 +11:00
Dion Moult 316b9554d4 Fix #5959. Bug where default selection basket in selector query was not added per facet list.
Previously the code looked for additive facets (entity, instance)
anywhere in the query, and then only added the default basket once at
the beginning of the query. This change makes it look for additive
facets in order (that way you could start with a default selection, and
then later use an additive facet) and does it per facet list (so you can
omit the additive facet at the beginning of each list).
2025-01-13 12:46:44 +11:00
tim 95fa6f39c4 New furniture icon
Chair icon for furniture
2025-01-13 10:47:35 +11:00
Thomas Krijnen 65ffbe081b Pyodide app readme 2025-01-12 15:50:19 +01:00
Thomas Krijnen 936984dd31 Update publish-pyodide-demo-app.yml 2025-01-12 15:16:57 +01:00
Thomas Krijnen 590c6eed0a Update publish-pyodide-demo-app.yml 2025-01-12 15:12:44 +01:00
Thomas Krijnen a696c7bbb5 Update publish-pyodide-demo-app.yml 2025-01-12 15:10:59 +01:00
Thomas Krijnen 6ff1d06938 Create publish-pyodide-demo-app.yml 2025-01-12 15:07:44 +01:00
Thomas Krijnen 6deb7121cc demo-app/CNAME 2025-01-12 15:00:54 +01:00
Thomas Krijnen 6aec2f7a02 pyodide/app-demo 2025-01-12 14:50:20 +01:00
Dion Moult 0eb987fc07 Black 2025-01-12 22:43:41 +11:00
Dion Moult 04092d19be Refactor common function for parametric objects into tool.Model 2025-01-12 22:43:34 +11:00
Dion Moult 8364c87777 Fix #5941. Context override when adding objects should only have one object. This is a temporary fix.
The proper fix is to refactor add_door and friends into core. That way
it can be properly reused instead of this hacky context override.
2025-01-12 22:39:32 +11:00
Dion Moult 2d38d8520c Fix regression where you couldn't move spatial elements from the new aggregate move override. 2025-01-12 21:47:42 +11:00
Dion Moult 03d3b1e52c Changed my mind, remove AssignConstituentFractions patch. See #5441. 2025-01-12 17:51:32 +11:00
Dion Moult 79fe1bfcfc Minor fix from new patch recipe in PR #5441 (src no longer required) 2025-01-12 17:45:43 +11:00
Louis Trümpler 59c1d7fa54 Add AssignConstituentFractions recipe 2025-01-12 17:41:50 +11:00
tim f0e1be765d New Roof and Railing icons
https://github.com/IfcOpenShell/IfcOpenShell/issues/5375
2025-01-12 17:38:57 +11:00
Lucas Nascimento a2bfc006b7 black formatting 2025-01-12 17:25:21 +11:00
Lucas Nascimento dff9f56ce3 black formatting and changes in shader typing 2025-01-12 17:25:21 +11:00
LM-Nascimento 80996dee1f Update unit.py 2025-01-12 17:25:21 +11:00
Lucas Nascimento a329de9f71 licence comment 2025-01-12 17:25:21 +11:00
Lucas Nascimento 1918138f68 cleanup 2025-01-12 17:25:21 +11:00
Lucas Nascimento aa21fe9060 separate shader file from decoration data 2025-01-12 17:25:21 +11:00
Lucas Nascimento 6eee445502 Cleaning up and type hints 2025-01-12 17:25:21 +11:00
Lucas Nascimento 3eb29af496 seems to be working 2025-01-12 17:25:21 +11:00
Lucas Nascimento 2912580087 shit ton of changes 2025-01-12 17:25:21 +11:00
Lucas Nascimento 477725529b now with shader for point loads 2025-01-12 17:25:21 +11:00
Lucas Nascimento d915dc9df0 update decorator to match shader + changes to text rendering 2025-01-12 17:25:21 +11:00
Lucas Nascimento 53a2b87c97 updates to shader class 2025-01-12 17:25:21 +11:00
Lucas Nascimento d10b327c5f Initial commit, able to show structural curve action on the sample file of IFC documentation 2025-01-12 17:25:21 +11:00
Radek Hlaváček 293cd83a9c Update report.html
Adding "Skipped" grey colored container for specification and requirement if no applicable element is found
2025-01-12 17:14:22 +11:00
ti 07817ec6fc updated restriction types 2025-01-12 17:13:36 +11:00
c4rlosdias d1ad082979 Add derived unit 2025-01-12 17:12:20 +11:00
Thomas Krijnen ba9693519b Remove mathutils import from shape_builder.py 2025-01-12 17:05:32 +11:00
Dion Moult 41362e1582 Fix #5950. IfcTester now considers optional requirement facets as per latest documentation.
The IDS documentation used to state that "optional" on requirement
facets was "for information only" and didn't affect the pass / fail
state. This was changed a while ago (which I missed) to a new behaviour:
both no values and passing values will pass.
2025-01-12 16:28:14 +11:00
Dion Moult 8e77011dda Fix #5949. Remove material set psets panel in favour of merging into material manager psets panel.
Previously, to edit a single IfcMaterial pset, you'd do so in the
material manager. In contrast, to edit a IfcMaterialSet pset, you'd do
so only when assigned to an object. Not only is it bad to edit psets in
two locations, it also means you can't edit psets until you've first
assigned the material set to an object which is bad. Now it's less code,
and material / material set psets are in the same spot.

There still more consolidation work to do, to allow editing of sets in
the material manager and to figure out how to show item psets, but it's
a step in the right direction.
2025-01-12 15:45:02 +11:00
Dion Moult 02632440b0 See #5949. Only show material psets and classifications if actually editing in the material manager.
Previously, you could disable editing and it would still show irrelevant
psets or classifications.
2025-01-12 15:45:02 +11:00
Bruno Postle 0a4ab32810 Fix missing carriage return
SyntaxWarning: invalid escape sequence '\I'
2025-01-11 13:36:54 +00:00
Dion Moult c446aab9a0 Fix #5951. Regression when removing mathutils dependency from shape builder and parametric stairs were expecting Vector and instead got numpy. 2025-01-11 15:39:13 +11:00
Dion Moult 2e7cbb759e Fix #5955. Regression in 0983f812fd where you couldn't remove a style that wasn't being edited. 2025-01-11 14:51:18 +11:00
Gorgious56 68f175fc71 Fix bug when trying to add an ifc type occurence from the toolbar in the properties editor 2025-01-10 15:42:37 +01:00
Gorgious56 a428169a13 Fix bug when duplicating an ifc type 2025-01-10 15:29:31 +01:00
Gorgious56 7db0196791 Fix bug where the thumbnail of the active class wasn't updated 2025-01-10 15:17:26 +01:00
Gorgious56 4f4c557f61 Another attempt.
Went back to previous toolbar : icon + type name + dot grid icon which all launch the type manager.
    Validating the type manager popup now only closes it. Functionally is the same thing as clicking Cancel. Don't really know what to do to fix it. Does cancel make sense in the type manager ? Do we want to be able to undo what is possible to be done from within the type manager ?
    You can change the active type either with the dropdown in the popup and in the grid flow. I changed it so that changing the type in the dropdown jumps to the corresponding page. BTW first time using github copilot to figure out the maths and it worked magically :) . I'm not against removing the dropdown but I feel like it's nice to see a plain list to choose from.
    You can input a specific page number or scrub the page number field. Might be usefull if user has dozens of pages to flip through.
    Right now the search is very simple, it does not implement fuzzy search or anything fancy with *
2025-01-10 14:24:33 +01:00
Dion Moult d88adf2d02 See #5938. Correctly detect negative extrusion depths and directions. 2025-01-10 22:48:11 +11:00
Dion Moult 956b7dcb92 Fix #5941. Regression in ae22eec9 where active object wasn't considered when adding a parametric door. 2025-01-10 21:50:52 +11:00
Dion Moult 0a32149be3 Fix #5944. You can now tab / edit IfcAnnotationFillArea with the new item editing mode. 2025-01-10 19:49:04 +11:00
Gorgious56 aafb6fc426 Add search bar with simple filter function to the type manager 2025-01-10 09:44:12 +01:00
Dion Moult cac3d7f699 Fix #5939. Fix #2751. IfcPatch no longer needs the (rarely used) input src arg by default. 2025-01-10 16:59:45 +11:00
Dion Moult 83add56e6c Fix #5949. When duplicating objects, copy over IFC links (shape representation ID, item_ids, edge_item_ids) in a more reliable way 2025-01-10 15:22:53 +11:00
Dion Moult e4412e2f51 Black 2025-01-10 15:21:18 +11:00
Dion Moult 4a1422d292 New annotations should not go into the unsorted collection 2025-01-10 14:13:28 +11:00
Stephen Boddy 1e448cb170 Add mini-guide to setting up IDE for debugging 2025-01-10 12:34:56 +11:00
Bruno Perdigão 07bb7e68dd Fix #5932 2025-01-09 16:14:11 -03:00
Bruno Perdigão cf054e11a1 Refactor: improve preview decorators for other products, following 420a4cfdc 2025-01-09 15:59:15 -03:00
Bruno Perdigão 6b8024f835 Refactor: Improve profile preview decorator to prevent GPU context errors 2025-01-09 15:59:15 -03:00
Bruno Perdigão 66577fd30d Prevent polyline profile from being called by Column Tool 2025-01-09 15:59:15 -03:00
Bruno Perdigão 0124b7a0e9 Allow polyline profile for IfcCoveringType 2025-01-09 15:59:15 -03:00
Bruno Perdigão 737402cae4 Fix profile scale issue in profile preview decorator. 2025-01-09 15:59:15 -03:00
Bruno Perdigão 8b1d4ca5d4 Implement polyline tool for profiles. 2025-01-09 15:59:15 -03:00
Gorgious56 a6e953a550 Update Type Manager
Add back the type dropdown and looking glass icon in the toolbar
Clicking on a type in the manager no longer closes the popup anymore.
A visual indictor is displayed on the active type
Changed the parameters icon in the individual type interface

Fix bug in "Slab from Walls" Shift + A code
2025-01-09 17:45:40 +01:00
Dion Moult 40dcfd450f See #5940. Fix bug where using preserve existing in IfcCSV didn't fully purge extra rows, possibly leading to orphaned data (which LibreOffice will render as 0 if it is a number value type) 2025-01-09 18:25:00 +11:00
Dion Moult e220b6981e See #5940. Fix bug where ODS and XLSX didn't correctly check for whether summaries existed and sometimes printed out "None" rows 2025-01-09 18:24:09 +11:00
Dion Moult 84931fbbd2 See #5941. Don't show mode changes if an object is unselectable.
Unselectable things should be uneditable. That's what the lock/unlock is
for.
2025-01-09 17:40:52 +11:00
Gorgious56 2d5bc49ee0 Going in and out of AGGREGATE mode doesn't overwrite other objects' display type anymore 2025-01-08 16:53:59 +01:00
Gorgious56 d4ff789688 You can now mass enable edition, disable edition and validate edition of Ifc Entity Attributes.
This highlights a potential bug that already existed due to the way the attribute system is designed. Where the user mass-edits attributes from different IFC types, resulting in discrepancies due to the same attributes having a different index. eg IfcWindow has the Tag attribute at index 3, IfcDoor at index 4. So using the ALT modifier feature from vanilla Blender to mass-modify similarly named attributes on the Tag attribute of the IfcWindow will modify the PredefinedType attribute on the IfcDoor (index 3). For this reason I added the ALT modifier to the buttons so mass-operations are a conscious effort for more knowledgeable users. Might reconsider if problems arise but this is IMO a good QOL feature.

Also fix floating point precision errors on Pset float values stored as strings (re last commit)
2025-01-08 11:29:06 +01:00
Gorgious56 5c3f0f0df9 Fix floating precision artifacts when displaying float values in the Attributes panel
Minor fixes on previous commit
2025-01-08 10:28:27 +01:00
Bruno Perdigão 519e667464 Fix bug with bim.aggregate_assign_new_objects_in_aggregate_mode. 2025-01-07 18:17:32 -03:00
Bruno Perdigão e3abfd60cb Typo. 2025-01-07 18:16:59 -03:00
Bruno Perdigão 864e8d3a48 Typo. 2025-01-07 18:05:23 -03:00
Bruno Perdigão d2b05ea3dc Fix bug related to constraints and aggregate duplication 2025-01-07 18:00:47 -03:00
Thomas Krijnen d063bdbbf1 wasm wheel fixes 2025-01-07 20:56:16 +01:00
Thomas Krijnen a42a49e088 wasm wheel fixes 2025-01-07 20:47:25 +01:00
Gorgious56 ae22eec958 Door modifier operators now apply to all elligible selected objects. This makes it way easier to modify a single attribute in several unrelated parametric doors thanks to the ALT + input feature from vanilla Blender. This allows for mass-removing, mass-removing, mass-editing, mass-validating, and mass-cancelling edition of door modifiers.
Also allow UNDO for some door operators which seems like they should support it
And Fix #5937 : minor typo
2025-01-07 17:43:43 +01:00
Bruno Perdigão b657eee564 Change extrusion direction when converting to extrusion in Representation Utilities. 2025-01-07 12:41:15 -03:00
Thomas Krijnen 9d1daa4dc5 ifcpatch - try both out of tree and subpackage imports #5939 2025-01-07 15:43:44 +01:00
Bruno Perdigão dbf33283ab Add Bonsai decorators toggle to Blender Viewport Overlays.
https://imgur.com/auQcp2Y
2025-01-07 11:32:14 -03:00
Gorgious56 0983f812fd You can now use the Asset Browser to set a Material Asset as an external style.
To do so Right Click on a material in the Asset Browser then `Set To External Style`. The style editor must be loaded in the properties editor.

Also run black on a file from previous commit and fix a bug soft-locking the style editor when removing a style that is being edited
2025-01-07 14:55:17 +01:00
Thomas Krijnen 3ced6e7bb1 wasm wheel fixes 2025-01-07 13:23:10 +01:00
Richard Brice 933d845472 Fixes IfcPolynomialCurve when used as IfcCurveSegment.ParentCurve in horizontal alignments 2025-01-06 14:36:37 -08:00
Gorgious56 8313c05884 Merge pull request #5930 from Gorgious56/improve_modifiers
Modifiers QOL
2025-01-06 12:10:26 +01:00
Gorgious56 f6e588b48c You can now copy roof parameters from active to selected objects 2025-01-06 11:35:17 +01:00
Gorgious56 547c5fb8a9 TAB now applies modifier parameters on the active object. ESCAPE now cancels editing modifier parameters on the active object. 2025-01-06 11:06:41 +01:00
Gorgious56 570e29cfe4 Add operator to copy railing modifier parameters (#3413)
* You can now copy railing properties from active to selected

Hitting ESCAPE cancels editing railing path
2025-01-06 10:10:54 +01:00
Thomas Krijnen 2e35b07fa6 Fetch boost from github releases in build scripts 2025-01-06 10:05:59 +01:00
Thomas Krijnen 1b6ee26854 Don't fail on empty ReferencedSource in IfcTester 2025-01-05 14:40:27 +01:00
Thomas Krijnen 7b21858cd4 Inform about supported reporter types in IfcTester 2025-01-05 14:37:41 +01:00
Thomas Krijnen 12800bbeee IFCPATCH_RECIPE_DIR to allow loading out of tree recipes 2025-01-05 11:07:48 +01:00
Gorgious56 3a7488d54b Fix #3261 : You can now purge unused openings that do not intersect with their related building element.
It's a naive implementation and very inefficient. Moreover there may be false positives because it's testing overlapping the evaluated mesh element with all openings applied.
2025-01-03 17:37:46 +01:00
Gorgious56 7bfa926e6d Fix error when instantiating a wire mesh 2025-01-03 16:41:05 +01:00
Gorgious56 fd7a7d44c3 Special geometry data on meshes are also loaded as geometry attributes.
No functional change apart from in dissolve_triangulated_edges where it will try to load the attribute if it can. I believe it will be easier in the long term to use the builtin Attributes system. Unfortunately Curves don't support Attributes yet. Also, attributes are more lightweight compared to custom properties.
2025-01-03 16:12:51 +01:00
Gorgious56 fe6a6d1a0d You can now disable aggregate mode with ESCAPE in the 3D Viewport
- Fix minor typo
2025-01-03 15:04:28 +01:00
Gorgious56 98a9550260 Fix slowness when rendering dense meshes with the opening decorator
It uses a custom boolean attribute on the mesh to decide whether an edge should be displayed or not. I think later on it can be used to get rid of the dictionary accessors which make the blend file size skyrocket.
2025-01-03 14:12:16 +01:00
Gorgious56 fe253af5ae Don't draw triangulation artifact edges in the opening decorator 2025-01-03 13:04:37 +01:00
Gorgious56 e933ff08f8 Use relevant tool.Geometry functions for querying openings relations 2025-01-03 12:22:08 +01:00
Gorgious56 25af639dae Fix memory leaks due to orphaned meshes in the opening and boolean operations 2025-01-03 11:30:42 +01:00
Gorgious56 5b3e3fc646 Fix not being able to apply or hide specific openings 2025-01-03 10:54:54 +01:00
Gorgious56 57dbea2974 Fix #3854 : Assigning a class to a potential opening removes it from the openings pool
Also fix an error in previous commit
2025-01-03 10:33:41 +01:00
Gorgious56 cc3074cdcc #5919 : Add an option to set the opacity of the rest of the model when modifying openings
Option is located in the preferences
2025-01-03 10:01:36 +01:00
Gorgious56 4c9697d260 Consolidate logic for toggling display of openings 2025-01-03 09:59:47 +01:00
Gorgious56 8dfcea0e24 Fix internal openings list not being cleared when applying an opening 2025-01-03 09:42:55 +01:00
Gorgious56 f0fac7ad8b Reorganize addon preferences layout
Hopefully it's a little bit less daunting
2025-01-03 09:40:08 +01:00
Bruno Perdigão f6c34ac196 Refactor enable_constraints for performance reasons.
`context.view_layer.update()` was being called for every object in the loop.
Now it is just called after all the constraints are enabled.
2025-01-02 17:11:43 -03:00
Bruno Perdigão 5ebaaa6c8c Minor fix to disable_aggregate_mode(). 2025-01-02 17:11:43 -03:00
Bruno Perdigão 9838a54173 Minor fix in aggregate decorator. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 2c3c0b9d95 Improve performance for TAB into aggregate mode.
Use disable/enable constraint instead of `constraint.apply`. It keeps the
parts location with matrix calculation
2025-01-02 17:11:43 -03:00
Bruno Perdigão 548f6e0566 Improve performance for bim.aggregate_assing_new_objects_in_aggregate_mode()
Add constrain only to new objects instead of rebuilding all constraints from scratch.
2025-01-02 17:11:43 -03:00
Bruno Perdigão 3874d19caa Allow aggregate to me moved while in aggregate mode without moving its parts. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 87fee0b850 Add features for handling newly created objects in aggregate mode
- Highlight new objects in red when in aggregate mode
- Introduce an operator to add new objects to the current aggregate, accessible via a button in the header menu
2025-01-02 17:11:43 -03:00
Bruno Perdigão 3bccc993b7 Small fix in aggregate decorator. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 31ae2c5437 Create UI operators for aggregate mode in model workspace. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 85c48f6a63 Small refactor of aggregate decorator. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 833cc0604c Improve performance in aggregate mode by removing hide_select.
Additionally, update rendering of objects outside the aggregate to use
 'WIRE' instead of 'BOUNDS'.
2025-01-02 17:11:43 -03:00
Bruno Perdigão 3dd83598e9 Prevent TAB from editing objects outside the aggregate in aggregate mode. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 3050abdb87 Small fix. 2025-01-02 17:11:43 -03:00
Bruno Perdigão f7c4b13d0a Aggregate decorator refactor. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 91d3b8161e Integrate aggregate mode toggle with Bonsai's TAB edit mode override. 2025-01-02 17:11:43 -03:00
Bruno Perdigão e9cc205ddd Enable aggregate decorator by default on file startup. 2025-01-02 17:11:43 -03:00
Bruno Perdigão c48f50a67e Small fix in aggregate move selection. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 6d9ee8828e Small fix 2025-01-02 17:11:43 -03:00
Bruno Perdigão 28c95a7d9a Remove debug print statements. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 9a6ff7c37c Add bounding box decorator over aggregates. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 226ea10de8 Add aggregate mode decorator. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 3c590f097a Prevent aggregate objects to be edited by TAB when not in aggregate mode. 2025-01-02 17:11:43 -03:00
Bruno Perdigão cbdbd5bd83 Add operator to toggle aggregate mode on and off. 2025-01-02 17:11:43 -03:00
Bruno Perdigão ccdf1cee0a Hide selection of objects outside the aggregate when in "aggregate edit mode". 2025-01-02 17:11:43 -03:00
Bruno Perdigão 21d3b1d472 Small fix 2025-01-02 17:11:43 -03:00
Bruno Perdigão 0c7a0a6bda Add aggregate decorator. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 3dcded819f Add new way to move objects that are a part of an aggregate.
Now, when trying to move an object that is a part of an aggregate, the
`OverrideMoveAggregate` will be called, meaning that it will move the whole
aggregation. It works by creating constraints and moving the aggregate instead
of the selected object.

It also introduces the idea of editing an aggregate (no hotkey yet). When active, the user
will be able to move the parts of the aggregate instead of the whole aggregation: https://imgur.com/IcCGtPN
2025-01-02 17:11:43 -03:00
Bruno Perdigão 6f11f74aac Apply aggregate constraints instead of removing. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 0daf4c9324 Remove constraints when object is unassigned from the aggregate. 2025-01-02 17:11:43 -03:00
Bruno Perdigão 7f838f81b4 Add aggregate constraints to import_ifc.py 2025-01-02 17:11:43 -03:00
Bruno Perdigão cf9446c4a5 Constrain part objects to aggregate object when creating aggregations. 2025-01-02 17:11:43 -03:00
Richard Brice 26ba761c68 Refactors alignment geometry 2025-01-02 11:10:56 -08:00
Gorgious56 bb9be861c8 Fix blend file being saved twice in a row with CTRL-S
This caused a noticeable hiccup when a large file is saved twice on a network drive. Also it messed up the backup system.
2025-01-02 14:32:29 +01:00
Gorgious56 ad815b697e Fix #5570 : Regen button now appears in the toolbar for windows and doors 2025-01-02 14:12:26 +01:00
Gorgious56 ca90ddc0b4 Fix 3134 : Flip shortcut is now displayed in the toolbar for doors and windows 2025-01-02 14:02:00 +01:00
Gorgious56 fb35e80be0 Editing the representation of an opening now updates the gpu shader accordingly 2025-01-02 13:06:14 +01:00
Gorgious56 21a62116a8 You can now hide all openings by pressing ESCAPE in the 3D Viewport
- Also fix CTD on UNDO after pressing ESCAPE due to previous commit
2025-01-02 11:17:48 +01:00
Gorgious56 c2708b13d9 Minor fix on previous commit to correctly go out of ifc edit mode without saving representation 2025-01-02 10:54:55 +01:00
Gorgious56 b949efe8ba Fix #5849 : Use Keymap item instead of modal operator for override escape in 3D viewport
- Enables the vanilla Blender autosave feature back, since a running modal operator deactivates it
- ESC is not used by any other vanilla keymap in the 3D viewport (may be conflict with other addons)
- Hitting ESC over another type of editor (eg enum field in the properties editor) will not trigger disabling ifc item mode
- You can now hit ESC in IFC edit mode to cancel editing the geometry and go back to ifc object mode
2025-01-02 10:27:52 +01:00
Thomas Krijnen 463289e462 pyodide build (#5916) 2024-12-31 16:09:54 +01:00
Thomas Krijnen 2fbb47d797 build_pyodide.yml 2024-12-30 17:07:40 +01:00
Thomas Krijnen 6d3612bd5b WASM build updates 2024-12-30 16:47:59 +01:00
Thomas Krijnen 3592e3f9c0 cityjson off by default 2024-12-30 16:44:47 +01:00
Andrej730 8fc0d7a808 Polyline tool - use Blender icons for status bar text
To make it similar to default Blender operators.
Example - https://i.imgur.com/wUEQeQL.png
2024-12-30 17:28:01 +05:00
Andrej730 9454d281fc handle_snap_selection - disable in input mode
As it's used in mouse mode and in input mode it just recalculates the values.
2024-12-30 17:28:01 +05:00
Andrej730 64e4f00f19 Left mouse to cancel input mode in polyline tool
Previously it would just have no effect, now it should be more natural.
2024-12-30 17:07:53 +05:00
Andrej730 0f25701967 validate_input - add basic tests 2024-12-30 17:07:53 +05:00
Andrej730 80fec36b98 validate_input - allow typing feet value without feet symbol
Similar to how we don't require to specify meters when project is in meters.
2024-12-30 17:07:53 +05:00
Andrej730 1065239501 validate_input - add rounding to remove float garbage 2024-12-30 17:07:53 +05:00
Andrej730 8f4b0f1fd6 Fix error refresh linked aggregate with 2+ levels of aggregates #5911
Error occurred if IfcElementAssembly, that was currently refreshed, had another IfcElementAssembly as it's part. Then, it was removed twice - once during delete_objects and another time during delete_ifc_object, leading to the error.
2024-12-30 17:07:52 +05:00
Andrej730 6965399b2a typing 2024-12-30 17:07:52 +05:00
Andrej730 da9cbbc61b black . 2024-12-30 11:58:35 +05:00
Ryan Schultz b506b72d9f Toggle openings for part's aggregate as well. 2024-12-29 17:05:21 -06:00
Ryan Schultz 78afcf9c7a Be able to close openings no matter what is selected. 2024-12-29 16:07:56 -06:00
Ryan Schultz c562a2c2ac closes #5876: be able to 'apply void' no matter which order you select the wall (or any other class object) and void. 2024-12-29 12:49:38 -06:00
Thomas Krijnen f3c52c5cbf Quick wrapper clean-up 2024-12-29 15:53:21 +01:00
Thomas Krijnen 9fa44fdc3c Setting rename 2024-12-29 15:53:07 +01:00
Bruno Perdigão 973dd818c4 Add slab direction decorator.
It's useful when working with angled slabs. There is no UI for it yet.
2024-12-27 21:02:47 -03:00
Andrej730 f362ba4edc Fix typo
Co-Authored-By: sboddy <12862430+sboddy@users.noreply.github.com>
2024-12-27 21:21:54 +05:00
Andrej730 2b1126d24d Hide list attributes from attributes UI
As they're more internal and not very useful to users.
Example of list attributes popping up before this commit - https://i.imgur.com/Nxcb10O.png
2024-12-27 19:43:30 +05:00
Andrej730 227f315746 Support quantity take-off for element types
Previously it would ignore any element types and work only on occurrences though quantity sets do support product types in general.
2024-12-27 19:43:30 +05:00
Andrej730 d55a291589 get_top_area to calculate area for the roof #5899 2024-12-27 19:43:30 +05:00
Andrej730 6c6e40b07c get_side_area - add angle argument 2024-12-27 19:43:30 +05:00
Andrej730 810ad58c06 Fix get top area doc-string
It says that angles lower than the provided angle are ignored when it actually works the opposite way.
2024-12-27 19:43:29 +05:00
Andrej730 19c1394d94 typing 2024-12-27 19:43:29 +05:00
Andrej730 c770776228 Quantity take-off - add a fallback option #5899
If current set of rules (e.g. IfcOpenShell) doesn't provide a way to quantify some type of element, then user now have an option to fallback to other calculator (Blender).

Location - https://i.imgur.com/csIPOuo.png
2024-12-27 19:43:29 +05:00
Andrej730 00ba54f5f2 blender qto calculator - simplify x, y, z calculations 2024-12-27 19:43:29 +05:00
Andrej730 845ebb8543 Fix bug in Blender quantities calculator ignoring openings from an aggregate
It wasn't considering that object's geometry might be also altered by opening added not directly but to it's aggregate.
2024-12-27 19:43:29 +05:00
Andrej730 5ef10073cd black . 2024-12-27 19:43:28 +05:00
Bruno Perdigão b9423b191a Add AddWallsFromSlab operator.
This operator allows users to create walls from a slab.
When the wall tool is active, pressing `Shift + A` will generate walls based on the exterior polygon of the selected slab.
2024-12-27 11:27:30 -03:00
Bruno Perdigão ba5e968b8f Fix bug caused by refactor a6a8a0f4b. 2024-12-27 09:40:59 -03:00
Bruno Perdigão 5e77453d1d Add "Edge Intersection" option to snapping points. 2024-12-26 18:25:43 -03:00
Bruno Perdigão a6a8a0f4b7 Small refactor in snapping system. 2024-12-26 18:17:39 -03:00
Bruno Perdigão e65af4425e Add decorator for "Edge Intersection" snapping point. 2024-12-26 18:17:39 -03:00
Andrej730 a4aaf9b4c3 Add info message if some elements were skipped from quantification #5905
Example - https://i.imgur.com/DwklNFS.png
2024-12-26 18:27:55 +05:00
Andrej730 51c9e1eaa2 Save loaded paths to linked IFC models in IFC #5899
Short demo - https://imgur.com/a/3LIt9Sr
2024-12-26 18:26:26 +05:00
Andrej730 f8828d3853 If models linked using relative path - store path as relative to ifc, not blend
As now we do support storing the list of linked models in IFC.
2024-12-26 18:26:26 +05:00
Andrej730 03793db75f Keep IfcStore.path as empty string if file is not saved
Previously it would get cwd value in that case as bpy.path.abspath("//") returns cwd if .blend is not saved.
2024-12-26 18:26:26 +05:00
Thomas Krijnen faa13a938d Preliminary file existance check before attempting mapping 2024-12-26 14:03:36 +01:00
Thomas Krijnen 457f441187 Fix comparison in destructor 2024-12-26 14:03:36 +01:00
Andrej730 6486a8947c Fix macos builds 2024-12-26 15:36:51 +05:00
Andrej730 3b10d8a9c4 Fix error loading document references in ifc2x3 after 1655341 2024-12-25 17:40:52 +05:00
Andrej730 60d6252fe7 Change documents name/identification from UI
Example - https://imgur.com/a/TAkxxSF
2024-12-25 17:40:51 +05:00
Andrej730 ff147a4c24 Fallback for queries if no elements filter is provided #5901 2024-12-25 17:40:51 +05:00
Andrej730 e3aaf5defa dev_environment - stop script execution on errors 2024-12-25 15:21:00 +05:00
Andrej730 6aaaf99314 dev_environment - move wild cards out of quotation marks #5904 2024-12-25 15:21:00 +05:00
Andrej730 1e4420d824 dev_environment - remove redundant slash at the end of BLENDER_PATH
Co-Authored-By: tim <59872808+trhyder@users.noreply.github.com>
2024-12-25 15:21:00 +05:00
Andrej730 769025e084 typing 2024-12-25 15:20:40 +05:00
Andrej730 f62b8073c6 black . 2024-12-25 15:20:40 +05:00
Bruno Perdigão 75483edb22 Fix limitations in AddSlabFromWalls operator.
- The operator is now unaffected by the order in which walls are joined.
- It has been updated to support split walls.
2024-12-23 18:12:29 -03:00
Bruno Perdigão d44942fbae Typo 2024-12-23 18:10:35 -03:00
Bruno Perdigão 051da8e481 Allow mitre join to create a connection between contiguous walls. 2024-12-23 18:10:35 -03:00
Bruno Perdigão 46c7981842 Change "Split" function to create connection between the new walls. 2024-12-23 18:10:35 -03:00
Bruno Perdigão 7dbfe91b4b Allow intersect_edges_v2 to work with 2d vectors. 2024-12-23 18:10:35 -03:00
Andrej730 7e8094aaa0 bim.load_linked_project - move processing chunk code to common method 2024-12-23 18:59:56 +05:00
Andrej730 20172a29c2 small optimization
avoid copying arrays of data if not necessary
2024-12-23 18:59:56 +05:00
Andrej730 39b64775be bim.load_linked_project - add invoke for debugging purposes 2024-12-23 18:59:56 +05:00
Andrej730 170b6fc67e typing 2024-12-23 18:59:55 +05:00
Andrej730 6dfb25862c black . 2024-12-23 18:59:55 +05:00
Andrej730 f1080a8278 ifcopenshell.open - more robust file existence check 2024-12-23 16:19:56 +05:00
Andrej730 6b0b7989b0 Fix error appending elements without type #5902 2024-12-23 15:48:53 +05:00
Andrej730 9128bf2d47 Fix missing line after f22636d #5896 2024-12-23 15:32:15 +05:00
Andrej730 6edc6cec71 Fix Migrate not migrating ifc file header #5903 2024-12-23 12:33:32 +05:00
Andrej730 d0e2995a84 bim.copy_text_to_clipboard - more detailed tooltip
Now it will show the text being copied (e.g. attribute name).
2024-12-23 12:33:17 +05:00
Andrej730 31069d6643 Fix error creating polylines in ifc2x3 after 9fbcb39
By accident it was providing numpy array instead of ifc points entities.
2024-12-23 12:33:17 +05:00
Andrej730 09b4681413 Fix #5892
By accident not commited `attr = context.button_pointer` line that was leading to console errors
2024-12-23 11:35:55 +05:00
Ryan Schultz cb0fdbec66 Quick way to get search strings from selections: https://community.osarch.org/discussion/comment/23305/#Comment_23305 2024-12-22 11:25:42 -06:00
Bruno Perdigão 40f1055ac3 Add AddSlabFromWalls operator.
This operator allows users to create a slab from a selected closed loop of walls.
When the slab tool is active, pressing `Shift + A` will generate a slab based on the exterior polygon of the selected walls.
2024-12-20 17:42:13 -03:00
Bruno Perdigão 44ef07c43e Add WallAxisDecorator. 2024-12-20 17:42:13 -03:00
Andrej730 1f68464d46 Bonsai Attribute to support copying it's name to clipboard #5892
Example - https://i.imgur.com/Jf1jofZ.png
2024-12-20 19:39:47 +05:00
Andrej730 f7395ccd52 Fix misleading CAD Fillet hotkey, add some CAD hotkeys descriptions #5893
It was misleadingly displayed in UI as shift+v while it was shift+f.
2024-12-20 18:59:22 +05:00
Andrej730 a79c4b1ace typing 2024-12-20 18:59:22 +05:00
Thomas Krijnen 579628fcb1 Properly handle taxonomy::loft with curved edges coming from ExSolidTapered #5891 2024-12-20 13:49:33 +01:00
Andrej730 74fe1b4eb9 append_asset - ensure to update existing rels appending second asset
E.g. in #5890 pset was shared by 2 elements and they it worked is
1) it appended first element and it's rel to pset
2) it appended second element and skipped updating it's rel as it was appended before. Now it's going to update it to ensure it encludes second element too.

I believe, issue occurred after 8c28f52 when we stopped duplicating inverses and started to reuse them.
2024-12-20 12:47:10 +05:00
Bruno Perdigão 8c6eddfb66 Disable LEFTMOUSE when input mode is on, in polyline tool. 2024-12-19 20:02:39 -03:00
Andrej730 284ec46b81 add_door_representation - remove mathutils dependency #5192 2024-12-19 18:31:49 +05:00
Andrej730 d6e6a6d559 add_railing_representation - remove mathutils dependency #5192 2024-12-19 18:31:49 +05:00
Andrej730 f22636d880 add_window_representation - remove mathutils dependency #5192 2024-12-19 18:31:49 +05:00
Andrej730 eae92b55bb shape_builder - np utils 2024-12-19 18:31:49 +05:00
Andrej730 5b315bfa8f shape_builder - add test for mirror 2024-12-19 18:31:49 +05:00
Andrej730 5cd769e5b4 shape_builder tests - remove mathutils dependency #5192 2024-12-19 18:31:49 +05:00
Andrej730 e2b550f7af regenerate furniture library after migrating to numpy 2024-12-19 18:31:48 +05:00
Andrej730 bf892a6a06 Furniture library - small change after #4989 2024-12-19 18:31:48 +05:00
Andrej730 0e8eeb18ac shape_builder - remove mathutils dependency completely #5192 2024-12-19 18:31:48 +05:00
Andrej730 b4a0a5df6c mathutils deprecation - mep_bend_shape #5192 2024-12-19 18:31:48 +05:00
Andrej730 5469d3f9d5 mathutils deprecation - mep_transition_shape #5192 2024-12-19 18:31:48 +05:00
Andrej730 4a68285d1f mathutils deprecation - meshes #5192 2024-12-19 18:31:48 +05:00
Andrej730 01c2edfd16 mathutils deprecation - extrude #5192 2024-12-19 18:31:47 +05:00
Andrej730 c32616faca mathutils deprecation - mirror #5192 2024-12-19 18:31:47 +05:00
Andrej730 6e8815eacc mathutils deprecation - rotate #5192 2024-12-19 18:31:47 +05:00
Andrej730 8250f02866 mahtutils deprecation - translate #5192 2024-12-19 18:31:47 +05:00
Andrej730 c1ec42c95b mathutils deprecation - circle, plane, placements, curves #5192 2024-12-19 18:31:47 +05:00
Andrej730 63f56d2f21 mathutils -> numpy - polyline, rectangle #5192 2024-12-19 18:31:47 +05:00
Andrej730 bd0cf6cf3f black . 2024-12-19 18:31:46 +05:00
Andrej730 7be21bf02e mep - fix errors adding a bend/a transition
mesh is already removed by replace_object_ifc_representation
2024-12-19 18:31:46 +05:00
Thomas Krijnen 352e361ea5 Check for nullptr before resolving inverses 2024-12-19 10:40:59 +01:00
Thomas Krijnen 9efc9d2044 Fix iteration over indeterminate in rule execution 2024-12-18 11:45:47 +01:00
Thomas Krijnen d271fd1779 Fail faster on representation map not suitable for reuse #5672 2024-12-17 20:58:10 +01:00
Thomas Krijnen bd7c19a861 Defensiveness #5683 2024-12-17 20:57:01 +01:00
Thomas Krijnen abb1fe6f60 #5684 Ignore singular object placement 2024-12-17 13:30:21 +01:00
Thomas Krijnen 243e974866 Fetch when already cloned in nix build script 2024-12-17 12:28:32 +01:00
Ryan Schultz 07cf701e90 tweaks to a9defb94d0
thanks @Andrej730 for the direction.
2024-12-14 13:07:53 -06:00
Thomas Krijnen 1d271611c4 Try work-around brew install issue on OSX build 2024-12-14 15:34:42 +01:00
Thomas Krijnen 559ef3086a Only manual dispatch for full builds due to LFS quota 2024-12-14 15:34:15 +01:00
Andrej730 7f1b234045 Fix #5871 2024-12-13 19:07:58 +05:00
Andrej730 2251679479 Skip parts without polygons converting mesh to tessellation #5870
As IFC doesn't allow mixed geometry types anyway.
2024-12-13 19:07:57 +05:00
Andrej730 34e8e8911d geometry test - IfcSweptDiskSolid 2024-12-13 19:07:57 +05:00
Andrej730 c4945970e3 test IfcCircle values 2024-12-13 19:07:57 +05:00
Andrej730 99c752904a Fallback to add_representation for mesh curves #5870 (after 42f32e3) 2024-12-12 18:16:12 +05:00
Andrej730 8574057340 bim.hide_booleans to hide all selected booleans, not just active
short demo - https://imgur.com/a/1h2glfj
2024-12-12 17:44:55 +05:00
Andrej730 363c3b0010 bim.show_booleans to show booleans for all selected objects 2024-12-12 17:44:55 +05:00
Andrej730 e098a7c4fc Add option to disable loading index maps #5848
As currently it might still might take too long
2024-12-12 16:55:56 +05:00
Andrej730 ae61f28df7 Optimize loading index map - finding closest vert index #5848 2024-12-12 16:55:56 +05:00
Andrej730 d8cfc017d4 Optimize loading index map #5848
Use dict of face sets so we can get face data in O(1) instead of going through all of O(n).
2024-12-12 16:55:56 +05:00
Bruno Perdigão 4e0a813eb4 Fix Solar Analysis UI after changes in Sun Position Add-on.
Changes in this file: https://projects.blender.org/pioverfour/sun_position/src/branch/main/sun_calc.py
2024-12-11 16:39:12 -03:00
Bruno Perdigão a447776fd7 Change georeference decorator UI. 2024-12-11 16:38:24 -03:00
Thomas Krijnen eb68264bed Support inner loops in occt sweep_along_curve #5859 2024-12-11 10:54:01 +01:00
Thomas Krijnen a84a5815d6 Don't check for BOPAlgo_AlertAcquiredSelfIntersection at all for now 2024-12-10 21:45:39 +01:00
Thomas Krijnen 139b83ea0c Re-enable remove_duplicate_points_from_loop 2024-12-10 21:30:43 +01:00
Thomas Krijnen ab17c8ffd9 Re-enable force_close in profile curve handling 2024-12-10 21:26:58 +01:00
Thomas Krijnen 0708f49973 Re-enable wire self-intersection handling 2024-12-10 21:26:06 +01:00
Thomas Krijnen a728470b76 Allow BOPAlgo_AlertAcquiredSelfIntersection when its our final fuzziness attempt 2024-12-10 21:18:20 +01:00
Thomas Krijnen 72eed36313 Rework debug flags in settings 2024-12-10 21:17:37 +01:00
Andrej730 fc9bcb0b82 Support reloading disk solids representation that use Blender curves 2024-12-10 18:09:27 +05:00
Andrej730 5df93cbb52 Support InnerRadius for disk imported as Blender curves #5859 2024-12-10 18:09:26 +05:00
Andrej730 1e0ca1d891 convert-back-units test #5864 2024-12-10 18:09:26 +05:00
Andrej730 9cd4ff9de4 Fix error adding an occurrence with no type selected #5863 2024-12-10 18:09:26 +05:00
Andrej730 b1231b74e2 Save texture style without textures to remove texture style
Mentioned in 618ba51, it probably will be more natural this way - if there are no textures, we hide UV attribute to indicate that it won't be saved and on save we either do nothing, if texture style wasn't saved before, or remove it.
2024-12-10 18:09:26 +05:00
Thomas Krijnen ea68f90693 Fix other unit conversion issues #5864 2024-12-10 11:19:43 +01:00
Thomas Krijnen 064ccf8ab6 Always apply shape healing to faces with inner bounds for wrong orientation 2024-12-10 09:24:29 +01:00
Thomas Krijnen db865ec88f Revert submodule change in 586f9be077 2024-12-10 09:24:29 +01:00
Ryan Schultz 91a061325d Perform quantity take off near object's QTO. https://imgur.com/a/kzBA1GB 2024-12-09 15:13:13 -06:00
Andrej730 ce6a5080cd Added headers for resources and cost schedule
Need to polish it and readjust it, just adding some headers to make tables more readable.
https://i.imgur.com/5Lb8Vrc.png
https://i.imgur.com/UYysZF1.png
2024-12-09 18:30:12 +05:00
Andrej730 8039fcd6f7 Fix invalid ifc saving texture style without any textures / option to remove surface style
Now it won't allow saving texture style without textures and there is a button to remove part of surface style.
2024-12-09 18:30:05 +05:00
Andrej730 194e033662 Fix error editing lighting style attributes 08e38c6 2024-12-09 18:30:05 +05:00
Andrej730 77a4145dcf Fix error message creating texture style without render style
It was suggesting that it's possible to create it with just shading style though it's not currently supported.

Now it also appears when user is about to enable texture style editing, not when they're already trying to save the changes.
2024-12-09 18:30:05 +05:00
Andrej730 365d82f1d5 Loading texture maps - fallback to absolute paths
If it's not possible to get relative path, fallback to absolute path and show an info message.
2024-12-09 18:30:05 +05:00
Andrej730 618ba5187c Readable error trying to create a texture style without textures #5855 2024-12-09 18:30:04 +05:00
Andrej730 6090c1c669 typing 2024-12-09 18:30:04 +05:00
Andrej730 1572bf36a7 Add descriptions to style/material selection operators 2024-12-09 16:56:15 +05:00
Andrej730 2e0ca32653 black . 2024-12-09 16:56:14 +05:00
Ryan Schultz 5086fcc35a small fix to previous commit. 2024-12-08 20:12:03 -06:00
Ryan Schultz a9defb94d0 Improved UI for BIM_PT_object_material
also can run `bim.select_by_material` by clicking on material name
2024-12-08 20:01:49 -06:00
Ryan Schultz 586f9be077 When toggling openings, voids are wireframe.
Discussed: https://community.osarch.org/discussion/2592/any-objections-of-changing-voids-to-wireframe-when-you-toggle-openings
Also, if you keep hitting tab, it cycles in and out of edit mode.
2024-12-07 15:31:37 -06:00
civilx64 ad35ceef2a add missing import for ifcopenshell.api.georeference 2024-12-07 18:17:36 +01:00
Ryan Schultz 93ec1cbfc2 closes #5086: a preference to assign which classes display as wireframe upon opening the IFC file 2024-12-07 10:58:58 -06:00
Thomas Krijnen 8bba25497b Add material name in gltF 2024-12-07 16:36:40 +01:00
Thomas Krijnen 9160038359 Reuse more existing api in cgal face self-intersection detection #5820 2024-12-07 16:26:59 +01:00
Andrej730 c4ffc06a88 Bonsai - extract elements from selection #4316
Demo - https://imgchest.com/p/xny8qvox5yb
You can also now reuse 'bpy.data.texts['globalid-filter-3UvnD5Ml95zBDEcwAkAUIp']' kind of queries from Search in ExtractElements query.
2024-12-06 18:57:55 +05:00
Andrej730 2a713846ce bonsai ifcpatch - add warning for unsupported patches
For patches that require filepath to be provided explicitly (they are still supported with "Load from memory" unchecked).
2024-12-06 18:57:55 +05:00
Andrej730 c306014190 ifcpatch - input and file arguments #2751
documented when input is currently required
2024-12-06 18:57:55 +05:00
Andrej730 2da5f2d61e set_element_value - optimizations setting enum values
1) Identify from previous pset value whether prop was an enum (by checking if previous value is a list), instead of searching through prop templates

2) Compare previous and new enum values - if they match, skip editing IFC.
2024-12-06 18:57:54 +05:00
Andrej730 c7af55183b set_element_value for enums - add a test 2024-12-06 18:57:54 +05:00
Andrej730 6fe5af3170 Fix regression for switching to Point/PointCloud representations 2024-12-06 18:57:54 +05:00
Andrej730 73185293df Fix long time missing create_cog_representation
It was used in the code but method wasn't defined. I believe it was lost during 8b7d968 😁
2024-12-06 18:57:54 +05:00
Andrej730 6d01d71c60 add_representation.create_cartesian_point - fix missing z offset for 0 values 2024-12-06 18:57:54 +05:00
Andrej730 848af67fbb typing 2024-12-06 18:57:53 +05:00
Andrej730 8609bd12cc Fix default container label not updating #5817 2024-12-06 15:42:23 +05:00
Andrej730 3446643816 bim.switch_representation to handle representations with the same context
1) If object had multiple representations for the same context, then switch simply wouldn't work as it would always pick up the first representation it could find. Now it prioritizes the one user is selecting in UI.

2) If some object is selected and it also has multiple representations for the same context, then switch representation would switch it to any representation in that context it first finds. As user doesn't provide representation explicitly in that case, now it will stick to the already active representation on selected object if it matches the context, to avoid accident switches.

Notcied by working with example from #5824
2024-12-05 18:32:54 +05:00
Andrej730 1b61cbba8f typing 2024-12-05 18:28:45 +05:00
Andrej730 8d2b783b4a fix small bug in 939cc63ca 2024-12-05 17:24:33 +05:00
Andrej730 538365885b Hide output path for ifcpatch without output #4721 2024-12-05 17:24:33 +05:00
Andrej730 939cc63cae SplitByBuildingStorey - fix errors, fix Bonsai UI #4721
- The patch was failed when executed from Bonsai since self.src wasn't provided, fixed now.
- Added a temporary hack to diplsay file selector for this patch.
- small refactor.
2024-12-05 17:16:26 +05:00
Andrej730 13106d255c int formatting function #5039
Example - https://i.imgur.com/wDGFNci.png
2024-12-05 15:52:27 +05:00
Andrej730 9cf34f9d8c Select profile for profile type objects #5814
Demo - https://imgchest.com/p/9rydjxwanyk
2024-12-05 15:21:28 +05:00
Andrej730 eb87e7e866 Fix UI errors when selecting directories in file browser
It was only checking if it's existing path but wasn't checking whether it's a file, therefore directories with suffixes were slipping in and then failing during `IfcHeaderExtractor(filepath)`.
2024-12-04 17:46:55 +05:00
Andrej730 e4597708d7 simplify getting view 3d space
If area is VIEW_3D then area.spaces.active is always VIEW_3D too.
2024-12-04 17:46:55 +05:00
Andrej730 bb441ade3f Fix error loading external shader styles
Mentioned in logs from #5820
Turned out, `area.spaces` also contain all other spaces this area used (e.g. it used be view3d before it became a nodegraph) leading to errors. Simplifying it with `area.spaces.active`.
2024-12-04 17:46:55 +05:00
Andrej730 00a509aa0b typing 2024-12-04 17:46:55 +05:00
Andrej730 69fb486778 black . 2024-12-04 17:12:36 +05:00
Thomas Krijnen aef38bd869 Fix matrix access in XmlSerializer #5840 2024-12-04 10:39:01 +01:00
Andrej730 7b09c9ad3b Bonsai - handle invalid authorization None value in the header #5834 2024-12-04 14:16:51 +05:00
Richard Brice eadf35f031 Fixes unit conversion for polynomial coefficients 2024-12-02 14:45:05 -08:00
Thomas Krijnen f425794182 submodule 2024-12-01 20:26:18 +01:00
Thomas Krijnen 4d90684778 empty 2024-12-01 20:03:16 +01:00
Thomas Krijnen 049173286a Bump precision in wkt output 2024-12-01 19:05:22 +01:00
Thomas Krijnen 1ecf722111 Assert single polygon in arrange-spaces and no need for the closing point 2024-12-01 19:04:59 +01:00
Thomas Krijnen 85c0992975 submodule 2024-12-01 19:04:08 +01:00
Thomas Krijnen b9f790217e Initialize only_valid_ 2024-12-01 11:21:58 +01:00
Thomas Krijnen 4bb112ce71 Manually parse SVG polygons for space arrangement 2024-12-01 11:21:38 +01:00
Thomas Krijnen efd05158c4 Propagate unit settings 2024-12-01 11:21:15 +01:00
Thomas Krijnen 3a687fecda SVG reliance on UseElemHierarchy for storey decomposition 2024-12-01 11:20:37 +01:00
Thomas Krijnen df060d7f60 submodule 2024-12-01 11:19:34 +01:00
Ryan Schultz e3317af56d fix #5806: When unlocking spatial objects, that it turns on select-ability as well. 2024-11-30 15:40:26 -06:00
Thomas Krijnen da78a1107d Fix validation error in non-aggregate aggregate #5830 2024-11-30 17:49:29 +01:00
Ryan Schultz b52edcea40 Use Top/Bottom when LayerSetDirection = AXIS3 2024-11-29 09:55:42 -06:00
Thomas Krijnen 4ec8ceb134 Reintroduce --center-model and --center-model-geometry 2024-11-29 13:03:56 +01:00
Thomas Krijnen 8edbb37121 Fix latebound entity inheritance hierarchy wrt id() #5822 - not ideal, because BaseEntity.declation now returns declaration 2024-11-28 12:57:08 +01:00
Andrej730 c9847caa6a ifccsv - support importing enum values #4608 2024-11-27 18:30:37 +05:00
Andrej730 b7db3da017 ifctester - save results to temp directory
the way it was intended to originally but absolute paths of ifc and ids got in the way
Replaced TemporaryDirectory with mkdtemp as sometimes .html report doesn't open fast enough and directory gets deleted. Also need to keep the directory to make sure .ods is not removed.
2024-11-27 18:30:37 +05:00
Andrej730 eca71032bf black . 2024-11-27 18:30:37 +05:00
Andrej730 ab069f431a typing 2024-11-27 18:30:37 +05:00
Andrej730 25eecded4e ifcopenshell.validate to validate guids #5808 2024-11-27 15:42:03 +05:00
Andrej730 cc014bb7ec ifcopenshell.write check if file was saved successfully #5809
will help only for the cases if file didn't existed before
2024-11-27 12:59:06 +05:00
Ryan Schultz ba7b0d5c4f When using queries in an IfcAnnotation tag surround with backticks 2024-11-26 21:48:46 -06:00
Bruno Perdigão 4f6e2586e1 Fix #5727 2024-11-26 10:42:26 -03:00
Andrej730 dea3722ca5 bim.select_failed_entities - add info message 2024-11-26 18:12:05 +05:00
Andrej730 268cbe9a69 remove debug print 2024-11-26 18:12:05 +05:00
Andrej730 85b7249a77 Fix error using cwd for titleblock path #5769
The titleblock is ifc relative, not .blend/cwd relative.

e.g. if you open Blender in C:\ and then would open .ifc from c:\path\to\project.ifc, it would try to create layouts folder in C:\layouts instead of c:\path\to\layouts
2024-11-26 18:12:05 +05:00
Andrej730 12c08b0697 typing 2024-11-26 18:12:05 +05:00
Andrej730 fb70374876 black . 2024-11-26 18:12:04 +05:00
Andrej730 a4145ecec2 Fix errors using shared path for drawing underlay #5803 2024-11-26 17:06:00 +05:00
Andrej730 4da9f12960 BIMMeshProperties.obj - document 2024-11-26 16:16:29 +05:00
Andrej730 04d3903ee2 bim.hide_boolean to apply changes to booleans transforms #5800
Example - https://imgchest.com/p/ljyq8zvwey2
2024-11-26 16:16:29 +05:00
Andrej730 c8e5b8f028 bim.show_booleans - not to load same booleans multiple twice #5800
Now it's checking whether they were reloaded before and removing previous instances.
2024-11-26 16:16:29 +05:00
Andrej730 b8468cb19c Mesh.subshape_type - replace with enum 2024-11-26 16:16:28 +05:00
Andrej730 e6f0f54c93 Mesh.ifc_definition - remove unused property
Introduced in 6cc4ce4, seems to be gone for a while now.
2024-11-26 16:16:28 +05:00
Andrej730 2ff7401803 ifc join to reuse poly curve points if possible 2024-11-26 12:39:19 +05:00
Andrej730 22009973a8 Support ifc joining curve sets of poly curves #5793
Will resolve 'Unsupported representation item type for joining: IfcGeometricCurveSet' kind of errors on IFC join.
2024-11-26 12:39:19 +05:00
Andrej730 c228866f51 Add error message on representation type mismatch #5793
Instead of failing silently
2024-11-26 12:39:19 +05:00
Andrej730 3856b281ea Fix sheets related poll errors 2024-11-26 12:39:19 +05:00
Ryan Schultz 6f7565f6f9 select objects within a certain tolerance--which is set in the preferences. 2024-11-25 22:12:27 -06:00
Ryan Schultz 65a8ae1093 Fix #5802, Thanks @sboddy! 2024-11-25 18:49:50 -06:00
Jesse Roodhorst e6f8ef992e tooltips for the drawing module added (#5798) 2024-11-25 18:21:41 +05:00
Andrej730 dd0355c539 Fix drawing activation if drawing properties are using temp window #5791 2024-11-25 18:07:45 +05:00
Andrej730 7475a8f989 add_slab_representation - add api description #5792 2024-11-25 17:30:31 +05:00
Andrej730 4d44ec7174 Fix creating arbitrary profile without object after e74adcb
Error: Python: Traceback (most recent call last):
  File "\bonsai\bim\ifc.py", line 443, in execute_ifc_operator
    result = getattr(operator, "_execute")(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\bim\module\profile\operator.py", line 172, in _execute
    if not indices:
           ^^^^^^^
UnboundLocalError: cannot access local variable 'indices' where it is not associated with a value
2024-11-25 16:52:57 +05:00
Andrej730 29f9f04d92 Change profile object UI #5796
example - https://imgchest.com/p/qb4zwj6ad4j
1) moved profile object selection to the same row as the profile type selection, so it will more noticable that they're related
2) added object requirements in the description
3) filtered only mesh objects to appear in the dropdown
2024-11-25 16:45:55 +05:00
Ryan Schultz fc736f725c tweaks to 812e3dc6df 2024-11-24 09:58:44 -06:00
Thomas Krijnen ba92e3140c Fix installation of some header files 2024-11-24 15:12:44 +01:00
Bruno Perdigão 99ad9ac305 Fix snap system (#5782) by changing the priorities.
The priority now follows this order:
1. Polyline
2. Measure
3. Faceless objects
4. Objects
5. Axis
6. Viewport plane
2024-11-23 12:53:44 -03:00
Bruno Perdigão dc6078a416 Small fix in model decorator 2024-11-23 10:52:39 -03:00
Bruno Perdigão 0267e2b5e0 Add option to change the size of the georeference decorator. 2024-11-22 14:48:57 -03:00
Thomas Krijnen 352a2e2eb8 Quotes 2024-11-22 14:00:30 +01:00
Andrej730 091ed3bb8d Fix possible crash removing resource after 1f21e96 2024-11-22 17:13:05 +05:00
Andrej730 69eca15195 resources import/export - support resource quantities 2024-11-22 17:13:05 +05:00
Andrej730 a551ea36df related_object_type - use enum instead of stringproperty 2024-11-22 17:13:05 +05:00
Andrej730 1116bcc296 bim.assign_cost_item_quantity - add dynamic description
Example:
- https://i.imgur.com/J3LFiYu.png
- https://i.imgur.com/ufC2LzD.png
2024-11-22 17:13:05 +05:00
Andrej730 4ef1afa8bb resources - support importing/exporting ScheduleUsage 2024-11-22 16:57:54 +05:00
Andrej730 164e5c69ca bim.export_resources #5760
Simple export for resources to csv file, supports just the same fields that import currently does.
Location - https://i.imgur.com/Ssz7BwZ.png
2024-11-22 16:57:26 +05:00
Thomas Krijnen 8420823342 Only package exes for one entry in matrix 2024-11-22 12:18:55 +01:00
Andrej730 71637f120a Fix "Restart Blender" button for Microsoft Store Blender #5582 2024-11-22 14:32:01 +05:00
Thomas Krijnen 1d6cbc4b76 Add --with-filesystem to boost build (for voxelization toolkit) 2024-11-22 09:31:23 +01:00
Thomas Krijnen faf5c0ab30 Submodule 2024-11-22 09:21:16 +01:00
Thomas Krijnen e86b419414 Empty 2024-11-21 19:57:20 +01:00
Thomas Krijnen c3154b3755 Transfer build output repo 2024-11-21 15:40:34 +01:00
Thomas Krijnen a37b5c5b62 Github Action build scripts! 2024-11-21 15:40:34 +01:00
Thomas Krijnen f91fedf69c Win build script - check for installed deps 2024-11-21 15:26:14 +01:00
Thomas Krijnen 7028d67e00 nix boost 1.86, diskcleanup option 2024-11-21 15:25:47 +01:00
Thomas Krijnen 957369219c More verbosity on invalid enumeration literals 2024-11-21 15:16:56 +01:00
Stephen Boddy 04e84f7aed Fix #5770 so sheet subitems can be opened using svg command too, not just the main sheet. I was a little overzealous adding poll methods in 099703f 2024-11-21 18:18:36 +05:00
Andrej730 4bde423c50 Date picker UI for IfcDate type attributes
Example - https://imgchest.com/p/5xy2bekl3yl

set_prop_from_path method got from https://blenderartists.org/t/set-property-using-path-from-path-from-id-prop-path-resolve/1559166
2024-11-21 18:11:59 +05:00
Andrej730 4891e4ffed Fix not applying transforms in case if there's only parent or only constraints 2024-11-21 18:11:58 +05:00
Andrej730 8a31e8d149 Auto update cost item rates when enabling editing non-sor cost schedule
There was an issue that it wouldn't load until you manually select it in the "Cost Item Rates" enum - otherwise items didn't appear the first time cost schedule opened and didn't not update when you makes changes to the active schedule of rates.
2024-11-21 18:11:58 +05:00
Andrej730 6e56fe8f9b bim.load_schedule_of_rates_tree - remove dead code
This operator is unused anymore since d3b176e and it's using non-existent core method.
2024-11-21 18:11:58 +05:00
Andrej730 15354d2e06 bim.assign_cost_value - add description 2024-11-21 18:11:58 +05:00
Andrej730 37141c89ac bim.assign_cost_item_quantity - to show error if no related objects were found
Just to make UI more responsive - e.g. if some objects are selected but they are not products.
2024-11-21 18:11:58 +05:00
Andrej730 610665d732 Fix bug with TEXT annotations types showing up in TEXT_LEADER annotation types list 2024-11-21 18:11:38 +05:00
Andrej730 2381e9e4e6 bim.import_resources - add info message about imported resources
Example - https://i.imgur.com/NlZRIzw.png
2024-11-21 18:11:38 +05:00
Andrej730 670a85fd8c Hide class assignment panel for handles from linked models 2024-11-21 18:11:37 +05:00
Andrej730 b2e3a4dd82 typing 2024-11-21 18:11:37 +05:00
Andrej730 ec521916da black . 2024-11-21 18:11:37 +05:00
Thomas Krijnen 2f7412d0c1 install serializer libs 2024-11-21 09:15:04 +01:00
Andrej730 3b6128b2df bim.assign_class to apply transform from parents and constraints
To avoid confusing situations when user would assign a class, move object around and save ifc file, then to realize that it was saved using just local transforms which can be completely different.
2024-11-20 15:47:41 +05:00
Andrej730 857dd3aa60 Fix linking ifc using relative paths #5768 2024-11-20 14:48:23 +05:00
Andrej730 1a72089b3b Blender 4.3 - fix not hidden Blender scene panels #5767
No idea what happened but in Blender <4.3 `type(bpy.types.SCENE_PT_rigid_body_world_settings.bl_rna)` is `<class 'bl_ui.properties_scene.SCENE_PT_rigid_body_world_settings'>` which is `bpy.types.Panel` but in Blender 4.3 it's now is `bpy.types.Struct`. Using `.base` seems to work for both versions.
2024-11-20 12:02:04 +05:00
Andrej730 361e0419cf Bump Blender to 4.3 in tests 2024-11-20 12:02:04 +05:00
Andrej730 351bc3f364 Bump dev_environment Blender version to 4.3 2024-11-20 12:02:04 +05:00
Ryan Schultz bf717622a0 Assign the render engine via shading_styles.json instead of hardcoding it. 2024-11-19 14:39:49 -06:00
Andrej730 6cc75c1164 Fix error assigning product to non-text annotations (e.g. dimension)
Error: Python: Traceback (most recent call last):
  File "\bonsai\bim\ifc.py", line 443, in execute_ifc_operator
    result = getattr(operator, "_execute")(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\bim\module\drawing\operator.py", line 2960, in _execute
    core.edit_assigned_product(tool.Ifc, tool.Drawing, obj=context.active_object, product=product)
  File "\bonsai\core\drawing.py", line 66, in edit_assigned_product
    drawing.update_text_value(obj)
  File "\bonsai\tool\drawing.py", line 983, in update_text_value
    cls.import_text_attributes(obj)
  File "\bonsai\tool\drawing.py", line 904, in import_text_attributes
    props.font_size = str(text_data["FontSize"])
2024-11-19 20:15:44 +05:00
Andrej730 d032f75e61 Fix error updating decorations removing active drawing
should_draw_decorations is updated as part of regular refresh_ui_data.
'removed_drawings' line was a dead code

Traceback (most recent call last):
  File \bonsai\bim\module\drawing\prop.py", line 252, in update_should_draw_decorations
    collection = context.scene.camera.BIMObjectProperties.collection
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'BIMObjectProperties'
File \bonsai\bim\module\drawing\prop.py", line 249, in update_should_draw_decorations
2024-11-19 20:15:44 +05:00
Thomas Krijnen 9bbf345fd7 https://github.com/IfcOpenShell/svgfill/pull/8 2024-11-19 15:50:31 +01:00
Thomas Krijnen 75d7fcdc4b Submodule 2024-11-19 15:34:23 +01:00
Thomas Krijnen 2b3af4cddb Move issue content to test case #5752 2024-11-19 12:51:11 +01:00
Thomas Krijnen 96d6d5bfbe Fix validation false positive on Number #5752 2024-11-19 12:49:10 +01:00
sboddy c7e7031ee5 Fix #5725: Remember DPI and drawing modes (#5762) 2024-11-19 15:32:08 +05:00
Thomas Krijnen 1c54be84ba Fix #5763 use OuterWire 2024-11-19 11:05:20 +01:00
Andrej730 213b6ed3c3 Fix errors reregistering Bonsai
Items generators were exhausted at the first register leading to errors like 'TypeError: EnumProperty(..., default='-'): not found in enum members' preventing reregistration.
2024-11-19 12:53:56 +05:00
Ryan Schultz 837f9e82e2 whoops 2024-11-19 00:42:21 -06:00
Ryan Schultz 1f9e3ffe50 have move_elements_to_top work with Freestyle as well.
Also assign ordering preference.
2024-11-19 00:27:16 -06:00
Ryan Schultz 6201ea7144 small tweak to previous 2024-11-18 23:15:43 -06:00
Ryan Schultz 06d947f869 Some fixes for 812e3dc6df 2024-11-18 22:55:31 -06:00
Andrej730 362c5a17a7 Fix bonsai build
fonttols is now using universal build for the arm64 instead of x86_64
2024-11-18 15:15:53 +05:00
Andrej730 5a4326eb0f Fix calculating cost item resource value ignoring resource inheritance
Mentioned in #5744
2024-11-18 15:01:49 +05:00
Andrej730 68208d88ea Migrate - convert IfcQuantityCounts using float values to IfcQuantityNumber in ifc4x3 #5752
Traceback:
Traceback (most recent call last):
File "\bonsai\bim\module\patch\operator.py", line 187, in execute
core.run_migrate_patch(tool.Patch, infile=self.infile, outfile=self.outfile, schema=self.schema)
File "\bonsai\core\patch.py", line 30, in run_migrate_patch
patch.run_migrate_patch(infile, outfile, schema)
File "\bonsai\tool\patch.py", line 28, in run_migrate_patch
output = ifcpatch.execute(
^^^^^^^^^^^^^^^^^
File "\ifcpatch\__init__.py", line 85, in execute
patcher.patch()
File "\ifcpatch\recipes\Migrate.py", line 58, in patch
new_element = migrator.migrate(element, self.file_patched)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\ifcopenshell\util\schema.py", line 363, in migrate
new_element = self.migrate_attributes(element, new_file, new_element, new_element_schema)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\ifcopenshell\util\schema.py", line 393, in migrate_attributes
self.migrate_attribute(attribute, element, new_file, new_element, new_element_schema)
File "\ifcopenshell\util\schema.py", line 494, in migrate_attribute
new_value.append(self.migrate(item, new_file))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\ifcopenshell\util\schema.py", line 363, in migrate
new_element = self.migrate_attributes(element, new_file, new_element, new_element_schema)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\ifcopenshell\util\schema.py", line 393, in migrate_attributes
self.migrate_attribute(attribute, element, new_file, new_element, new_element_schema)
File "\ifcopenshell\util\schema.py", line 497, in migrate_attribute
setattr(new_element, attribute.name(), value)
File "\ifcopenshell\entity_instance.py", line 325, in __setattr__
self[index] = value
~~~~^^^^^^^
File "\ifcopenshell\entity_instance.py", line 363, in __setitem__
raise TypeError(
TypeError: attribute 'CountValue' for entity 'IFC4X3_ADD2.IfcQuantityCount' is expecting value of type 'INT', got 'float'.
Error: Python: Traceback (most recent call last):
File "\ifcopenshell\entity_instance.py", line 361, in __setitem__
self.method_list[idx](self.wrapped_data, idx, entity_instance.unwrap_value(value))
File "\ifcopenshell\ifcopenshell_wrapper.py", line 9271, in setArgumentAsInt
return _ifcopenshell_wrapper.entity_instance_setArgumentAsInt(self, i, v)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: in method 'entity_instance_setArgumentAsInt', argument 3 of type 'int'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "\ifcopenshell\entity_instance.py", line 325, in __setattr__
self[index] = value
~~~~^^^^^^^
File "\ifcopenshell\entity_instance.py", line 363, in __setitem__
raise TypeError(
TypeError: attribute 'CountValue' for entity 'IFC4X3_ADD2.IfcQuantityCount' is expecting value of type 'INT', got 'float'.
2024-11-18 15:01:49 +05:00
Andrej730 818c2714e8 Migrate - convert IfcCountMeasures using float values to IfcNumericMeasure in ifc4x3 #5752
Traceback:

Traceback (most recent call last):
  File "\bonsai\bim\module\patch\operator.py", line 187, in execute
    core.run_migrate_patch(tool.Patch, infile=self.infile, outfile=self.outfile, schema=self.schema)
  File "\bonsai\core\patch.py", line 30, in run_migrate_patch
    patch.run_migrate_patch(infile, outfile, schema)
  File "\bonsai\tool\patch.py", line 28, in run_migrate_patch
    output = ifcpatch.execute(
             ^^^^^^^^^^^^^^^^^
  File "\ifcpatch\__init__.py", line 85, in execute
    patcher.patch()
  File "\ifcpatch\recipes\Migrate.py", line 58, in patch
    new_element = migrator.migrate(element, self.file_patched)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 358, in migrate
    new_element = self.migrate_attributes(element, new_file, new_element, new_element_schema)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 388, in migrate_attributes
    self.migrate_attribute(attribute, element, new_file, new_element, new_element_schema)
  File "\ifcopenshell\util\schema.py", line 489, in migrate_attribute
    new_value.append(self.migrate(item, new_file))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 358, in migrate
    new_element = self.migrate_attributes(element, new_file, new_element, new_element_schema)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 388, in migrate_attributes
    self.migrate_attribute(attribute, element, new_file, new_element, new_element_schema)
  File "\ifcopenshell\util\schema.py", line 484, in migrate_attribute
    value = self.migrate(value, new_file)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 346, in migrate
    return new_file.create_entity(element.is_a(), element.wrappedValue)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\file.py", line 400, in create_entity
    e[idx] = arg
    ~^^^^^
  File "\ifcopenshell\entity_instance.py", line 363, in __setitem__
    raise TypeError(
TypeError: attribute 'wrappedValue' for entity 'IFC4X3_ADD2.IfcCountMeasure' is expecting value of type 'INT', got 'float'.
Error: Python: Traceback (most recent call last):
  File "\ifcopenshell\entity_instance.py", line 361, in __setitem__
    self.method_list[idx](self.wrapped_data, idx, entity_instance.unwrap_value(value))
  File "\ifcopenshell\ifcopenshell_wrapper.py", line 9271, in setArgumentAsInt
    return _ifcopenshell_wrapper.entity_instance_setArgumentAsInt(self, i, v)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: in method 'entity_instance_setArgumentAsInt', argument 3 of type 'int'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "\ifcopenshell\file.py", line 400, in create_entity
    e[idx] = arg
    ~^^^^^
  File "\ifcopenshell\entity_instance.py", line 363, in __setitem__
    raise TypeError(
TypeError: attribute 'wrappedValue' for entity 'IFC4X3_ADD2.IfcCountMeasure' is expecting value of type 'INT', got 'float'.
2024-11-18 15:01:48 +05:00
Andrej730 545431d95d shapebuilder - fix issue creating profiles on ifc2x3
Position argument was only required for IfcParameterizedProfileDef, not for IfcArbitraryClosedProfileDef
2024-11-18 15:01:48 +05:00
Andrej730 7d087064ab Fix for e0f4fc075
Traceback
2024-11-18:11:09:15,441 ERROR   [log.py:69] Uncaught exception
Traceback (most recent call last):
  File "\bonsai\bim\module\pset_template\ui.py", line 66, in draw
    self.draw_pset_template()
  File "\bonsai\bim\module\pset_template\ui.py", line 110, in draw_pset_template
    value_name = self.props.active_prop_template.get_value_name()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\bim\module\pset_template\prop.py", line 175, in get_value_name
    ifc_data_type = IfcStore.get_schema().declaration_by_name(self.primary_measure_type)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\ifcopenshell_wrapper.py", line 10119, in declaration_by_name
    return _ifcopenshell_wrapper.schema_definition_declaration_by_name(self, *args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Entity with name '-' not found in schema 'IFC4'
2024-11-18 15:01:48 +05:00
Andrej730 3c320960c8 pset templates UI - hide primary measure type for quantitiy props.
As they're used only for psets.
2024-11-18 15:01:48 +05:00
Ryan Schultz 812e3dc6df Automatically introducing \n (newlines) after some designated character count.
as discussed: https://community.osarch.org/discussion/2485/automatically-introducing-n-newlines-after-some-designated-character-count
2024-11-17 17:08:10 -06:00
Ryan Schultz bc2f6b61e0 small UI change for consistency, and misspelling. 2024-11-17 10:08:47 -06:00
Andrej730 e0f4fc0759 Fix error editing prop templates with None PrimaryMeasureType
E.g. all qto props have it's None

Error traceback:
Error: Python: Traceback (most recent call last):
  File "\bonsai\bim\module\pset_template\operator.py", line 135, in execute
    props.active_prop_template.primary_measure_type = template.PrimaryMeasureType
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: bpy_struct: item.attr = val: expected a string enum, not NoneType
2024-11-15 18:25:48 +05:00
Andrej730 934869af98 add_prop_template - consider pset template type for prop/measure types 2024-11-15 18:25:48 +05:00
Andrej730 dad89cfabd Narrow down pset prop template enum items
Depending on whether we're currently editing pset or qto.
Before - https://i.imgur.com/w95q7UC.png
Now - https://i.imgur.com/0uyHPVC.png
2024-11-15 18:25:48 +05:00
Andrej730 3b4cd4eab5 Fix error editing IfcQuantityCounts in IFC4X3
Full error traceback:
Error: Python: Traceback (most recent call last):
  File "\ifcopenshell\entity_instance.py", line 361, in __setitem__
    self.method_list[idx](self.wrapped_data, idx, entity_instance.unwrap_value(value))
  File "\ifcopenshell\ifcopenshell_wrapper.py", line 9271, in setArgumentAsInt
    return _ifcopenshell_wrapper.entity_instance_setArgumentAsInt(self, i, v)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: in method 'entity_instance_setArgumentAsInt', argument 3 of type 'int'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "\bonsai\bim\ifc.py", line 443, in execute_ifc_operator
    result = getattr(operator, "_execute")(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\bim\module\pset\operator.py", line 142, in _execute
    ifcopenshell.api.run(
  File "\ifcopenshell\api\__init__.py", line 92, in run
    return usecase_function(ifc_file, should_run_listeners=should_run_listeners, **settings)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\api\__init__.py", line 258, in wrapper
    raise e
  File "\ifcopenshell\api\__init__.py", line 252, in wrapper
    result = usecase(*args, **settings)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\api\pset\edit_qto.py", line 135, in edit_qto
    return usecase.execute()
           ^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\api\pset\edit_qto.py", line 149, in execute
    self.update_existing_properties()
  File "\ifcopenshell\api\pset\edit_qto.py", line 166, in update_existing_properties
    self.update_existing_property(prop)
  File "\ifcopenshell\api\pset\edit_qto.py", line 180, in update_existing_property
    prop[3] = float(value)
    ~~~~^^^
  File "\ifcopenshell\entity_instance.py", line 363, in __setitem__
    raise TypeError(
TypeError: attribute 'CountValue' for entity 'IFC4X3_ADD2.IfcQuantityCount' is expecting value of type 'INT', got 'float'.
2024-11-15 18:25:47 +05:00
Andrej730 43aa6c971a pset.edit_qto - document editing complex quantities 2024-11-15 18:25:47 +05:00
Andrej730 9f372017bc Bonsai - document qset prop type inference from prop name
In "add new prop" operator description - https://i.imgur.com/ODeMDL8.png
2024-11-15 18:25:47 +05:00
Andrej730 de17736002 Bonsai to detect Blender types for added qset props
Example - https://imgchest.com/p/bp452xxbx45

cc @steverugi @DimitriosThe maybe you'll find useful too if you use custom quantity sets for products in 4d/5d
2024-11-15 18:25:47 +05:00
Andrej730 a29b1072e4 Add error trying to add non-numeric custom quantity set value
Example - https://i.imgur.com/NUFN1sR.png
2024-11-15 18:25:47 +05:00
Andrej730 8e4e12ba21 active_pset_type - replace with EnumProperty 2024-11-15 18:25:47 +05:00
Andrej730 ff86bba562 Bonsai to detect Blender types for custom psets/qsets
Previously it was detecting types only if pset/qset had a template, now it will detect length/area/volume props for non-templated psets/qsets too.

Before - https://i.imgur.com/hacuYfx.png
Now - https://i.imgur.com/baA0KBT.png
2024-11-15 18:25:47 +05:00
Andrej730 da70c46c48 editing quantity set to guess type based on name if template is not found
E.g. all props with "Area" in it's name will automatically get IfcQuantityArea type, "Volume" - IfcQuantityVolume, see edit_qto documentation.
2024-11-15 18:25:47 +05:00
Andrej730 b860a8eaad edit_qto - remove dead code from edit_pset 2024-11-15 18:25:46 +05:00
Andrej730 dd0d0ed1af typing 2024-11-15 18:25:46 +05:00
Andrej730 7f40491e41 black . 2024-11-15 18:25:46 +05:00
Thomas Krijnen fd9485e7ea C++ file_open_status not handled in python 2024-11-14 22:00:11 +01:00
Thomas Krijnen dbdc2add81 Parsing file with trailing comment fails 2024-11-14 21:57:27 +01:00
Thomas Krijnen 229e2daa42 submodule 2024-11-14 17:00:18 +01:00
Thomas Krijnen 2a853ee8aa Only install header files, not .cpp 2024-11-14 15:34:48 +01:00
Andrej730 d0b3ecad42 csv2ifc - add header validation 2024-11-14 18:30:47 +05:00
Andrej730 2c9c3e6c7f ConvertPropertiesToQuantities - add test 2024-11-14 18:30:47 +05:00
Andrej730 3c32c9b6ed ConvertPropertiesToQuantities - ifc4x3 support 2024-11-14 18:30:47 +05:00
Andrej730 02621305c9 ConvertPropertiesToQuantities - small fix
Prevent calling add_qto if quantity set was already found in 'qtos'.
2024-11-14 18:30:47 +05:00
Andrej730 3911f51d89 Fix broken ConvertPropertiesToQuantities #5747
Name and Properties arguments were renamed and lowercased.
2024-11-14 18:30:47 +05:00
Andrej730 dfb0f1e828 typing 2024-11-14 18:30:47 +05:00
Andrej730 3270006d8e black . 2024-11-14 18:30:47 +05:00
Thomas Krijnen 54eb83f080 CGAL 6 compatibility regarding aabb_traits_3 and stdlib usage 2024-11-14 13:30:19 +01:00
Thomas Krijnen e7d88ba851 cityjson submodule 2024-11-14 13:29:47 +01:00
Thomas Krijnen e31d164ab2 Merge branch 'v0.8.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.8.0 2024-11-14 13:28:39 +01:00
Thomas Krijnen 63796aef3b cityjson submodule 2024-11-14 13:28:36 +01:00
Andrej730 ceb49bac0e Note in UI derived schedule work explicitly
There is "*" mark but since we don't have a documentation for this UI section it may be hard for new users to guess what it means.
2024-11-14 16:38:01 +05:00
Andrej730 9f49cbe0c9 bim.calculate_resource_quantity #5744
Added operator to calculate resource quantity based on the output products and the quantity Name.
See video demo - https://imgchest.com/p/9rydjlbmnyk
2024-11-14 16:38:01 +05:00
Andrej730 6c26403b9c resource.remove_resource - fix bug removing IfcRelAssignsToResource
tuple(resource) was resulting in (GlobalId, OwnerHistory, Name, ...) instead of (resource,), so the check never passed and orphaned IfcRelAssignsToResource was never removed.
2024-11-14 16:38:01 +05:00
Andrej730 1f21e96887 resource.remove_resource - fix bug not removing orphaned ifcrelnests 2024-11-14 16:38:01 +05:00
Andrej730 77bc704563 assign/unassign process - add descriptions 2024-11-14 16:38:00 +05:00
Andrej730 2be6afa411 Productivity data operators - remove confusing descriptions 2024-11-14 16:38:00 +05:00
Andrej730 a8d8600087 calculate resource usage/work - add poll messages 2024-11-14 16:38:00 +05:00
Andrej730 6a20ecb2a0 Fix #5746 2024-11-14 11:35:02 +05:00
Bruno Perdigão e74adcbba3 Improve f4cbd13 and add option for profile with voids.
Fix rebase conflict
2024-11-13 11:58:50 -03:00
sboddy 099703fda7 UI drawing improvements (#5677)
* Fix Shift-clicking SVG-DXF conversion

* Fix Schedules and References not incrementing the ID number properly

* Remove the superfluous Create and Open buttons from the Active Drawing pane

* Add active camera indicator to the Drawing list

* Improved enable/disabled icon behaviour

As many operators as possible now use polling method to set enabled/disabled state.
Icons set their enabled/disabled state intelligently depending on what is selected.
When an operator is disabled it says why it is disabled in the tooltip.

* Rename core open_sheet, operator OpenSheet/bim.open_sheet to better reflect what it actually does, i.e. open_layout

* Added selection checkmarks to Sheets, and operator to select all/none, to do batch ops on sheets

* Missed adding the renamed operator to __init__ in commit 4cfc0bd9f3

* Decouple creating and viewing drawings/sheets to avoid focus stealing popups polluting display on long batch runs

* Improve drawing selections in OpenDrawing operator

* Add the Shift+click power move to Create Sheet

* Add the Open Sheet + Shift+click power move

* Improve drawing selections in RemoveDrawing operator

* All operators are now documented with standardised language and terms.

* Add status bar Info messages for feedback on create tasks that now don't have visual feedback

* Fix enable/disable for ActivateDrawing operator icons.

This was a strange one. They have common invoke and execute methods,
but the polling has different conditions.
I tried subclassing the original ActivateDrawing for the Sheets version,
but something about Blenders operators breaks the classmethod decorated
poll. This was the cleanest solution I found, but maybe there's a better
one.

* Placeholder operator for DuplicateSheet function.

Does nothing but report Not Implemented. Could be omitted if this
kind of thing is frowned upon.

* Change icons to be more consistent

* Final changes to toolbars

Change button order and spacing for better usability.
Add a checkmark all/none button, to do batch ops on sheets.
Moved Bonsai Web UI button up to sheets toolbar.
Some general cleanup of unnecessary clutter in the toolbar code.

* Sheet/Drawing checkmarks remember their state properly

* Adjust sheet/drawing operators to view after singular create, but not when batch creating more than one.

* By special request, add back the opening windows when creating, but requiring Ctrl to be pressed.

* black the files

* Second attempt at blacking ui.py because I used an old black

* Change method of getting active drawing to use one in tool import as requested

* Fix for incorrect d1fc5158d - actually checked it this time
2024-11-13 18:38:26 +05:00
Andrej730 6fb7445610 Set blender materials for imported IfcSweptDiskSolids #5687 2024-11-13 18:20:31 +05:00
Andrej730 a7caee14b0 Remove fallback from ca96815 since bonsai build is already updated 2024-11-13 18:20:31 +05:00
Andrej730 2845071621 Fix error switching from different type of representations
E.g. from curve representation to mesh representation and vice versa. Mentioned in #5687.
2024-11-13 18:20:31 +05:00
Andrej730 5913fe881e Fix missing BIM tool UI when just spatial element is active
Noticed by "select decomposition" button missing, spatial elements are unselectable by default - they're just active.

cc @trhyder
2024-11-13 18:20:31 +05:00
Andrej730 659c3295bc Remove unnecessary IFC operators 2024-11-13 18:20:31 +05:00
Andrej730 3bbbfd2351 Show errors if failing to parse false origin / project north 2024-11-13 18:20:30 +05:00
Andrej730 0004689841 typing 2024-11-13 18:20:30 +05:00
Andrej730 e2bf611c17 black . 2024-11-13 18:20:30 +05:00
Andrej730 77fc2a89d0 Oops, fix broken #4771 by mistake 2024-11-13 16:18:56 +05:00
Andrej730 5b63b00e98 Workaround for Blender 4.3 #5743 2024-11-13 15:28:01 +05:00
Thomas Krijnen a522c9a5c9 Submodule 2024-11-13 11:15:15 +01:00
Andrej730 d3333fed96 select decomposition to work on unselectable elements #5739
E.g. ifcspaces or other spatial elements are unselectable by default.
2024-11-13 11:11:34 +05:00
Ryan Schultz a8efc5b1d9 small fix to f4cbd13748 2024-11-12 15:05:28 -06:00
Bruno Perdigão b51a417065 Fix #5726 2024-11-12 17:21:47 -03:00
Bruno Perdigão f4cbd13748 Add the option to create IfcArbitraryClosedProfileDef from an object.
Reference: https://imgur.com/a/E5YhgqV
2024-11-12 16:52:30 -03:00
Andrej730 cba0b79dc0 Cost schedule UI - optimize selecting cost items
On large projects selecting cost items is very slow due to all data that needs to be loaded. On the project I was testing, it was taking about 0.8sec, now this time is reduced to 0.17sec.
2024-11-12 18:40:43 +05:00
Andrej730 26e63c8427 Fix edit_pset for enum props without reference #5707
Similar to fb081e3cf but now we cover case when IfcPropertyEnumeratedValue is passed to properties argument.
2024-11-12 15:38:41 +05:00
Andrej730 ecff7980b3 PsetQto - interpret IFC4X3 as IFC4X3_ADD2 #5732 2024-11-12 14:52:47 +05:00
Andrej730 be6e9200b6 calculate_cost_item_resource_value - remove rounding to preserve the original quantities #5706
Removed 'quantity is None' check since it's never none after c409258ff.
2024-11-12 14:52:47 +05:00
Bruno Perdigão 204a1b1dc6 Measure tool - Add UI button to clear measurement from the screen 2024-11-11 21:15:06 -03:00
Andrej730 d74a0d05fd calculate_cost_item_resource_value - fix bug when 0 resource cost value would be misinterpreted as parent's cost value 2024-11-11 18:30:57 +05:00
Andrej730 70e75f5ed2 calculate_cost_item_resource_value not to skip 0 costs/quantities
That way all assigned resources will be added as cost values to cost items and it will be more apparent what resources were used for the last calculation and what costs/quantities they had at the time.
2024-11-11 18:30:56 +05:00
Andrej730 8ffa208ca7 Increase rounding precision for updating cost item resource values #5706
Co-Authored-By: DimitriosThe <169245599+DimitriosThe@users.noreply.github.com>
2024-11-11 18:30:55 +05:00
Andrej730 c409258ff3 calculate_cost_item_resource_value not to skip resources without quantities
Noticed the discrepancies for total cost value for resources in Resource UI and in Cost Schedule UI when the same resources assigned to the item. In Resource UI it was considering omitted quantity as 1.0 (https://github.com/IfcOpenShell/IfcOpenShell/blob/c61e3670a8cf248aa5a229bae2dc29eef041fe47/src/ifcopenshell-python/ifcopenshell/util/cost.py#L53-L55) and in Cost Schedule UI it was skipping those resources completely.

For cost items it is documented in ifc that if quantity is omitted then costs are considered to be total. Perhaps it's just not documented for the resources? Anyway, not sure if this way is completly correct but making sure resource quantity to be treated similarly in different parts of the codebase.

Related to - https://github.com/buildingSMART/IFC4.3.x-development/issues/910
cc @myoualid
2024-11-11 18:30:55 +05:00
Andrej730 de414313d3 Fix cost values for resources not updating properly 2024-11-11 18:30:55 +05:00
Andrej730 0f421da6e3 Multifile properties to show selected paths
Before - https://i.imgur.com/AkPvTy3.png
After - https://i.imgur.com/znxLqb7.png
2024-11-11 18:30:55 +05:00
Andrej730 478dcb8d78 Fix UI errors selecting empty ifcpatch ("-") 2024-11-11 18:30:55 +05:00
Andrej730 37d9cade92 black . 2024-11-11 18:30:55 +05:00
Andrej730 004488533f typing 2024-11-11 18:30:55 +05:00
Thomas Krijnen 088bc207ab Don't fail on untyped enumerations 2024-11-11 13:57:36 +01:00
Andrej730 c61e3670a8 fix test_removing_existing_element_representations_and_mapping_type_representations
Started failing after 8061e22. Test was instantiating abstract IfcProductRepresentation
2024-11-11 16:31:14 +05:00
Andrej730 c5aad82e3d typing - add missing settings 2024-11-11 16:31:14 +05:00
Andrej730 acd93ead4d Fix crash during test_remove_fill_area_with_fill_area_style_hatching 2024-11-11 16:31:14 +05:00
Andrej730 8070338087 fix test_remove_non_surface_styles
.FillStyles is not optional for IfcFillAreaStyles
2024-11-11 16:31:14 +05:00
Andrej730 05542ca6ec Fix failing ifcopenshell ci tests due missing ifcpatch (56de208) 2024-11-11 16:31:13 +05:00
Thomas Krijnen 8932d8758e validate.py distinguish internal errors from invalid files 2024-11-11 11:09:26 +01:00
Thomas Krijnen 130afac752 Revert back to github occt uri due to persistent 500 2024-11-11 08:58:01 +01:00
Andrej730 67f8c74c70 Fix processing ifcpatch docs after fe8c396e1
bim.update_ifc_patch_arguments in Bonsai wasn't ready for list[xxx] generic and was throwing errors and not showing browse file button.
2024-11-11 12:48:43 +05:00
Thomas Krijnen 6ece1648ab Update entity_instance.py after 8ae951d
cc @Andrej730 we need this for validate.buildingsmart.org because for express rule evaluation we depend on include_id=False and entity_instance.__eq__ has been changed to get_info_2.
2024-11-10 15:06:41 +01:00
Bruno Perdigão 2165dbb3fa Minor fix after 10aad5a531 2024-11-08 17:04:07 -03:00
Bruno Perdigão 10aad5a531 Change hotkey for angle lock in polyline tool, from "L" to "A". 2024-11-08 17:00:47 -03:00
Bruno Perdigão 23c30e7642 Implement #3083 2024-11-08 16:25:21 -03:00
Bruno Perdigão f08959aaa9 Fix - Measure tool plane method now works with object snap. 2024-11-08 16:06:28 -03:00
Bruno Perdigão b416df538a Add AuthoringData.data["relating_type_id_current"] to model data. 2024-11-08 11:20:17 -03:00
Bruno Perdigão 084c2aa25a Add AuthoringData.data["ifc_class_current"] to model data. 2024-11-08 11:20:17 -03:00
Bruno Perdigão 66ded3fc41 Partially fix an issue with BIMModelProperties ifc_class enum. 2024-11-08 11:20:17 -03:00
Bruno Perdigão 4b558604cc Remove mathutils dependency from add_slab_representation.py 2024-11-08 10:34:11 -03:00
Bruno Perdigão 024566887d Minor fix 2024-11-08 10:34:11 -03:00
Andrej730 916c6a94f1 bim.remove_cost_value - fix misleading label 2024-11-08 18:32:20 +05:00
Andrej730 af1f3cad34 bim.calculate_cost_item_resource_value - tooltip 2024-11-08 18:32:20 +05:00
Andrej730 534355cd33 Fix for 1acf8f1 2024-11-08 18:32:20 +05:00
Andrej730 a0226eb0a1 document double tags for fill-bg #5719
It seems we lost this comment at some point.
2024-11-08 18:32:20 +05:00
Andrej730 1fa3478a9d bim.execute_ifc_tester - remove unnecessary ifc operator 2024-11-08 18:32:20 +05:00
Andrej730 f7a7626575 ifctester to fail more gracefully meeting invalid .ids file
Previously Bonsai would show a wall of errors, now it's show a simple error message and redirecting to system console for the details.

Example error - https://i.imgur.com/uJJfjUW.png
Example validation error details in console - https://i.imgur.com/3mcVBUh.png

Same details but in text:
Validation error details:

failed validating {'dataType': 'IFCBOOLEAN', 'ursi': 'https://google.com', 'cardinality': 'required', 'instructions': "Make sure it's true"} with XsdAttributeGroup(['dataType', 'uri', 'cardinality', 'instructions']):

Reason: 'ursi' attribute not allowed for element

Schema component:

  <xs:extension xmlns:xs="http://www.w3.org/2001/XMLSchema" base="ids:propertyType">
      <xs:attribute name="uri" type="xs:anyURI" use="optional" />
      <xs:attribute name="cardinality" type="ids:conditionalCardinality" use="optional" default="required" />
      <xs:attribute name="instructions" type="xs:string" use="optional">
          <xs:annotation>
              <xs:documentation>Author of the IDS can leave instructions for the authors of the IFC. This text could/should be displayed in the BIM/IFC authoring tool.</xs:documentation>
          </xs:annotation>
      </xs:attribute>
  </xs:extension>

Instance type: <class 'xml.etree.ElementTree.Element'>

Instance:

  <ids:property xmlns:ids="http://standards.buildingsmart.org/IDS" dataType="IFCBOOLEAN" ursi="https://google.com" cardinality="required" instructions="Make sure it's true">
    <ids:propertySet>
      <ids:simpleValue>Pset_WallCommon</ids:simpleValue>
    </ids:propertySet>
    <ids:baseName>
      <ids:simpleValue>Combustible</ids:simpleValue>
    </ids:baseName>
    <ids:value>
      <ids:simpleValue>false</ids:simpleValue>
    </ids:value>
  </ids:property>

Path: /ids:ids/ids:specifications/ids:specification/ids:requirements/ids:property[1]
2024-11-08 18:32:20 +05:00
Andrej730 0a7ee4e360 ifctester.main - fail more gracefully for invalid files 2024-11-08 18:32:20 +05:00
Andrej730 466ba6c159 get_components - add test 2024-11-08 18:32:20 +05:00
Andrej730 1a19864e82 get_contained - add test 2024-11-08 18:32:20 +05:00
Andrej730 36f12b5145 Fix get_pset tests after 832ad6d31 2024-11-08 18:32:20 +05:00
Andrej730 eed4985957 get_parts - add test 2024-11-08 18:32:20 +05:00
Andrej730 5597095198 util.element - check schema version explicitly 2024-11-08 18:32:19 +05:00
Andrej730 1b2508f8de Fix util.element for cases with multiple rels #5713
Got report that there was an issue with get_parts not returning all parts if there are multiple IfcRelAggregates involved though it is valid ifc. Fixed the same possible issue for ContainsElements, IsNestedBy
2024-11-08 18:32:19 +05:00
Andrej730 77e6ab3b8b MergeProjects - temporary handle old way of passing files to merge 2024-11-08 18:32:19 +05:00
Andrej730 fe8c396e12 typing 2024-11-08 18:32:19 +05:00
Blender Defender 1d3ca475d9 fix: Rename the "MergeProject" recipe to "MergeProjects" (#5187)
* fix: Rename the "MergeProject" recipe to "MergeProjects"

This rename, alongside renaming "filepath" to "filepaths" and adjusting the docstring has been done to clarify, that this patch can be used to merge multiple IFC files into one (and not just two)

* fix: Fix `test_Merge_Project.py`, which was broken due to renaming the patch recipe
2024-11-08 10:51:47 +05:00
Andrej730 09fcd32b7a Fix error duplicating array item after c415767 #5705
error traceback
```
Traceback (most recent call last):
  File "bonsai\bim\module\geometry\operator.py", line 909, in execute
    return OverrideDuplicateMove.execute_duplicate_operator(self, context, linked=False)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "bonsai\bim\module\geometry\operator.py", line 918, in execute_duplicate_operator
    IfcStore.execute_ifc_operator(self, context)
  File "bonsai\bim\ifc.py", line 443, in execute_ifc_operator
    result = getattr(operator, "_execute")(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "bonsai\bim\module\geometry\operator.py", line 912, in _execute
    return OverrideDuplicateMove.execute_ifc_duplicate_operator(self, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "bonsai\bim\module\geometry\operator.py", line 1021, in execute_ifc_duplicate_operator
    tool.Model.handle_array_on_copied_element(new, array_data)
  File "bonsai\tool\model.py", line 673, in handle_array_on_copied_element
    array_pset_data = array_pset["Data"]
                      ~~~~~~~~~~^^^^^^^^
KeyError: 'Data'
```
2024-11-07 17:38:39 +05:00
Andrej730 fb081e3cf2 pset.edit_pset - fix issue editing enum props without EnumerationReference #5707
Traceback
```
Error: Python: Traceback (most recent call last):
  File "\bonsai\bim\ifc.py", line 443, in execute_ifc_operator
    result = getattr(operator, "_execute")(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\bonsai\bim\module\pset\operator.py", line 126, in _execute
    ifcopenshell.api.run(
  File "\ifcopenshell\api\__init__.py", line 92, in run
    return usecase_function(ifc_file, should_run_listeners=should_run_listeners, **settings)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\api\__init__.py", line 252, in wrapper
    result = usecase(*args, **settings)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\api\pset\edit_pset.py", line 166, in edit_pset
    return usecase.execute()
           ^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\api\pset\edit_pset.py", line 176, in execute
    existing_props = self.update_existing_properties()
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\api\pset\edit_pset.py", line 225, in update_existing_properties
    prop = self.update_existing_prop_enum(prop)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\api\pset\edit_pset.py", line 251, in update_existing_prop_enum
    primary_measure_type = prop.EnumerationReference.EnumerationValues[
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'EnumerationValues'
```
2024-11-07 17:09:57 +05:00
Andrej730 b0cc2e30a9 Fix error starting to edit pset without enum reference/enum values #5707
Traceback
Error: Python: Traceback (most recent call last):
  File "\bonsai\bim\module\pset\operator.py", line 62, in execute
    core.enable_pset_editing(tool.Pset, pset, self.pset_name, self.pset_type, self.obj, self.obj_type)
  File "\bonsai\core\pset.py", line 86, in enable_pset_editing
    pset_tool.import_pset_from_existing(pset, props)
  File "\bonsai\tool\pset.py", line 121, in import_pset_from_existing
    metadata.set_value(prop.EnumerationReference.EnumerationValues[0].wrappedValue)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'EnumerationValues'
2024-11-07 17:09:56 +05:00
Andrej730 d9186bce11 Bonsai to show different error for Python 3.12 users #5704 2024-11-07 17:09:56 +05:00
Andrej730 cc15e6b3c1 typing 2024-11-07 17:09:56 +05:00
Andrej730 832ad6d318 Prioritize existing data types for templates props for safety
Noticed working on #5596 and #5708 a few issue when pset template is changing the prop types.

E.g. prop had string data type and now template suggests that it should be a float.
Previously, it might error trying to cast a string to a float. Now it will show a float until user will set it to null, then next time it will be loaded from the template data type.

Another example - prop was a string and now it's a boolean. Previously, it would be cast to boolean implicitly. E.g. "test" -> bool("test") -> True. And if user wouldn't be paying attention then enabling pset editing and saving it would make them lose "test" value.

Now - https://imgchest.com/p/na7ke99wb78
Before - https://imgchest.com/p/5xy23rr3z4l
2024-11-07 16:21:12 +05:00
Andrej730 3ad713d5c6 Patch Ifc4 psets that missing IfcThermalTransmittanceMeasure type in ThermalTransmittance props
Similar to #5708
Affected psets: Pset_RampCommon, Pset_StairCommon.
2024-11-07 16:21:12 +05:00
Andrej730 822107a6ed Patch Ifc4 psets that missing IfcBoolean type in LoadBearing props #5708
Affected psets: Pset_RoofCommon, Pset_RampCommon, Pset_StairCommon.
Also fixed the missing description for that prop.
2024-11-07 16:21:12 +05:00
Andrej730 90d5509046 Add min 0 value to IFC props in UI
Basically it won't allow setting values below 0 by accident (especially important for representation item props as it may lead to a crash).

1) IfcPositiveLengthMeasure will affect bunch of props like Depth in IfcExtrudedAreaSolid.
2) IfcNonNegativeLengthMeasure will affect MaterialLayer and some profiles attributes.
2024-11-07 16:21:11 +05:00
Andrej730 f0a6906d73 Use helper.import_attributes for representation item attributes 2024-11-07 16:21:11 +05:00
Andrej730 bbca07d535 Edit other representation item attributes besides IfcSweptSolid depth
Examples:
- https://imgchest.com/p/qb4zjgbklyj
- https://imgchest.com/p/lqye68r2k4d

Added this feature in a very experiment way, I'm sure it will break very soon and we'll be able to refine it.
2024-11-06 18:26:57 +05:00
Andrej730 9a77222017 Option to add IfcEllipse as representation item
Example - https://i.imgur.com/PADKlAq.png
2024-11-06 18:06:51 +05:00
Andrej730 19cbf6d140 ifcfm - move preset searching logic from ifcm to bonsai
So anyone using 'python -m ifcfm' will get more readable error for invalid presets.
2024-11-06 18:06:51 +05:00
Andrej730 9821c343ca Keep bim.select_container available for IfcProjects too
As it's the quicker way to select it than searching it in outliner - https://i.imgur.com/p2NVcdR.png
Couldn't find a simpler a way to do it in UI and had to create bunch of columns. Tried to use splits but they end up readjusting the buttons.
2024-11-06 18:06:50 +05:00
Andrej730 a3845c2b5c Reload decorator after item attributes are updated and it's representation is reloaded 2024-11-06 18:06:50 +05:00
Andrej730 5c33a66548 Hide assign class panel for representation items 2024-11-06 18:06:50 +05:00
Andrej730 ecdbcff1aa ifcfm operators - add info message when it's finished 2024-11-06 17:51:04 +05:00
Andrej730 47853bc551 Prevent user from selecting unavailable tabs from dropdown if ifc project is not loaded 2024-11-06 17:51:04 +05:00
Andrej730 41fc0cf8c1 BIMTabProperties fixes
1) Fixed non-existent tool.Blender.get_screen
2) ui.py - remove try/except for the case when tabs are not loaded yet as it's covered by BIMTabProperties
3) removed previous_tab, alt_tab props never used in ui
4) general method for getting area properties that includes BIMTabProperties automatically
2024-11-06 17:51:04 +05:00
Andrej730 e3de9c3ea4 bim.set_tab / bim.switch_tab not to create undo steps
To avoid unnecessary steps in undo history like on the screenshot - https://i.imgur.com/vEpsYa5.png
2024-11-06 17:51:04 +05:00
Andrej730 c594bc2c1a bim.execute_ifcfm_federate - small fixes 2024-11-06 17:51:03 +05:00
Andrej730 d89be97bcd ifcclash docs - small fix 2024-11-06 17:51:03 +05:00
Andrej730 c63469f85e ifcm - fix missing ifcopenshell import 2024-11-06 17:51:03 +05:00
Andrej730 cf68c5755b ifcfm - add example 2024-11-06 17:51:03 +05:00
Andrej730 3d79ae53ad ifcfm - fix bug exporting csvs to folder that didn't yet existed 2024-11-06 17:51:03 +05:00
Andrej730 681b89d95c Bonsai - improve error message if ifc file fails to open #5694 2024-11-06 17:51:03 +05:00
Andrej730 4fdb313449 typing 2024-11-06 17:50:47 +05:00
Andrej730 4e070545ae black . 2024-11-06 16:04:03 +05:00
Andrej730 36bd89bb40 ifcopenshell.util.element.get_type to be less strict again after d443c5e
I guess by accident in d443c5e I've made this method too strict and it broke get_references using it for IfcPropertySets. Maybe it's a good idea to make it more strict in the future, for now just restoring the previous behaviour.
2024-11-06 16:04:02 +05:00
Thomas Krijnen e70bc04915 Update draw.py with provisionary access to arrange_spaces 2024-11-06 09:17:32 +01:00
Thomas Krijnen 585821d763 Update wrapper for svgfill::arrange_polygons() 2024-11-06 09:15:59 +01:00
Andrej730 262fca95e3 Bump IOS build #5661 2024-11-06 10:52:43 +05:00
Thomas Krijnen a2538fdd35 Update ci.yml 2024-11-05 16:13:47 +01:00
Thomas Krijnen 3c174e3dc9 svgfill submodule with arrange_polygons API 2024-11-05 15:43:37 +01:00
Richard Brice 3672ce90d0 Minor tweak for cant with IfcCosineSpiral and IfcSineSpiral 2024-11-04 15:00:27 -08:00
Bruno Perdigão 6729739ee8 Fix a bug where the product decorator displays the incorrect position when type origin is not at world origin. 2024-11-04 10:48:11 -03:00
Bruno Perdigão 4a8710efd8 Fix product decorator to be uninstalled after mouse right click. 2024-11-04 10:27:49 -03:00
Ryan Schultz f2c96b65e0 If perspective, don't add scale to the view title 2024-11-03 09:29:11 -06:00
Richard Brice bf8c3530a1 Fixes piecewise function evaluation in alignment api 2024-11-02 14:42:44 -07:00
Andrej730 caeabe2cd5 Optimize enums by moving them to data.py 2024-11-01 16:13:16 +05:00
Andrej730 9c0256165e Use static enum items instead of dynamic 2024-11-01 16:13:16 +05:00
Andrej730 1acf8f1ed8 deprecate some prop.purge 2024-11-01 16:13:16 +05:00
Andrej730 0944f8a7cb Fix unsafe enum items #5673 2024-11-01 16:13:15 +05:00
Andrej730 3debf62ca6 Mark unsafe enums #5673 2024-11-01 16:13:15 +05:00
Andrej730 f3019e4d7a Store enum items strings references to be safe #5673 2024-11-01 16:13:15 +05:00
Andrej730 33b7c0a76f small optimizations for enum props 2024-11-01 16:13:15 +05:00
Andrej730 ae18590893 typing 2024-11-01 16:13:15 +05:00
Dawid Huczyński 7517414552 add favicon to ifcopenshell-python and bonsaibim docs 2024-11-01 15:19:08 +05:00
Thomas Krijnen 63e98e69e9 Test whether polygonal boundary is simple #5665 2024-11-01 11:15:09 +01:00
Bruno Perdigão 4c08eaf953 Add a proposal to #3692 2024-10-31 17:43:30 -03:00
Bruno Perdigão 05b32b3c32 Fix #4298 2024-10-31 15:38:57 -03:00
Richard Brice f3ce57480a Fixes unit conversion problem in IfcCurveSegment 2024-10-31 08:55:01 -07:00
Andrej730 08e38c65f5 Display Ifc length attributes as Blender length properties
Basically now all length ifc attributes should be displayed in UI as Blender length properties - they display the units and allow math, typing different units, etc.

Example - https://imgchest.com/p/dl7p93gz64o
2024-10-31 18:40:14 +05:00
Andrej730 3e44f0f37b Quick way to select profile in profiles UI
Example - https://imgchest.com/p/9rydakllwyk
2024-10-31 18:40:14 +05:00
Andrej730 bd7ca78a37 bonsai - print number of voids for elements that hit void_limit 2024-10-31 18:40:13 +05:00
Andrej730 c53885f642 bonsai ifcclash - add separate property for export path
Example - https://i.imgur.com/bCRHx9q.png
Needed so it will be easier to rerun ifc clash without providing the same filepath each time.
2024-10-31 18:40:13 +05:00
Andrej730 e56589d544 ifcclash - fix broken list 2024-10-31 18:40:13 +05:00
Andrej730 380e791c59 ifcpatch - add pip installation to readme 2024-10-31 18:40:13 +05:00
Andrej730 904eb9fae8 Fix undo bugs with edited_objs
Now it's stored as a collection property in the project properties, so in the most cases we delegate to Blender to ensure it's handled properly on undo and redo.
2024-10-31 18:40:13 +05:00
Andrej730 09df81ab15 typing 2024-10-31 18:40:13 +05:00
Andrej730 b35ef2f101 black . 2024-10-31 18:40:13 +05:00
Andrej730 fb5d37b04b Fix support for python 3.10 #5662 2024-10-31 18:28:24 +05:00
Andrej730 06a6c2d79b Option to apply openings to the geometry #5666
Button location - https://i.imgur.com/6zSv8vV.png
Now it's possible to "bake" openings to the geometry, The openings representation will be marked as "Reference".
2024-10-31 17:00:43 +05:00
Andrej730 b39f96e2ee Fix bug duplicating edited object
It was losing original object representation on project save as it wasn't marked as edited.
2024-10-31 15:50:21 +05:00
Andrej730 64b3101cef Skip applying scale to geometry on duplicate #5663 2024-10-31 15:50:21 +05:00
Thomas Krijnen 4cd8428d1d Update unit.py 2024-10-31 11:00:02 +01:00
Thomas Krijnen 0446befefa More permissive interval overlap test for 2d opening evaluation #5661 2024-10-31 10:35:30 +01:00
Andrej730 037b5d1bc1 Spatial container drop down to show only spatial objects
Example - https://i.imgur.com/v8p4D57.png (it's ignoring walls).
Since we now filter valid elements in poll_container_obj, then there is no need to check it twice in update_container_obj.
2024-10-30 18:45:50 +05:00
Andrej730 e463407de7 void_limit - document 2024-10-30 18:07:34 +05:00
Andrej730 28f81496dd Small refactor for sync_edited_objects
1) remove materials if-branch as they're never edited
2) validate object explicitly
2024-10-30 18:07:34 +05:00
Andrej730 ccb223be94 Remove unnecessary ifc.finish_edits
Unused since we do not use fc.edit anymore for parametric geometry
2024-10-30 18:07:34 +05:00
Andrej730 33ed7e5234 typing 2024-10-30 18:07:34 +05:00
Andrej730 0662b0c5b6 Optimize updating representations adding/removing openings
No need to update all possible elements from decomposition because openings affect only related objects from IfcRelAggregate. For example, see #5639.
2024-10-30 18:07:34 +05:00
Andrej730 59e0dbae2c Fix 8ac9612 for IfcMaterials 2024-10-30 15:32:45 +05:00
Andrej730 e757c42204 Quick way to select style in Styles UI
Example - https://imgchest.com/p/ej7mkxp9ayd
2024-10-30 15:32:45 +05:00
Andrej730 b6da13c504 Fix hiding by accident object class asignment section in 86d0139f4 2024-10-30 15:32:45 +05:00
Andrej730 a66cffddb8 ifcopenshell-python - note about supported glibc versions 2024-10-30 15:32:45 +05:00
Andrej730 4dfb3cac51 bump ios build in bonsai
e8eb397 fixes #5658
2024-10-30 11:42:34 +05:00
Thomas Krijnen 3d4988349a Remove self-intersecting faces #5650 2024-10-29 15:43:02 +01:00
Andrej730 fa07f184c3 ifctester - indicate optionality in report message
Previously for both cardinality optional/required ifctester would show same results.

E.g.
<ids:property dataType="IFCBOOLEAN" cardinality="required">
<ids:property dataType="IFCBOOLEAN" cardinality="optional">

Were resulting in something like
LoadBearing data shall be true and in the dataset Pset_WallCommon
LoadBearing data shall be true and in the dataset Pset_WallCommon

Now it will result in
LoadBearing data shall be true and in the dataset Pset_WallCommon
LoadBearing data may be true and in the dataset Pset_WallCommon
2024-10-29 18:16:54 +05:00
Andrej730 067203cb9a ifctester webapp - add some tooltips 2024-10-29 18:16:06 +05:00
Andrej730 e9731f3047 ifctester webapp - fix issue with launching audit 2024-10-29 18:16:05 +05:00
Andrej730 fa0805fe29 ifctester webapp - fix for latest ids version 2024-10-29 18:16:05 +05:00
Andrej730 14bac88aca ifctester.webapp - add to readme 2024-10-29 18:16:05 +05:00
Andrej730 edafb722e4 Fix ifctester readme 2024-10-29 18:16:05 +05:00
Andrej730 8ac96124c9 Fix UI errors opening non-IfcMaterials in Materials UI
There was UI errors because ui data wasn't updated, now ui data update is tied to load_materials
2024-10-29 18:16:05 +05:00
Andrej730 bb23d74ce3 Fix bug in 4c93270ad for IfcMaterialLayers 2024-10-29 18:16:05 +05:00
Andrej730 ff0fe0db06 Small optimization for materials UI 2024-10-29 18:16:05 +05:00
Andrej730 834be2d6a8 geometry.add_wall_representation - document 2024-10-29 18:16:05 +05:00
Andrej730 af01f6b6c7 geometry.create_2p_wall - document 2024-10-29 18:16:05 +05:00
Andrej730 87d185fef1 Lock scale for aggregate parts too if aggregate has openings 2024-10-29 18:16:05 +05:00
Andrej730 bfa2852ca9 typing 2024-10-29 18:16:04 +05:00
Cristian Ritter cf0a4e2bde Handle with lowercase hexadecimals #5620 2024-10-28 19:58:43 +01:00
Andrej730 fd6a541689 bonsai bcf v3 - fix issue activating camera in some cases 2024-10-28 20:10:39 +05:00
Andrej730 4c3bb54f98 bim.update_representation to detect openings from it's aggregate and show an error
Previously it would apply scale and geometry with opening to the representation, basically corrupting it.
2024-10-28 18:22:11 +05:00
Andrej730 6a4167e234 bim.add_opening to sync representations before adding an opening
E.g. if object was scaled or edited. Previously geometry changes were either lost or applied in a weird way (to the object without scale).
2024-10-28 18:21:43 +05:00
Andrej730 147f0bfc9a Sync parts positions before applying the opening
To avoid issues like this - https://imgchest.com/p/bp45zlzen45
2024-10-28 18:21:43 +05:00
Andrej730 a4979a74b2 Fix bug object position wouldn't be synced on project save
If project had scale and openings then bim.update_representation wouldn't apply it's position leading to unsynced position.
2024-10-28 18:21:42 +05:00
Andrej730 850c16c745 Fix bug when object scale wouldn't be applied on project save if object wasn't moved 2024-10-28 18:21:42 +05:00
Andrej730 b96e275251 Fix bim.update_representation not apply scales if object wasn't moved
Was also creating same issue when project was saved
2024-10-28 18:21:42 +05:00
Andrej730 48a7af76ad Bump Blender build and simplify sun_position installation 2024-10-28 18:21:42 +05:00
Andrej730 3f4a0128c7 ifcsverchok - fix poll error opening operator search 2024-10-28 18:21:42 +05:00
Andrej730 bdbe91f043 typing 2024-10-28 18:21:42 +05:00
Andrej730 86d0139f41 Hide object related panels when there is no object active 2024-10-28 16:23:35 +05:00
Andrej730 f2e9f2beb9 Fix error adding custom pset to material set item when no item currently edited
Error traceback posted in #5647
2024-10-28 16:23:35 +05:00
Andrej730 4c93270adc Select material in materials UI #5647
Example - https://imgchest.com/p/6eyr8j8ag7p
2024-10-28 16:07:23 +05:00
Andrej730 320142f8e2 Hide material sets panels if there is no material set #5647 2024-10-28 16:07:23 +05:00
Andrej730 88d133b4cc Fix ifc calls on every draw call for material set pset names enum 2024-10-28 16:07:23 +05:00
Andrej730 7fef81c0b9 black . 2024-10-28 16:06:27 +05:00
Thomas Krijnen 92b63a0ef2 Update build-all.py - add 3.13.0 2024-10-27 06:55:38 +01:00
Ryan Schultz fc57a7bbf4 Fix #5078: A way to quickly sum up a qto value of multiple selected objects 2024-10-26 14:26:25 -05:00
Thomas Krijnen 68062f54d8 Gracefully handle missing aggregate header fields #5626 2024-10-26 17:21:15 +02:00
Thomas Krijnen d6ed28e504 Update build-all.py - add rhel-related comment 2024-10-26 17:11:23 +02:00
civilx64 8ff4cef7ec lint with black 2024-10-26 17:06:24 +02:00
civilx64 8d001d0120 cleanup from original python alignment prototyping
`transition_curve.py` is now obsolete and has been removed.
A python port of IfcAlignmentHelper.cpp has also been started.
It needs further development to accommodate vertical alignment.
2024-10-26 17:06:24 +02:00
2394 changed files with 279506 additions and 124468 deletions
+12
View File
@@ -0,0 +1,12 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/BlankSpruce/gersemi/0.24.0/gersemi/configuration.schema.json
# Gersemi doesn't support autodetection of macros/functions from other files or from the current one
# and requires to explicitly list directories/cmake files that define them.
definitions: ["./cmake", "./src"]
disable_formatting: false
extensions: []
indent: 4
line_length: 120
list_expansion: favour-inlining
unsafe: false
warn_about_unknown_commands: true
+23
View File
@@ -0,0 +1,23 @@
name: Bug Report
description: Crashes, error messages, and broken features
type: bug
body:
- type: textarea
attributes:
label: Bug Description
placeholder: |
Describe what problem occurred and what you expected to happen instead.
1. To reproduce this, open file '...'
2. Click on '....'
3. See error
- type: textarea
attributes:
label: Attachments
description: "Private files can be uploaded to https://ifcopenshell.org/upload.html - only viewed by core developers and will be deleted afterwards. Please submit your report first then upload private files afterwards."
placeholder: "If applicable, add screenshots to help explain your problem. Please also drag-drop any files necessary to show the error (rename the file extension from .ifc to .txt to upload)."
- type: textarea
attributes:
label: Debug and Error Output
description: "If this is in Bonsai, paste the output from the Copy Debug Information option in Bonsai. It can be found under Quality and Coordination -> Quality Control -> Debug. If this is a general software issue, if relevant include details about IfcOpenShell version, operating system, Python version, etc."
render: yes
+8
View File
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Community Forums
url: https://community.osarch.org/
about: Have a question? Want to discuss an idea? Try the OSArch forums instead.
- name: Live Chat
url: https://osarch.org/chat
about: Have a really confusing issue? Want real-time support?
@@ -0,0 +1,8 @@
name: Feature Request
description: Suggest a new feature or improvement
type: Feature
body:
- type: textarea
attributes:
label: Feature Description
placeholder: "Describe a feature you'd like us to add, or a change to the user interface, design, or workflow for usability. If it's not obvious, explain why this feature is awesome. Note that feature requests must be specific and measurable."
+12
View File
@@ -0,0 +1,12 @@
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
@@ -0,0 +1,41 @@
from __future__ import annotations
import json
import os
import sys
from typing import TypedDict
import github_action_utils as gha_utils
class Entry(TypedDict):
location: Location
class Location(TypedDict):
path: str
lines: Lines
class Lines(TypedDict):
begin: int
end: int
json_data: list[Entry] = json.load(sys.stdin)
if os.getenv("RUNNER_DEBUG"):
print("Debug: Black formatting JSON data:")
print(json.dumps(json_data, indent=2))
for change in json_data:
location = change["location"]
path = location["path"]
lines = location["lines"]
gha_utils.error(
f"Black formatting issue in {path}",
title="Black Format Issue",
file=path,
line=lines["begin"],
end_line=lines["end"],
)
+21
View File
@@ -0,0 +1,21 @@
name: Dispatch Build IfcOpenShell
on:
workflow_dispatch:
jobs:
trigger-workflows:
runs-on: ubuntu-latest
strategy:
matrix:
workflow:
- 'Build IfcOpenShell Linux'
- 'Build IfcOpenShell Linux ARM'
- 'Build IfcOpenShell OSX'
- 'Build IfcOpenShell WASM / Pyodide'
- 'Build IfcOpenShell Windows'
steps:
- name: Trigger binary build workflows
uses: benc-uk/workflow-dispatch@v1
with:
workflow: ${{ matrix.workflow }}
+150
View File
@@ -0,0 +1,150 @@
name: Build IfcOpenShell OSX
on:
workflow_dispatch:
jobs:
build_ifcopenshell:
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- os: macos
runner: macos-14
arch: x64
oldarch:
- os: macos
runner: macos-14
arch: arm64
oldarch: m1
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
submodules: recursive
- name: Checkout Build Repository
uses: actions/checkout@v6
with:
repository: IfcOpenShell/build-outputs
path: ./build
ref: ${{ matrix.os }}-${{ matrix.arch }}
lfs: true
token: ${{ secrets.BUILD_REPO_TOKEN }}
- name: Install Dependencies
run: |
brew update
# preinstalled: xz, cmake
brew install git bison autoconf automake libffi findutils
echo "$(brew --prefix findutils)/libexec/gnubin" >> $GITHUB_PATH
# Mac is using bison 2.5 by default, but we need 3.5+ for swig.
echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH
- name: Install aws cli
run: |
python -m pip install awscli
- name: Unpack Dependencies
run: |
cd build
python ../nix/cache_dependencies.py unpack
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.21
with:
key: mac-${{ matrix.arch }}
- name: Run Build Script
shell: bash
run: |
if [ "${{ matrix.os }}" == "macos" ]; then
DARWIN_C_SOURCE=-D_DARWIN_C_SOURCE
fi
if [ "${{ matrix.arch }}" == "x64" ]; then
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
MAC_INTEL=-mac-cross-compile-intel
# We don't use gmpcxx, but it comes preinstalled on macos runner as arm64 bottle
# and CGAL detects it and breaks cross compilation.
brew uninstall --ignore-dependencies gmp
# Otherwise Python will fallback to use arm64 `pkg-config`,
# will pick up arm64 libraries ('zstd' in particular),
# and break the build.
/usr/local/bin/brew install pkg-config
# Required by Python.
/usr/local/bin/brew install gettext openssl
fi
set -o pipefail
CXXFLAGS="-O3" CFLAGS="-O3 ${DARWIN_C_SOURCE}" ADD_COMMIT_SHA=1 BUILD_CFG=Release \
python3 ./nix/build-all.py -v --diskcleanup ${MAC_INTEL} \
| tee build.log
- name: Upload Build Logs
if: always()
uses: actions/upload-artifact@v7
with:
name: build-logs-osx-${{ matrix.arch }}
path: |
build.log
build/*/*/*/logs/*.log
build/*/*/*/build/ifcopenshell/**/CMakeCache.txt
retention-days: 30
- name: Pack Dependencies
run: |
cd build
python ../nix/cache_dependencies.py pack
- name: Commit and Push Changes to Build Repository
run: |
cd build
git config user.name "IfcOpenBot"
git config user.email "ifcopenbot@ifcopenshell.org"
git add "$(find . -maxdepth 4 -name install)/*.tar.gz"
git commit -m "Update build artifacts [skip ci]" || echo "No changes to commit"
git push || true
- name: Package .zip archives
run: |
VERSION=v`cat VERSION`
cd ./build/`uname`/*/10.15/install/ifcopenshell
mkdir ~/output
ls -d python-* | while read py_version; do
postfix=`echo ${py_version: -1} | sed s/[0-9]//`
numbers=`echo $py_version | grep -oE '[0-9]+\.[0-9]+' | tr -d '.'`
py_version_major=python-${numbers}$postfix
pushd . > /dev/null
cd $py_version
if [ ! -d ifcopenshell ]; then
mkdir ../ifcopenshell_
mv * ../ifcopenshell_
mv ../ifcopenshell_ ifcopenshell
fi
[ -d ifcopenshell/__pycache__ ] && rm -rf ifcopenshell/__pycache__
find ifcopenshell -name "*.pyc" -delete
zip -r -qq ifcopenshell-${py_version_major}-${VERSION}-${GITHUB_SHA:0:7}-macos${{ matrix.oldarch }}64.zip ifcopenshell/*
mv *.zip ~/output
popd > /dev/null
done
cd bin
rm *.zip || true
ls | while read exe; do
zip -qq -r ${exe}-${VERSION}-${GITHUB_SHA:0:7}-macos${{ matrix.oldarch }}64.zip $exe
done
mv *.zip ~/output
cd ..
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Upload .zip archives to S3
run: |
aws s3 cp ~/output s3://ifcopenshell-builds/ --recursive
+88
View File
@@ -0,0 +1,88 @@
name: Build IfcOpenShell WASM / Pyodide
on:
workflow_dispatch:
jobs:
build_ifcopenshell:
runs-on: ubuntu-22.04
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
submodules: recursive
path: IfcOpenShell
- name: Checkout Build Repository
uses: actions/checkout@v6
with:
repository: IfcOpenShell/build-outputs
path: ifcopenshell_build
ref: wasm
lfs: true
token: ${{ secrets.BUILD_REPO_TOKEN }}
- name: Unpack Dependencies
run: |
cd ifcopenshell_build
python ../IfcOpenShell/nix/cache_dependencies.py unpack
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.21
with:
key: ubuntu-22.04-${{ runner.arch }}
- name: Build
run: |
./IfcOpenShell/pyodide/build_pyodide.sh
FILE=`echo dist/ifcopenshell-*.whl`
NEW_FILE=`echo $FILE | sed "s/-/+${GITHUB_SHA:0:7}-/2"`
mv $FILE $NEW_FILE
- name: Upload Build Logs
if: always()
uses: actions/upload-artifact@v7
with:
name: build-logs-pyodide
path: |
ifcopenshell_build/*/*/logs/*.log
retention-days: 30
- name: Run wheel tests
run: |
cp -r IfcOpenShell/pyodide/test test
# venv set up in build_pyodide.sh.
source .venv/bin/activate
uv pip install pytest-pyodide
PYODIDE_ROOT_DIST=`pyodide config get pyodide_root`/dist
# `pytest-pyodide` requires pyodide in 'pyodide' directory in cwd, when running `pytest`.
cp -r $PYODIDE_ROOT_DIST test/pyodide
cp dist/ifcopenshell-*.whl test/pyodide
cd test
pytest --capture=no
- name: Pack Dependencies
run: |
cd ifcopenshell_build
python ../IfcOpenShell/nix/cache_dependencies.py pack
- name: Commit and Push Changes to Build Repository
run: |
cd ifcopenshell_build
git config user.name "IfcOpenBot"
git config user.email "ifcopenbot@ifcopenshell.org"
git add */*/install/cache-*.tar.gz
git commit -m "Update build artifacts [skip ci]" || echo "No changes to commit"
git push || echo "Push failed"
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Upload .zip archives to S3
run: |
aws s3 cp dist s3://ifcopenshell-builds/ --recursive --exclude "*" --include "*.whl"
+126
View File
@@ -0,0 +1,126 @@
name: Build IfcOpenShell Linux
on:
workflow_dispatch:
jobs:
build_ifcopenshell:
runs-on: ubuntu-22.04
container: rockylinux:9
steps:
- name: Install Dependencies
run: |
dnf update -y
dnf install -y gcc gcc-c++ git autoconf automake bison make zip cmake python3 python3-pip \
bzip2 patch mesa-libGL-devel libffi-devel fontconfig-devel \
sqlite-devel bzip2-devel zlib-devel openssl-devel xz-devel \
readline-devel ncurses-devel libffi-devel libuuid-devel git-lfs \
findutils xz byacc
python3 -m pip install typing_extensions
git config --global --add safe.directory '*'
- name: Install aws cli
run: |
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
rm -rf awscliv2.zip aws
aws --version
- name: Checkout Repository
uses: actions/checkout@v6
with:
submodules: recursive
- name: Checkout Build Repository
uses: actions/checkout@v6
with:
repository: IfcOpenShell/build-outputs
path: ./build
ref: rockylinux9-x64
lfs: true
token: ${{ secrets.BUILD_REPO_TOKEN }}
- name: Unpack Dependencies
run: |
cd build
python3 ../nix/cache_dependencies.py unpack
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.21
with:
key: ubuntu-22.04-${{ runner.arch }}-rockylinux9
- name: Run Build Script
shell: bash
run: |
set -o pipefail
CXXFLAGS="-O3" CFLAGS="-O3 ${DARWIN_C_SOURCE}" ADD_COMMIT_SHA=1 BUILD_CFG=Release python3 ./nix/build-all.py -v --diskcleanup 2>&1 | tee build.log
- name: Upload Build Logs
if: always()
uses: actions/upload-artifact@v7
with:
name: build-logs-rocky
path: |
build.log
build/*/*/logs/*.log
retention-days: 30
- name: Pack Dependencies
run: |
cd build
python3 ../nix/cache_dependencies.py pack
- name: Commit and Push Changes to Build Repository
run: |
cd build
git config user.name "IfcOpenBot"
git config user.email "ifcopenbot@ifcopenshell.org"
git add "$(find . -maxdepth 4 -name install)/*.tar.gz"
git commit -m "Update build artifacts [skip ci]" || echo "No changes to commit"
git push || true
- name: Package .zip archives
run: |
VERSION=v`cat VERSION`
cd ./build/`uname`/*/install/ifcopenshell
mkdir ~/output
ls -d python-* | while read py_version; do
postfix=`echo ${py_version: -1} | sed s/[0-9]//`
numbers=`echo $py_version | grep -oE '[0-9]+\.[0-9]+' | tr -d '.'`
py_version_major=python-${numbers}$postfix
pushd . > /dev/null
cd $py_version
if [ ! -d ifcopenshell ]; then
mkdir ../ifcopenshell_
mv * ../ifcopenshell_
mv ../ifcopenshell_ ifcopenshell
fi
[ -d ifcopenshell/__pycache__ ] && rm -rf ifcopenshell/__pycache__
find ifcopenshell -name "*.pyc" -delete
zip -r -qq ifcopenshell-${py_version_major}-${VERSION}-${GITHUB_SHA:0:7}-linux64.zip ifcopenshell/*
mv *.zip ~/output
popd > /dev/null
done
cd bin
rm *.zip || true
ls | while read exe; do
zip -qq -r ${exe}-${VERSION}-${GITHUB_SHA:0:7}-linux64.zip $exe
done
mv *.zip ~/output
cd ..
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Upload .zip archives to S3
run: |
aws s3 cp ~/output s3://ifcopenshell-builds/ --recursive
+126
View File
@@ -0,0 +1,126 @@
name: Build IfcOpenShell Linux ARM
on:
workflow_dispatch:
jobs:
build_ifcopenshell:
runs-on: ubuntu-22.04-arm
container: arm64v8/rockylinux:9
steps:
- name: Install Dependencies
run: |
dnf update -y
dnf install -y gcc gcc-c++ git autoconf automake bison make zip cmake python3 python3-pip \
bzip2 patch mesa-libGL-devel libffi-devel fontconfig-devel \
sqlite-devel bzip2-devel zlib-devel openssl-devel xz-devel \
readline-devel ncurses-devel libffi-devel libuuid-devel git-lfs \
findutils xz byacc
python3 -m pip install typing_extensions
git config --global --add safe.directory '*'
- name: Install aws cli
run: |
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
rm -rf awscliv2.zip aws
aws --version
- name: Checkout Repository
uses: actions/checkout@v6
with:
submodules: recursive
- name: Checkout Build Repository
uses: actions/checkout@v6
with:
repository: IfcOpenShell/build-outputs
path: ./build
ref: rockylinux9-arm64
lfs: true
token: ${{ secrets.BUILD_REPO_TOKEN }}
- name: Unpack Dependencies
run: |
cd build
python3 ../nix/cache_dependencies.py unpack
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.21
with:
key: ubuntu-22.04-${{ runner.arch }}-rockylinux9
- name: Run Build Script
shell: bash
run: |
set -o pipefail
CXXFLAGS="-O3" CFLAGS="-O3 ${DARWIN_C_SOURCE}" ADD_COMMIT_SHA=1 BUILD_CFG=Release python3 ./nix/build-all.py -v --diskcleanup 2>&1 | tee build.log
- name: Upload Build Logs
if: always()
uses: actions/upload-artifact@v7
with:
name: build-logs-rocky-arm64
path: |
build.log
build/*/*/logs/*.log
retention-days: 30
- name: Pack Dependencies
run: |
cd build
python3 ../nix/cache_dependencies.py pack
- name: Commit and Push Changes to Build Repository
run: |
cd build
git config user.name "IfcOpenBot"
git config user.email "ifcopenbot@ifcopenshell.org"
git add "$(find . -maxdepth 4 -name install)/*.tar.gz"
git commit -m "Update build artifacts [skip ci]" || echo "No changes to commit"
git push || true
- name: Package .zip archives
run: |
VERSION=v`cat VERSION`
cd ./build/`uname`/*/install/ifcopenshell
mkdir ~/output
ls -d python-* | while read py_version; do
postfix=`echo ${py_version: -1} | sed s/[0-9]//`
numbers=`echo $py_version | grep -oE '[0-9]+\.[0-9]+' | tr -d '.'`
py_version_major=python-${numbers}$postfix
pushd . > /dev/null
cd $py_version
if [ ! -d ifcopenshell ]; then
mkdir ../ifcopenshell_
mv * ../ifcopenshell_
mv ../ifcopenshell_ ifcopenshell
fi
[ -d ifcopenshell/__pycache__ ] && rm -rf ifcopenshell/__pycache__
find ifcopenshell -name "*.pyc" -delete
zip -r -qq ifcopenshell-${py_version_major}-${VERSION}-${GITHUB_SHA:0:7}-linuxarm64.zip ifcopenshell/*
mv *.zip ~/output
popd > /dev/null
done
cd bin
rm *.zip || true
ls | while read exe; do
zip -qq -r ${exe}-${VERSION}-${GITHUB_SHA:0:7}-linuxarm64.zip $exe
done
mv *.zip ~/output
cd ..
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Upload .zip archives to S3
run: |
aws s3 cp ~/output s3://ifcopenshell-builds/ --recursive
+109
View File
@@ -0,0 +1,109 @@
name: Build IfcOpenShell Windows
on:
workflow_dispatch:
jobs:
build_ifcopenshell:
strategy:
fail-fast: false
matrix:
include:
- arch: x64
runs_on: windows-2022
deps_dir: _deps-vs2022-x64-installed
vcvars: '"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"'
build_branch: windows-x64
zip_suffix: win64
- arch: ARM64
runs_on: windows-11-arm
deps_dir: _deps-vs2022-ARM64-installed
vcvars: '"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsarm64.bat"'
build_branch: windows-arm64
zip_suffix: win-arm64
runs-on: ${{ matrix.runs_on }}
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
submodules: recursive
- name: Checkout Build Repository
uses: actions/checkout@v6
with:
repository: IfcOpenShell/build-outputs
path: ${{ matrix.deps_dir }}
ref: ${{ matrix.build_branch }}
lfs: true
token: ${{ secrets.BUILD_REPO_TOKEN }}
- name: Install Dependencies
run: |
choco install -y sed 7zip.install awscli
- name: Unpack Dependencies
run: |
cd ${{ matrix.deps_dir }}
Get-ChildItem -Path . -Filter 'cache-*.zip' | ForEach-Object {
7z x $_.FullName
}
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.21
with:
key: win-${{ matrix.arch }}
# Windows ccache needs ~1GB
# and with default 500MB some cache gets deleted, leading to misses.
max-size: 5000MB
- name: Run Build Script And Pack .zip Archives
shell: cmd
env:
TARGET_ARCH: ${{ matrix.arch }} # lets the Python script know which arch to target (optional override)
run: |
call ${{ matrix.vcvars }}
cd win
python build-all-win.py
- name: Pack Dependencies
run: |
cd ${{ matrix.deps_dir }}
Get-ChildItem -Path . -Directory | ForEach-Object {
$cacheFile = "cache-$($_.Name).zip"
echo $cacheFile
if (!(Test-Path $cacheFile)) {
7z a $cacheFile $_.FullName
}
}
- name: Commit and Push Changes to Build Repository
run: |
cd ${{ matrix.deps_dir }}
git config user.name "IfcOpenBot"
git config user.email "ifcopenbot@ifcopenshell.org"
git checkout -B ${{ matrix.build_branch }}
git add *.zip
git commit -m "Update build artifacts [skip ci]" || echo "No changes to commit"
git push --set-upstream origin ${{ matrix.build_branch }} || echo "Push failed"
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v6
with:
aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Upload .zip Archives to S3
env:
AWS_DEBUG: 1
AWS_RETRY_MODE: standard
AWS_MAX_ATTEMPTS: 3
run: |
dir "$env:USERPROFILE\output"
foreach ($zip in Get-ChildItem -Path "$env:USERPROFILE\output" -Filter *.zip) {
aws s3 cp "$($zip.FullName)" s3://ifcopenshell-builds/ --debug
Start-Sleep -Seconds 5
}
+2 -2
View File
@@ -1,9 +1,9 @@
import os
import pathlib
import shutil
import zipfile
import requests
import zipfile
import os
# To test this locally, set these environment variables
REPO_OWNER = os.environ.get("REPO_OWNER", "IfcOpenShell/IfcOpenShell")
+3 -3
View File
@@ -19,8 +19,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2 # https://github.com/actions/checkout
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6 # https://github.com/actions/checkout
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
@@ -34,7 +34,7 @@ jobs:
cd src/bcf &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+108
View File
@@ -0,0 +1,108 @@
name: ci-black-formatting
on:
push:
pull_request:
jobs:
lint-formatting:
runs-on: ubuntu-latest
env:
MIN_IOS_PY_VERSION: "3.10"
MIN_BLENDER_PY_VERSION: "3.11"
steps:
- name: Action - checkout repository
uses: actions/checkout@v6
- name: Action - install python
uses: actions/setup-python@v6
with:
python-version: ${{ env.MIN_IOS_PY_VERSION }}
- name: Action - install python
uses: actions/setup-python@v6
with:
python-version: ${{ env.MIN_BLENDER_PY_VERSION }}
- name: Install dependencies
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install ruff
uv tool install black
uv tool install poethepoet
# black doesn't catch all syntax errors, so we check them explicitly.
- name: Check syntax errors
id: syntax-errors
run: |
ERROR=0
# Using 2 Python versions - one minimum required for IfcOpenShell
# and other that's used by Blender currently.
python${{ env.MIN_IOS_PY_VERSION }} -W error -m compileall -q src/ifcopenshell-python || ERROR=1
python${{ env.MIN_BLENDER_PY_VERSION }} -W error -m compileall -q src/bonsai || ERROR=1
exit $ERROR
continue-on-error: true
- name: Black formatter
id: black
uses: psf/black@stable
continue-on-error: true
# Same check as above, but just for creating github annotations.
- name: Black formatter annotations
id: black-annotations
run: |
uv tool install black-codeclimate
pip install github_action_utils
black --diff --check . | black-codeclimate | python .github/workflows/black_to_github_annotations.py
continue-on-error: true
- name: Ruff check
id: ruff
run: |
# Ensure execution continues, since we need to cache the output.
set +e
ERROR=0
# Keep colored output inside action logs, strip it from color codes for summary.
uv tool install ansi2txt
# `ruff` disables color output in CI by default.
export FORCE_COLOR="1"
run_check() {
local out
out="$("$@" 2>&1)"
local exit_code=$?
if [ "$exit_code" -ne 0 ]; then
ERROR=1
fi
# Rerun just for GitHub annotations.
"$@" --output-format=github || true
echo "$out"
echo "\`\`\`python" >> $GITHUB_STEP_SUMMARY
echo "$out" | ansi2txt >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
}
run_check poe ruff-main
run_check poe ruff-old
exit $ERROR
continue-on-error: true
- name: Final check
run: |
ERROR=0
if [ "${{ steps.syntax-errors.outcome }}" != "success" ]; then
echo "::error::Syntax errors check failed, see 'syntax-errors' step for the details." && ERROR=1
fi
if [ "${{ steps.black.outcome }}" != "success" ]; then
echo "::error::Black formatting check failed, see Summary or 'black' step for the details." && ERROR=1
fi
if [ "${{ steps.ruff.outcome }}" != "success" ]; then
echo "::error::Ruff check failed, see Summary or 'ruff' step for the details." && ERROR=1
fi
exit $ERROR
-12
View File
@@ -1,12 +0,0 @@
name: ci-black-formatting
on:
push:
pull_request:
jobs:
lint-formatting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: psf/black@stable
+1 -1
View File
@@ -34,7 +34,7 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-tags: true
fetch-depth: 0
+63 -35
View File
@@ -24,9 +24,15 @@ jobs:
runs-on: ubuntu-latest
if: |
github.repository == 'IfcOpenShell/IfcOpenShell'
outputs:
timestamp: ${{ steps.timestamp.outputs.timestamp }}
steps:
- name: Set env
run: echo ok go
- name: Get current timestamp
id: timestamp
# Include hours and minutes to release tag
# to avoid possibility of unstable repo's index.json
# pointing to the new file when index.json itself wasn't yet updated.
run: echo "timestamp=$(date +'%y%m%d%H%M')" >> $GITHUB_OUTPUT
build:
needs: activate
@@ -35,7 +41,7 @@ jobs:
strategy:
fail-fast: false
matrix:
pyver: [py311, py312]
pyver: [py311, py312, py313]
config:
- {
name: "Windows Build",
@@ -53,21 +59,20 @@ jobs:
name: "MacOS ARM Build",
short_name: macosm1,
}
exclude:
# Python 3.13 is needed for Blender 5.1+ and Blender dropped Intel Mac support in 5.0.
- pyver: py313
config:
short_name: macos
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
python-version: '3.11'
- name: Get current version
id: version
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Get current date
id: date
# Include hours and minutes to release tag
# to avoid possibility of unstable repo's index.json
# pointing to the new file when index.json itself wasn't yet updated.
run: echo "date=$(date +'%y%m%d%H%M')" >> $GITHUB_OUTPUT
- name: Compile
run: |
cd src/bonsai && make dist PLATFORM=${{ matrix.config.short_name }} PYVERSION=${{ matrix.pyver }}
@@ -83,8 +88,8 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.find_zip.outputs.filepath }}
asset_name: ${{ steps.find_zip.outputs.filename }}
release_name: "bonsai-${{steps.version.outputs.version}}-alpha${{steps.date.outputs.date}} (unstable)"
tag: "bonsai-${{steps.version.outputs.version}}-alpha${{steps.date.outputs.date}}"
release_name: "bonsai-${{steps.version.outputs.version}}-alpha${{ needs.activate.outputs.timestamp }} (unstable)"
tag: "bonsai-${{steps.version.outputs.version}}-alpha${{ needs.activate.outputs.timestamp }}"
overwrite: true
body: "See README in https://github.com/IfcOpenShell/bonsai_unstable_repo/ on how to setup autoupdates for daily Bonsai builds."
@@ -93,18 +98,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout bonsai_unstable_repo repository
uses: actions/checkout@v2
uses: actions/checkout@v6
with:
repository: IfcOpenShell/bonsai_unstable_repo
token: ${{ secrets.IOS_TO_BLENDER_REPO }}
token: ${{ secrets.IFCOPENBOT_TOKEN }}
path: bonsai_unstable_repo
- name: Update index.json on extensions repo
- name: Download Blender and run critical tests
run: |
set -x -e
# Ensure Bonsai and ifcsverchok enable/disable works before uploading to extensions repo.
# Download Blender.
wget -q -O blender.tar.xz https://ftp.nluug.nl/pub/graphics/blender/release/Blender4.2/blender-4.2.0-linux-x64.tar.xz
wget -q -O blender.tar.xz https://download.blender.org/release/Blender5.0/blender-5.0.1-linux-x64.tar.xz
tar -xf blender.tar.xz
# Setup Blender.
@@ -112,25 +117,25 @@ jobs:
export PATH="$PATH:$BLENDER_PATH"
blender --version
# Setup unstable repo to get Bonsai build.
cd bonsai_unstable_repo
pip install -r requirements.txt
python setup_extensions_repo.py --last-tag
git config --global user.name 'IfcOpenBot'
git config --global user.email 'IfcOpenBot@users.noreply.github.com'
git add index.json
git add readme.md
git commit -m "Update index.json"
git push
- name: Run bonsai tests
run: |
set -x -e
BLENDER_PATH=$(find blender-*/ -maxdepth 0 -exec readlink -f {} \;)
export PATH="$PATH:$BLENDER_PATH"
cd ..
bonsai_zip="$(pwd)/$(ls bonsai_unstable_repo/bonsai_py311*-linux-x64.zip)"
blender --version
# Install Bonsai.
blender --command extension install-file -r user_default -e $bonsai_zip
blender --command extension list
git clone https://github.com/IfcOpenShell/IfcOpenShell.git IfcOpenShell
# Reregister Bonsai.
# Note that running it in background might miss some errors
# (e.g. tools are not registered in background mode).
blender --background --python IfcOpenShell/src/bonsai/scripts/reregister_bonsai.py
# Install sverchok.
wget -q -O sverchok.zip https://github.com/nortikin/sverchok/archive/refs/heads/master.zip
# ifcsverchok expecting sverchok to be named "sverchok" and not "sverchok-master".
unzip -q sverchok.zip
@@ -139,20 +144,43 @@ jobs:
rm -r sverchok
blender --command extension install-file -r user_default sverchok.zip
git clone https://github.com/IfcOpenShell/IfcOpenShell.git IfcOpenShell
# Install ifcsverchok.
cd IfcOpenShell/src/ifcsverchok
make dist
sverchok_zip="$(pwd)/dist/$(ls dist)"
blender --command extension install-file -r user_default $sverchok_zip
- name: Update index.json on extensions repo
run: |
set -x -e
# Setup Blender.
BLENDER_PATH=$(find blender-*/ -maxdepth 0 -exec readlink -f {} \;)
export PATH="$PATH:$BLENDER_PATH"
blender --version
cd bonsai_unstable_repo
git config --global user.name 'IfcOpenBot'
git config --global user.email 'IfcOpenBot@users.noreply.github.com'
git add index.json
git add readme.md
git commit -m "Update index.json"
git push
- name: Run bonsai tests
run: |
set -x -e
BLENDER_PATH=$(find blender-*/ -maxdepth 0 -exec readlink -f {} \;)
export PATH="$PATH:$BLENDER_PATH"
blender --version
# Install Sun Position extension.
blender --online-mode --command extension sync
blender --online-mode --background --python-expr "import bpy; \
bpy.ops.extensions.package_install(repo_index=0, pkg_id='sun_position'); \
bpy.ops.preferences.addon_enable(module='bl_ext.blender_org.sun_position'); bpy.ops.wm.save_userpref()"
blender --online-mode --command extension install --enable --sync sun_position
cd ../bonsai
cd IfcOpenShell/src/bonsai
pip install pytest-blender
pip install pytest-bdd
blender --background --python scripts/setup_pytest.py
blender --python-expr "import bonsai; print(bonsai.bbim_semver); import ifcopenshell; print(ifcopenshell.version)" --background
make test
+2 -2
View File
@@ -43,8 +43,8 @@ jobs:
short_name: macosm1,
}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
python-version: '3.11'
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/bsdd &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/ifc4d &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/ifc5d &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/ifccityjson &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/ifcclash &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+2 -6
View File
@@ -24,10 +24,6 @@ jobs:
name: "Windows 64bit",
short_name: win64,
}
- {
name: "Windows 32bit",
short_name: win32,
}
- {
name: "Linux 64bit",
short_name: linux64
@@ -41,8 +37,8 @@ jobs:
short_name: macosm164
}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/ifccsv &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/ifcdiff &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/ifcfm &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
@@ -24,7 +24,7 @@ jobs:
if: |
github.repository == 'IfcOpenShell/IfcOpenShell'
steps:
- uses: mamba-org/setup-micromamba@v1 # https://github.com/mamba-org/setup-micromamba
- uses: mamba-org/setup-micromamba@v2 # https://github.com/mamba-org/setup-micromamba
with:
environment-name: test-env
create-args: >-
@@ -21,7 +21,7 @@ jobs:
date: ${{ steps.date.outputs.date }}
verdate: ${{ steps.verdate.outputs.verdate }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Set env
run: echo ok go
@@ -35,11 +35,11 @@ jobs:
- name: Version + date str
id: verdate
run: echo "verdate='${{ steps.version.outputs.version }}alpha${{ steps.date.outputs.date }}'" >> $GITHUB_OUTPUT
run: echo "verdate=${{ steps.version.outputs.version }}alpha${{ steps.date.outputs.date }}" >> $GITHUB_OUTPUT
test:
name: ${{ matrix.platform.distver }}-${{ matrix.pyver.name }}-${{ matrix.variant }}
name: ${{ matrix.platform.distver }}-${{ matrix.pyver.name }}
needs: activate
runs-on: ${{ matrix.platform.distver }}
defaults:
@@ -48,57 +48,66 @@ jobs:
strategy:
fail-fast: false
matrix:
variant: [novtk, all]
pyver: [
# { name: py311, distver: '3.11'},
{ name: py312, distver: '3.12'}
]
platform: [
{ name: win, distver: windows-latest, pkg_dir: 'win-64' },
{ name: linux, distver: ubuntu-latest, pkg_dir: 'linux-64' },
{ name: macOS, distver: macos-latest, pkg_dir: 'osx-64' }
{ name: macOS-arm, distver: macos-latest, pkg_dir: 'osx-arm64' }
]
steps:
- name: Set up swap space
- name: Set Swap Space
if: runner.os == 'Linux'
uses: pierotofy/set-swap-space@v1.0
uses: pierotofy/set-swap-space@master
with:
swap-size-gb: 10
- uses: actions/checkout@v4
- name: set ARTIFACTS ENV vars
shell: bash
run: |
pwd
if [[ "$RUNNER_OS" == "Windows" ]]; then
echo "ARTIFACTS_DIR=D:/a/artifacts" >> $GITHUB_ENV
elif [[ "$RUNNER_OS" == "macOS" ]]; then
echo "ARTIFACTS_DIR=/Users/runner/work/artifacts" >> $GITHUB_ENV
elif [[ "$RUNNER_OS" == "Linux" ]]; then
echo "ARTIFACTS_DIR=/home/runner/work/artifacts" >> $GITHUB_ENV
fi
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Download and extract MacOSX SDK
if: ${{ runner.os == 'macOS' }}
if: ${{ matrix.platform.name == 'macOS-x86' }}
run: |
curl -L https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX10.13.sdk.tar.xz | tar -xvJf - -C /Users/runner/work/
- uses: mamba-org/setup-micromamba@v1 # https://github.com/mamba-org/setup-micromamba
- uses: mamba-org/setup-micromamba@v2 # https://github.com/mamba-org/setup-micromamba
with:
environment-name: test-env
create-args: >-
python=3.11
python=3.12
anaconda-client
boa
rattler-build
- name: create conda package dist dir
run: |
mkdir -p ${{ github.workspace }}/dist
mkdir -p ${{ env.ARTIFACTS_DIR }}
- name: build & test ifcopenshell
run: |
conda mambabuild . --python ${{ matrix.pyver.distver }} --no-remove-work-dir --output-folder '${{ github.workspace }}/dist' --variants='{variant: ${{ matrix.variant }}}'
working-directory: ./conda
rattler-build build -r conda/recipe.yaml --output-dir '${{ env.ARTIFACTS_DIR }}'
env:
VERSION_OVERRIDE: ${{ needs.activate.outputs.verdate }}
- name: upload to anaconda
if: ${{ matrix.platform.name == 'win' }}
run: |
anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --force --user ifcopenshell '${{ github.workspace }}/dist/${{ matrix.platform.pkg_dir }}/*.tar.bz2'
anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --force --user ifcopenshell '${{ env.ARTIFACTS_DIR }}/${{ matrix.platform.pkg_dir }}/*.conda'
- name: upload to anaconda
if: ${{ matrix.platform.name != 'win' }}
run: |
anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --force --user ifcopenshell ${{ github.workspace }}/dist/${{ matrix.platform.pkg_dir }}/*.tar.bz2
anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --force --user ifcopenshell ${{ env.ARTIFACTS_DIR }}/${{ matrix.platform.pkg_dir }}/*.conda
+13 -15
View File
@@ -9,7 +9,7 @@ on:
jobs:
activate:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
if: |
github.repository == 'IfcOpenShell/IfcOpenShell' &&
!startsWith(github.event.head_commit.message, 'Release ') &&
@@ -18,10 +18,10 @@ jobs:
- run: echo ok go
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
needs: activate
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
with:
submodules: recursive
@@ -35,15 +35,13 @@ jobs:
-
name: ccache
uses: hendrikmuhs/ccache-action@v1
uses: hendrikmuhs/ccache-action@v1.2.21
-
name: Build ifcopenshell
run: |
mkdir build && cd build
cmake \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=$PWD/install/ \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/usr \
@@ -75,7 +73,7 @@ jobs:
make package
working-directory: build
- name: Upload
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v7
with:
# Artifact name
name: ifcos-artifacts
@@ -83,41 +81,41 @@ jobs:
path: build/assets/Ifc*
deliver:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
needs: build
name: Docker Build, Tag, Push
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
with:
lfs: true
- name: Download
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v8.0.1
with:
# Artifact name
name: ifcos-artifacts
path: artifacts/
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v4
-
name: Login to Dockerhub
uses: docker/login-action@v1
uses: docker/login-action@v4
with:
username: aecgeeks
password: ${{ secrets.DOCKER_HUB_TOKEN }}
-
name: Build container image
uses: docker/build-push-action@v2
uses: docker/build-push-action@v7
with:
context: artifacts
repository: aecgeeks/ifcopenshell
# Since the dispatch is set to `tag`, `github.ref_name` should evaluate to the pushed tag
# On a workflow dispatch, `ref_name` will take on the value from the dispatch payload
tags: aecgeeks/ifcopenshell:${{ github.ref_name }}${{ github.ref_name == github.event.repository.default_branch && ',aecgeeks/ifcopenshell:latest' }}
tags: aecgeeks/ifcopenshell:${{ github.ref_name }}${{ github.ref_name == github.event.repository.default_branch && ',aecgeeks/ifcopenshell:22.04' }}
file: ./Dockerfile
push: true
@@ -24,7 +24,7 @@ jobs:
strategy:
fail-fast: false
matrix:
pyver: [py39, py310, py311, py312]
pyver: [py310, py311, py312, py313, py314]
config:
- {
name: "Windows 64bit",
@@ -34,6 +34,10 @@ jobs:
name: "Linux 64bit",
short_name: linux64
}
- {
name: "Linux ARM 64bit",
short_name: linuxarm64
}
- {
name: "MacOS Intel 64bit",
short_name: macos64
@@ -43,8 +47,10 @@ jobs:
short_name: macosm164
}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
@@ -59,7 +65,7 @@ jobs:
cd src/ifcopenshell_${{ matrix.config.short_name }}_${{ matrix.pyver }} &&
make dist PLATFORM=${{ matrix.config.short_name }} PYVERSION=${{ matrix.pyver }} IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+5 -7
View File
@@ -19,16 +19,12 @@ jobs:
strategy:
fail-fast: false
matrix:
pyver: [py39, py310, py311, py312]
pyver: [py310, py311, py312, py313, py314]
config:
- {
name: "Windows 64bit",
short_name: win64,
}
- {
name: "Windows 32bit",
short_name: win32,
}
- {
name: "Linux 64bit",
short_name: linux64
@@ -42,8 +38,10 @@ jobs:
short_name: macosm164
}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/ifcpatch &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+2 -2
View File
@@ -25,8 +25,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
python-version: '3.11'
+2 -2
View File
@@ -19,8 +19,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
python-version: '3.11'
+32
View File
@@ -0,0 +1,32 @@
name: ci-ifctester-org
on:
workflow_dispatch:
push:
paths:
- src/ifctester/**
jobs:
publish_website:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- name: Checkout ifctester_org_static_html
uses: actions/checkout@v6
with:
repository: IfcOpenShell/ifctester_org_static_html
token: ${{ secrets.IFCOPENBOT_TOKEN }}
path: ifctester_org_static_html
- name: Build webapp
working-directory: ./src/ifctester
run: |
sudo apt update && sudo apt install -y nodejs
git config --global user.name 'IfcOpenBot'
git config --global user.email 'IfcOpenBot@users.noreply.github.com'
make webapp-build
- name: Commit and push
run: |
cp -r src/ifctester/webapp/dist/* ifctester_org_static_html/
git -C ifctester_org_static_html add .
git -C ifctester_org_static_html commit --allow-empty -m "$(git log --oneline -1)"
git -C ifctester_org_static_html push
+3 -3
View File
@@ -18,8 +18,8 @@ jobs:
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
- uses: actions/checkout@v6
- uses: actions/setup-python@v6 # https://github.com/actions/setup-python
with:
python-version: '3.11' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- name: Compile
@@ -28,7 +28,7 @@ jobs:
cd src/ifctester &&
make dist IS_STABLE=TRUE
- name: Publish a Python distribution to PyPI
uses: ortega2247/pypi-upload-action@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
+172 -43
View File
@@ -15,6 +15,7 @@ on:
- 'src/ifcparse/**'
- 'src/ifcwrap/**'
- 'src/qtviewer/**'
- 'src/svgfill/**'
- 'src/serializers/**'
- 'conda/**'
- 'cmake/**'
@@ -23,23 +24,27 @@ on:
jobs:
activate:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
if: |
github.repository == 'IfcOpenShell/IfcOpenShell' &&
!contains(github.event.head_commit.message, 'skip ci')
steps:
- run: echo ok go
build:
runs-on: ubuntu-latest
compile-and-test:
runs-on: ubuntu-22.04
needs: activate
env:
# Colored output for cmake.
CLICOLOR_FORCE: "1"
CMAKE_COLOR_DIAGNOSTICS: "ON"
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: 3.11
@@ -47,13 +52,17 @@ jobs:
run: |
python -m pip install --upgrade pip
pip install xmlschema xsdata numpy lxml pytest isodate lark networkx tabulate python-dateutil shapely
pip install mathutils
pip install src/bcf --no-deps
pip install https://github.com/Andrej730/aud/archive/refs/heads/master-reduced-size.zip
pip install pytest-xdist==3.8.0
- name: Install C++ dependencies
run: |
sudo apt update
# `occt-misc` is only needed for 22.04, since it has cmake configs.
# In 24.04+, the needed files were moved `libocct-foundation-dev` and `occt-misc` can be removed.
# Other libs in `OCCT_CMAKE_DEPS` are needed only for cmake config to work properly, they're not used directly.
OCCT_CMAKE_DEPS="occt-misc libocct-draw-dev tcl-dev tk-dev libxi-dev"
sudo apt-get install --no-install-recommends \
git cmake gcc g++ \
libboost-date-time-dev \
@@ -63,15 +72,98 @@ jobs:
libboost-regex-dev \
libboost-system-dev \
libboost-thread-dev \
swig libpcre3-dev libxml2-dev \
libpcre3-dev libxml2-dev \
libtbb-dev nlohmann-json3-dev \
libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev libocct-data-exchange-dev \
${OCCT_CMAKE_DEPS} \
libhdf5-dev libcgal-dev libeigen3-dev
- name: ccache
uses: hendrikmuhs/ccache-action@v1
uses: hendrikmuhs/ccache-action@v1.2.21
with:
key: ${GITHUB_WORKFLOW}
key: ubuntu-22.04-${{ runner.arch }}
# RTTI is only enabled by default in Debug builds of rocksdb.
# Distros are using Release builds, so we're compiling it ourselves with RTTI forced on.
# https://github.com/facebook/rocksdb/blob/a3aa44a7167b8336f9bc15c8aba063260268ff68/CMakeLists.txt#L433
- name: build rocksdb
run: |
git clone https://github.com/facebook/rocksdb --branch v9.11.2
cd rocksdb
mkdir build && cd build
# rocksdb is using ccache automatically.
cmake -DFAIL_ON_WARNINGS=Off \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DWITH_TESTS=OFF \
-DWITH_TOOLS=OFF \
-DWITH_GFLAGS=OFF \
-DWITH_BENCHMARK_TOOLS=OFF \
-DWITH_CORE_TOOLS=OFF \
-DROCKSDB_BUILD_SHARED=Off \
-DCMAKE_POSITION_INDEPENDENT_CODE=On \
-DUSE_RTTI=On \
..
sudo make -j$(nproc) install
# OpenCOLLADA is ancient, but we still have it in the main build.
# So adding it to CI to catch any breakages.
- name: build OpenCOLLADA
run: |
git clone https://github.com/KhronosGroup/OpenCOLLADA
cd OpenCOLLADA
git checkout v1.6.68
patch -p1 --batch --forward -i ../nix/patches/opencollada/pr622_and_disable_subdirs.patch
patch -p1 --batch --forward -i ../nix/patches/opencollada/allow_static_libraries_config_on_unix.patch
mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_FLAGS_INIT="-fPIC"
sudo make -j$(nproc) install
# We need zstd and libxml2 just for cmake config files to test the examples build.
# zslibzstd-dev has cmake config only on Ubuntu 24.04+.
- name : Build zstd
run: |
git clone https://github.com/facebook/zstd --depth 1 --branch v1.5.7
cd zstd
# `build` already exists.
mkdir build_ && cd build_
cmake ../build/cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
sudo cmake --build . --target install -j $(nproc)
# libxml2-dev doesn't have cmake configs even on Ubuntu 24.04+.
- name: Build libxml2
run: |
git clone https://gitlab.gnome.org/GNOME/libxml2.git --branch v2.13.8 --depth 1
cd libxml2
mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
sudo cmake --build . --target install -j $(nproc)
# Ubuntu has `swig` package, but we build it to match the version we use in the main build.
# To avoid failing tests when checking stub generation.
- name: build swig
run: |
# Remove default swig to avoid conflicts.
sudo apt remove --purge swig swig4.0
sudo apt-get install -y libpcre2-dev bison
git clone https://github.com/swig/swig --branch v4.1.0 --depth 1
cd swig
mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
sudo make -j$(nproc) install
- name: Build ifcopenshell
run: |
@@ -80,45 +172,70 @@ jobs:
mkdir build && cd build
cmake \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/usr \
-DCMAKE_SYSTEM_PREFIX_PATH=/usr \
-DOCC_INCLUDE_DIR=/usr/include/opencascade \
-DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
-DPYTHON_EXECUTABLE:FILEPATH=${{ env.pythonLocation }}/bin/python \
-DPYTHON_INCLUDE_DIR:PATH=${{ env.pythonLocation }}/include/python3.11 \
-DPYTHON_LIBRARY:FILEPATH=${{ env.pythonLocation }}/lib/libpython3.11.so \
-DCOLLADA_SUPPORT=Off \
-DUSE_MMAP=On \
"-DSCHEMA_VERSIONS=2x3;4;4x3_add2" \
-DGLTF_SUPPORT=On \
-DJSON_INCLUDE_DIR=/usr/include \
-DCGAL_INCLUDE_DIR=/usr/include \
-DGMP_INCLUDE_DIR=/usr/include \
-DMPFR_INCLUDE_DIR=/usr/include \
-DGMP_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
-DMPFR_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
-DHDF5_INCLUDE_DIR=/usr/include/hdf5/serial \
-DEIGEN_DIR=/usr/include/eigen3 \
-DWITH_ROCKSDB=On \
-DBUILD_EXAMPLES=ON \
../cmake
sudo make -j $(nproc)
sudo make install
- name: Run IfcConvert on Sample files
run: |
(find test/input src/bonsai/test/files -name '*.ifc' | while read i; do \
echo $i | tee -a log; \
timeout 1m "$(which IfcConvert)" -yv "$i" "$i.obj" --validate >> log 2>&1; \
echo $i $? >> statuses; \
done) || true
echo Failed
grep -v 0$ statuses
grep -v 0$ statuses | wc -l
echo Succeeded
grep 0$ statuses
grep 0$ statuses | wc -l
# - name: Run IfcConvert on Sample files
# run: |
# (find test/input src/bonsai/test/files -name '*.ifc' | while read i; do \
# echo $i | tee -a log; \
# timeout 1m "$(which IfcConvert)" -yv "$i" "$i.obj" --validate >> log 2>&1; \
# echo $i $? >> statuses; \
# done) || true
# echo Failed
# grep -v 0$ statuses
# grep -v 0$ statuses | wc -l
# echo Succeeded
# grep 0$ statuses
# grep 0$ statuses | wc -l
- name: Run IfcConvert on Sample file
run: |
IfcConvert test/input/acad2010_walls.ifc test/input/acad2010_walls.obj
- name: Build standalone examples to test cmake package
run: |
set -x
cd src/examples
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
cmake --build .
./arbitrary_open_profile_def && test -f arbitrary_open_profile_def.ifc
./composite_profile_def && test -f composite_profile_def.ifc
./csg_primitive && test -f csg_primitive.ifc
./ellipse_pies && test -f ellipse_pies.ifc
./faces && test -f faces.ifc
./ifc_curve_rebar && test -f ifc_curve_rebar.ifc
./profiles
test -f IfcUShapeProfileDef.ifc
test -f IfcTShapeProfileDef.ifc
test -f IfcZShapeProfileDef.ifc
test -f IfcEllipseProfileDef.ifc
test -f IfcIShapeProfileDef.ifc
test -f IfcLShapeProfileDef.ifc
test -f IfcCShapeProfileDef.ifc
test -f IfcCircleProfileDef.ifc
test -f IfcRectangleProfileDef.ifc
test -f IfcTrapeziumProfileDef.ifc
./IfcParseExamples "../IfcParseExamples_test.ifc"
./IfcOpenHouse && test -f IfcOpenHouse.ifc
./IfcAdvancedHouse && test -f IfcAdvancedHouse.ifc
./IfcAlignment && test -f IfcAlignment.ifc
./IfcSimplifiedAlignment && test -f IfcSimplifiedAlignment.ifc
./triangulated_faceset && test -f triangulated_faceset.ifc
- name: Test ifcopenshell-python
run: |
@@ -126,11 +243,23 @@ jobs:
python tests.py
cd ../src/ifcopenshell-python
mv ifcopenshell ifcopenshell-local # Force testing on installed module
make test
cd ../bcf && make test
pip install -e ../ifcpatch --no-deps # Needed for sql.py tests.
ERROR=0
make test-parallel || ERROR=1
cd ../bcf && make test || ERROR=1
pip install requests
cd ../bsdd && make test
cd ../bsdd && make test || ERROR=1
pip install deepdiff
cd ../ifcdiff && make test
cd ../ifcpatch && make test
cd ../ifctester && make test
cd ../ifcdiff && make test || ERROR=1
cd ../ifcpatch && make test || ERROR=1
pip install -e ../ifctester --no-deps
cd ../ifctester && make test || ERROR=1
make build-ids-docs || ERROR=1
# Run mathutils related tests at the end to ensure no other code is relying on mathutils.
cd ../ifcopenshell-python
pip install mathutils
make test-mathutils || ERROR=1
if [ $ERROR -ne 0 ]; then
echo "One or more tests failed";
exit 1;
fi
@@ -0,0 +1,38 @@
name: Build and Deploy Unstable Documentation
on:
push:
branches:
- v0.8.0 # Trigger the workflow on pushes to the default branch which is currently v0.8.0
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Install dependencies
run: |
cd src/bonsai/docs # Navigate to the docs directory
pip install -r requirements.txt # Install dependencies from requirements.txt
- name: Build documentation
run: |
cd src/bonsai/docs # Navigate to the docs directory
make html # Build the documentation
- name: Deploy to GitHub Pages (Unstable)
uses: peaceiris/actions-gh-pages@v4
with:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} # SSH key for deployment
external_repository: IfcOpenShell/bonsaibim_org_docs_unstable # Target repository
publish_branch: main # Branch to deploy to
cname: docs-unstable.bonsaibim.org # Custom domain for unstable docs
publish_dir: src/bonsai/docs/_build/html # Directory containing built docs
+36
View File
@@ -0,0 +1,36 @@
name: Build and Deploy Stable Documentation
on:
workflow_dispatch: # Manual trigger
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Install dependencies
run: |
cd src/bonsai/docs
pip install -r requirements.txt # Run pip install from the docs directory
- name: Build documentation
run: |
cd src/bonsai/docs
make html
- name: Deploy to GitHub Pages (Stable)
uses: peaceiris/actions-gh-pages@v4
with:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
external_repository: IfcOpenShell/bonsaibim_org_docs
publish_branch: main
cname: docs.bonsaibim.org
publish_dir: src/bonsai/docs/_build/html
@@ -0,0 +1,50 @@
name: Deploy Pyodide Demo App to GitHub Pages
permissions:
id-token: write
pages: write
on:
push:
paths:
- 'src/pyodide/**'
- '.github/workflows/publish-pyodide-demo-app.yml'
branches:
- v0.8.0
jobs:
activate:
runs-on: ubuntu-latest
if: |
github.repository == 'IfcOpenShell/IfcOpenShell'
steps:
- name: Set env
run: echo ok go
build:
needs: activate
runs-on: ubuntu-latest
steps:
- name: Checkout (recursive)
uses: actions/checkout@v6
with:
submodules: recursive
fetch-depth: 0
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload static files as artifact
id: deployment
uses: actions/upload-pages-artifact@v4
with:
path: src/pyodide/demo-app/
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
+2 -1
View File
@@ -4,6 +4,7 @@ on:
push:
tags:
- 'v[0-9].[0-9].[0-9]*'
workflow_dispatch:
jobs:
activate:
@@ -16,7 +17,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v6
with:
submodules: recursive
- name: Install C++ dependencies
+37 -7
View File
@@ -4,6 +4,9 @@
/_deps-vs*-x*-installed/
/_installed-vs*-x*/
/build/
/src/examples/build/
# ifctester docs output
/src/ifctester/test/build/
# output directories
/cmake/out/
@@ -11,15 +14,19 @@
/src/ifcmax/out/
/src/ifcwrap/out/
/src/qtviewer/out/
/src/ifctester/webapp/public/pyodide/
/win/BuildDepsCache*.txt
# General Python residue
__pycache__
*.py.bak
venv
# Visual Studio Code files
.vscode
!.vscode/launch.json
!.vscode/tasks.json
.vs
# PyCharm files
@@ -76,16 +83,25 @@ src/ifcopenshell-python/test/build
# bonsai i18n
src/bonsai/bonsai/translations.py
# bonsai test temp files
src/bonsai/test/files/temp
src/bonsai/test/files/basic.ifc.cache.blend
src/bonsai/test/files/basic.ifc.cache.sqlite
# bonsai external dependencies (cloned for just ty checks)
src/bonsai/external_dependencies/
src/bonsai/drawings
src/bonsai/layouts
# bonsai test temp/cache files
src/bonsai/test/files/temp
src/bonsai/test/files/*.cache.blend
src/bonsai/test/files/*.cache.json
src/bonsai/test/files/*.cache.sqlite
# bonsai data
src/bonsai/bonsai/bim/data/build/
src/bonsai/bonsai/bim/data/gantt/index.html
src/bonsai/bonsai/bim/data/gantt/jsgantt.js
src/bonsai/bonsai/bim/data/gantt/jsgantt.css
src/bonsai/bonsai/bim/data/webui/static/js/jquery.min.js
src/bonsai/bonsai/bim/data/webui/running_pid.json
# ifcopenshell swig and compiled files
src/ifcopenshell-python/ifcopenshell/_ifcopenshell_wrapper.so
src/ifcopenshell-python/ifcopenshell/_ifcopenshell_wrapper*.so
src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.py
# apple
@@ -98,3 +114,17 @@ src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.py
# Brickschema
src/bonsai/bonsai/bim/schema/Brick.ttl
bonsaiDecoratorForLoads.code-workspace
dev_environment.bat
.pixi/
src/ifcopenshell-python/ifcopenshell/express/*.exp
src/ifcopenshell-python/ifcopenshell/express/*.exp.cache.dat
# temp files from AI coding tools
*.claude
*.py.tmp*
*.json.tmp*
+9 -6
View File
@@ -5,15 +5,18 @@
[submodule "src/ifcopenshell-python/ifcopenshell/mvd"]
path = src/ifcopenshell-python/ifcopenshell/mvd
url = https://github.com/opensourceBIM/python-mvdxml/
[submodule "src/svgfill"]
path = src/svgfill
url = https://github.com/IfcOpenShell/svgfill
[submodule "src/ifcopenshell-python/test/Sample-BIM-Files"]
path = src/ifcopenshell-python/test/Sample-BIM-Files
url = https://github.com/IfcOpenShell/ids-test-files
[submodule "src/ifcconvert/cityjson"]
path = src/ifcconvert/cityjson
url = https://github.com/IfcOpenShell/ifc-to-cityjson
[submodule "docs/cpp-api/assets/doxygen-awesome-css"]
path = docs/cpp-api/assets/doxygen-awesome-css
url = https://github.com/jothepro/doxygen-awesome-css.git
[submodule "src/ifcopenshell-python/ifcopenshell/simple_spf"]
path = src/ifcopenshell-python/ifcopenshell/simple_spf
url = https://github.com/IfcOpenShell/step-file-parser
[submodule "src/pyodide/demo-app/wheels"]
path = src/pyodide/demo-app/wheels
url = https://github.com/IfcOpenShell/wasm-wheels
[submodule "src/svgfill/3rdparty/svgpp"]
path = src/svgfill/3rdparty/svgpp
url = https://github.com/svgpp/svgpp
+24
View File
@@ -0,0 +1,24 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python Debugger: Remote Attach",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
},
"pathMappings": [
{
"localRoot": "${config:bonsai.localRoot}",
"remoteRoot": "${config:bonsai.remoteRoot}"
}
]
}
]
}
+53
View File
@@ -0,0 +1,53 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Configure bonsai/vscode development environment",
"type": "shell",
"command": "${input:blenderPath}",
"args": [
"--background",
"--python", "${workspaceFolder}/src/bonsai/scripts/dev_environment_vscode_config.py"
],
"problemMatcher": []
},
{
"label": "Launch blender with debugpy",
"type": "shell",
"command": "blender",
"options": {
"cwd": "${config:bonsai.blenderPath}"
},
"args": [
"--python-expr",
"import debugpy; debugpy.listen(5678)"
],
"problemMatcher": []
},
{
"label": "Install debugpy in Blender",
"type": "shell",
"command": "blender",
"options": {
"cwd": "${config:bonsai.blenderPath}"
},
"args": [
"--background",
"--python-expr",
"import os, sys, subprocess; path=os.path.abspath(sys.executable); subprocess.call([path, '-m', 'ensurepip']); subprocess.call([path, '-m', 'pip', 'install', '--upgrade', 'debugpy'])"
],
"problemMatcher": []
}
],
"inputs": [
{
"id": "blenderPath",
"type": "promptString",
"description": "Enter the path to the blender executable",
"default": "blender"
}
]
}
+153
View File
@@ -0,0 +1,153 @@
<!-- This file was generated with the assistance of an AI coding tool. -->
# AGENTS.md
Guidelines for AI coding agents contributing to IfcOpenShell. This file is
intended to be read by all AI agents regardless of platform (Claude Code,
Copilot, Cursor, etc.) in addition to any tool-specific configuration files.
Human contributors using AI tools should also read this document carefully,
as they are responsible for ensuring their contributions comply with these
guidelines.
## Project Overview
IfcOpenShell is an open source library for working with Industry Foundation
Classes (IFC). It provides C++ and Python APIs, geometry processing, and an
ecosystem of tools including IfcConvert and the Bonsai Blender add-on.
## Licensing
All contributions must be compatible with the project's licensing:
- **Library code** (everything except Bonsai): **LGPL-3.0-or-later**
- **Bonsai** (`src/bonsai/`): **GPL-3.0-or-later**
There is no Contributor License Agreement (CLA). By submitting a pull request,
you agree that your contribution is licensed under the applicable license above.
## Indicating AI-Generated Code
Contributors must clearly indicate when code has been generated or
substantially written by an AI tool.
### Commits
Commits that modify existing code must include a note in the **body** of the
commit message (not the subject line) indicating that the change was
AI-generated. For example:
```
Fix off-by-one error in element iteration
The loop termination condition was incorrect when processing
IfcRelAggregates relationships.
Generated with the assistance of an AI coding tool.
```
### New Files
New files that are AI-generated must include a comment near the top of the
file indicating this. Use the appropriate comment syntax for the language:
```python
# This file was generated with the assistance of an AI coding tool.
```
```cpp
// This file was generated with the assistance of an AI coding tool.
```
### Pull Requests
Pull requests containing AI-generated code must indicate in the PR description
which parts of the contribution are AI-generated. If the entire PR is
AI-generated, state that clearly. If only specific commits or files are
AI-generated, identify them.
## Pull Request Guidelines
### Scope and Size
- Each pull request should address a **single issue or feature**.
- Do not mix unrelated changes (e.g., bug fixes with refactoring or style
changes) in the same PR.
- Large pull requests should be broken down into **multiple small, standalone
commits** that are each easy to review independently. Rewrite commit history
for this purpose if necessary.
- PRs that are minimal, focused solutions to a specific problem are much more
likely to be accepted.
### What to Avoid
- **Over-engineering**: Do not add features, abstractions, or configurability
beyond what is needed to solve the immediate problem.
- **Scope creep**: Do not make changes to files or code that are not directly
related to the task at hand.
- **Unnecessary additions**: Do not add docstrings, comments, type annotations,
or error handling to code you did not otherwise need to change.
- **Cosmetic changes**: Do not reformat, rename, or reorganize code that is
unrelated to your change.
## Commit Messages
- The **subject line** must be **50 characters or less**.
- Use the **imperative mood** (e.g., "Fix crash in geometry kernel", not
"Fixed crash" or "Fixes crash").
- A commit message can be a single line if the purpose is obvious from the
subject alone.
- Otherwise, add a blank line after the subject followed by a short explanation
of a few lines in the body.
## Code Style
### Python
- **Line length**: 120 characters
- **Formatter**: black
- **Linter**: ruff
- Configuration is in `pyproject.toml`
### C++
- **Standard**: C++17 minimum
- **Formatter**: clang-format (configuration in `.clang-format`)
- **Linter**: clang-tidy (configuration in `.clang-tidy`)
Run linters and formatters **before submitting** your pull request. Do not rely
on CI to catch formatting issues.
## Testing
- Pull requests with test coverage are **much more likely to be merged**.
- If tests are appropriate and feasible for your change, they should be
included.
- Tests are not required for every change (e.g., documentation-only changes),
but the expectation is that testable code changes come with tests.
- Python tests use **pytest** and are located in `test/` or `tests/` directories
within each package under `src/`.
- Run the existing test suite for the package you modified before submitting.
## Architecture Quick Reference
### Directory Structure
- `src/ifcparse/` — C++ IFC file parsing
- `src/ifcgeom/` — C++ geometry processing (OpenCASCADE and CGAL kernels)
- `src/serializers/` — Output format serializers (glTF, Collada, SVG, etc.)
- `src/ifcwrap/` — SWIG Python bindings
- `src/ifcconvert/` — CLI conversion tool
- `src/ifcopenshell-python/` — Python API (`ifcopenshell` package)
- `src/bonsai/` — Blender add-on (GPL-3.0-or-later)
- `src/ifctester/` — IDS model auditing
- `src/ifcpatch/` — IFC file manipulation scripts
- `src/ifcdiff/` — IFC model comparison
- `src/ifcclash/` — Clash detection
- `src/ifccsv/` — Schedule import/export
### IFC Schema Versions
The library supports IFC2x3 TC1, IFC4 Add2 TC1, IFC4x1, IFC4x2, and
IFC4x3 Add2. Schema-specific code is compiled conditionally. Be aware of
which schema versions your change affects.
+19 -18
View File
@@ -6,6 +6,7 @@ IfcOpenShell
<img src="https://github.com/IfcOpenShell/IfcOpenShell/assets/88302/34901387-e2dd-4a0c-8e38-9ffc32a66cde">
</p>
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
@@ -36,25 +37,25 @@ 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](https://img.shields.io/pypi/v/bcf-client?label=PyPI&color=006dad)](https://pypi.org/project/bcf-client/) [![Anaconda-Server Badge](https://anaconda.org/conda-forge/bcf-client/badges/version.svg)](https://anaconda.org/conda-forge/bcf-client) |
| bonsai | Add-on to Blender providing a graphical native IFC authoring platform | GPL-3.0-or-later | [![Official](https://img.shields.io/badge/BonsaiBIM.org-Download-70ba35)](https://bonsaibim.org/download.html) [![GitHub Unstable](https://img.shields.io/github/v/release/ifcopenshell/ifcopenshell?filter=bonsai-*&label=GitHub-Unstable&color=f6f8fa)](https://github.com/IfcOpenShell/IfcOpenShell/releases?q=bonsai&expanded=true) [![Chocolatey](https://img.shields.io/chocolatey/v/blenderbim-nightly?label=Chocolatey&color=5c9fd8)](https://community.chocolatey.org/packages/blenderbim-nightly/) |
| bsdd | Library to query the bSDD API | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/bsdd?label=PyPI&color=006dad)](https://pypi.org/project/bsdd/) |
| 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](https://img.shields.io/pypi/v/ifc4d?label=PyPI&color=006dad)](https://pypi.org/project/ifc4d/) |
| ifc5d | Report and optimise cost information from IFC | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifc5d?label=PyPI&color=006dad)](https://pypi.org/project/ifc5d/) |
| ifcbimtester | Wrapper for Gherkin based unit testing for IFC models | LGPL-3.0-or-later |
| [bcf](https://docs.ifcopenshell.org/bcf.html) | Library to read and write BCF-XML and query OpenCDE BCF-API modules | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/bcf-client?label=PyPI&color=006dad)](https://pypi.org/project/bcf-client/) [![Anaconda-Server Badge](https://anaconda.org/conda-forge/bcf-client/badges/version.svg)](https://anaconda.org/conda-forge/bcf-client) |
| [bonsai](https://docs.ifcopenshell.org/bonsai.html) | Add-on to Blender providing a graphical native IFC authoring platform | GPL-3.0-or-later | [![Official](https://img.shields.io/badge/BonsaiBIM.org-Download-70ba35)](https://bonsaibim.org/download.html) [![GitHub Unstable](https://img.shields.io/github/v/release/ifcopenshell/ifcopenshell?filter=bonsai-*&label=GitHub-Unstable&color=f6f8fa)](https://github.com/IfcOpenShell/IfcOpenShell/releases?q=bonsai&expanded=true) [![Chocolatey](https://img.shields.io/chocolatey/v/blenderbim-nightly?label=Chocolatey&color=5c9fd8)](https://community.chocolatey.org/packages/blenderbim-nightly/) |
| [bsdd](https://docs.ifcopenshell.org/bsdd.html) | Library to query the bSDD API | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/bsdd?label=PyPI&color=006dad)](https://pypi.org/project/bsdd/) |
| [ifc2ca](https://docs.ifcopenshell.org/ifc2ca.html) | Utility to convert IFC structural analysis models to Code_Aster | LGPL-3.0-or-later |
| [ifc4d](https://docs.ifcopenshell.org/ifc4d.html) | Convert to and from IFC and project management software | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifc4d?label=PyPI&color=006dad)](https://pypi.org/project/ifc4d/) |
| [ifc5d](https://docs.ifcopenshell.org/ifc5d.html) | Report and optimise cost information from IFC | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifc5d?label=PyPI&color=006dad)](https://pypi.org/project/ifc5d/) |
| [ifcbimtester](https://docs.ifcopenshell.org/bimtester.html) | 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](https://img.shields.io/pypi/v/ifccityjson?label=PyPI&color=006dad)](https://pypi.org/project/ifccityjson/) |
| ifcclash | Clash detection library and CLI app | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifcclash?label=PyPI&color=006dad)](https://pypi.org/project/ifcclash/) |
| ifcconvert | CLI app to convert IFC to many other formats | LGPL-3.0-or-later\* | [![Official](https://img.shields.io/badge/IfcOpenShell.org-Download-70ba35)](https://docs.ifcopenshell.org/ifcconvert/installation.html) [![GitHub](https://img.shields.io/github/v/release/ifcopenshell/ifcopenshell?filter=ifcconvert-*&label=GitHub&color=f6f8fa)](https://github.com/IfcOpenShell/IfcOpenShell/releases?q=ifcconvert&expanded=true)
| ifccsv | Library and CLI app to export and import schedules from IFC | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifccsv?label=PyPI&color=006dad)](https://pypi.org/project/ifccsv/) |
| ifcdiff | Compare changes between IFC models | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifcdiff?label=PyPI&color=006dad)](https://pypi.org/project/ifcdiff/) |
| ifcfm | Extract IFC data for FM handover requirements | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifcfm?label=PyPI&color=006dad)](https://pypi.org/project/ifcfm/) |
| ifcmax | Historic extension for IFC support in 3DS Max | LGPL-3.0-or-later\* | [![Official](https://img.shields.io/badge/IfcOpenShell.org-Download-70ba35)](https://docs.ifcopenshell.org/ifcmax.html)
| ifcopenshell-python | Python library for IFC manipulation | LGPL-3.0-or-later\* | [![Official](https://img.shields.io/badge/IfcOpenShell.org-Download-70ba35)](https://docs.ifcopenshell.org/ifcopenshell-python/installation.html) [![GitHub](https://img.shields.io/github/v/release/ifcopenshell/ifcopenshell?filter=ifcopenshell-python-*&label=GitHub&color=f6f8fa)](https://github.com/IfcOpenShell/IfcOpenShell/releases?q=ifcopenshell-python&expanded=true) [![PyPI](https://img.shields.io/pypi/v/ifcopenshell?label=PyPI&color=006dad)](https://pypi.org/project/ifcopenshell/) [![Anaconda](https://img.shields.io/conda/vn/conda-forge/ifcopenshell?label=Anaconda&color=43b02a)](https://anaconda.org/conda-forge/ifcopenshell) [![Anaconda](https://img.shields.io/conda/vn/ifcopenshell/ifcopenshell?label=Anaconda-Unstable&color=43b02a)](https://anaconda.org/ifcopenshell/ifcopenshell) [![Docker](https://img.shields.io/docker/pulls/aecgeeks/ifcopenshell?label=Docker&color=1D63ED)](https://hub.docker.com/r/aecgeeks/ifcopenshell) [![AUR](https://img.shields.io/aur/version/ifcopenshell?label=AUR&color=1793d1)](https://aur.archlinux.org/packages/ifcopenshell) [![AUR Unstable](https://img.shields.io/aur/version/ifcopenshell-git?label=AUR-Unstable&color=1793d1)](https://aur.archlinux.org/packages/ifcopenshell-git) |
| ifcpatch | Utility to run pre-packaged scripts to manipulate IFCs | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifcpatch?label=PyPI&color=006dad)](https://pypi.org/project/ifcpatch/) |
| ifcsverchok | Blender Add-on for visual node programming with IFC | GPL-3.0-or-later | [![GitHub Unstable](https://img.shields.io/github/v/release/ifcopenshell/ifcopenshell?filter=ifcsverchok-*.*.*.*&label=GitHub-Unstable&color=f6f8fa)](https://github.com/IfcOpenShell/IfcOpenShell/releases?q=ifcsverchok&expanded=true)
| ifctester | Library, CLI and webapp for IDS model auditing | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifctester?label=PyPI&color=006dad)](https://pypi.org/project/ifctester/) |
| [ifccityjson](https://docs.ifcopenshell.org/ifccityjson.html) | Convert CityJSON to IFC | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifccityjson?label=PyPI&color=006dad)](https://pypi.org/project/ifccityjson/) |
| [ifcclash](https://docs.ifcopenshell.org/ifcclash.html) | Clash detection library and CLI app | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifcclash?label=PyPI&color=006dad)](https://pypi.org/project/ifcclash/) |
| [ifcconvert](https://docs.ifcopenshell.org/ifcconvert.html) | CLI app to convert IFC to many other formats | LGPL-3.0-or-later\* | [![Official](https://img.shields.io/badge/IfcOpenShell.org-Download-70ba35)](https://docs.ifcopenshell.org/ifcconvert/installation.html) [![GitHub](https://img.shields.io/github/v/release/ifcopenshell/ifcopenshell?filter=ifcconvert-*&label=GitHub&color=f6f8fa)](https://github.com/IfcOpenShell/IfcOpenShell/releases?q=ifcconvert&expanded=true)
| [ifccsv](https://docs.ifcopenshell.org/ifccsv.html) | Library and CLI app to export and import schedules from IFC | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifccsv?label=PyPI&color=006dad)](https://pypi.org/project/ifccsv/) |
| [ifcdiff](https://docs.ifcopenshell.org/ifcdiff.html) | Compare changes between IFC models | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifcdiff?label=PyPI&color=006dad)](https://pypi.org/project/ifcdiff/) |
| [ifcfm](https://docs.ifcopenshell.org/ifcfm.html) | Extract IFC data for FM handover requirements | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifcfm?label=PyPI&color=006dad)](https://pypi.org/project/ifcfm/) |
| [ifcmax](https://docs.ifcopenshell.org/ifcmax.html) | Historic extension for IFC support in 3DS Max | LGPL-3.0-or-later\* | [![Official](https://img.shields.io/badge/IfcOpenShell.org-Download-70ba35)](https://docs.ifcopenshell.org/ifcmax.html)
| [ifcopenshell-python](https://docs.ifcopenshell.org/ifcopenshell-python.html) | Python library for IFC manipulation | LGPL-3.0-or-later\* | [![Official](https://img.shields.io/badge/IfcOpenShell.org-Download-70ba35)](https://docs.ifcopenshell.org/ifcopenshell-python/installation.html) [![GitHub](https://img.shields.io/github/v/release/ifcopenshell/ifcopenshell?filter=ifcopenshell-python-*&label=GitHub&color=f6f8fa)](https://github.com/IfcOpenShell/IfcOpenShell/releases?q=ifcopenshell-python&expanded=true) [![PyPI](https://img.shields.io/pypi/v/ifcopenshell?label=PyPI&color=006dad)](https://pypi.org/project/ifcopenshell/) [![Anaconda](https://img.shields.io/conda/vn/conda-forge/ifcopenshell?label=Anaconda&color=43b02a)](https://anaconda.org/conda-forge/ifcopenshell) [![Anaconda](https://img.shields.io/conda/vn/ifcopenshell/ifcopenshell?label=Anaconda-Unstable&color=43b02a)](https://anaconda.org/ifcopenshell/ifcopenshell) [![Docker](https://img.shields.io/docker/pulls/aecgeeks/ifcopenshell?label=Docker&color=1D63ED)](https://hub.docker.com/r/aecgeeks/ifcopenshell) [![AUR](https://img.shields.io/aur/version/ifcopenshell?label=AUR&color=1793d1)](https://aur.archlinux.org/packages/ifcopenshell) [![AUR Unstable](https://img.shields.io/aur/version/ifcopenshell-git?label=AUR-Unstable&color=1793d1)](https://aur.archlinux.org/packages/ifcopenshell-git) [Pyodide WASM Wheels](https://github.com/IfcOpenShell/wasm-wheels#pyodide-test-wheels) |
| [ifcpatch](https://docs.ifcopenshell.org/ifcpatch.html) | Utility to run pre-packaged scripts to manipulate IFCs | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifcpatch?label=PyPI&color=006dad)](https://pypi.org/project/ifcpatch/) |
| [ifcsverchok](https://docs.ifcopenshell.org/ifcsverchok.html) | Blender Add-on for visual node programming with IFC | GPL-3.0-or-later | [![GitHub Unstable](https://img.shields.io/github/v/release/ifcopenshell/ifcopenshell?filter=ifcsverchok-*.*.*.*&label=GitHub-Unstable&color=f6f8fa)](https://github.com/IfcOpenShell/IfcOpenShell/releases?q=ifcsverchok&expanded=true)
| [ifctester](https://docs.ifcopenshell.org/ifctester.html) | Library, CLI and webapp for IDS model auditing | LGPL-3.0-or-later | [![PyPI](https://img.shields.io/pypi/v/ifctester?label=PyPI&color=006dad)](https://pypi.org/project/ifctester/) |
The IfcOpenShell C++ codebase is split into multiple interal libraries:
+1 -1
View File
@@ -1 +1 @@
0.8.1
0.8.5
+1 -1
View File
@@ -1,6 +1,6 @@
import boto3
import ifcopenshell
import ifcopenshell.util.element
import boto3
s3 = boto3.client('s3')
+22 -12
View File
@@ -13,13 +13,15 @@ import hashlib
import os
import pathlib
import re
from urllib import request
from github import Github
import subprocess
from typing import NoReturn
from urllib import request
from github import Github
def get_repo_tag_names() -> list[str]:
git_return = os.popen("git tag -l").read()
git_return = subprocess.check_output("git tag -l", text=True)
tag_names = [tag_name for tag_name in git_return.split("\n") if tag_name]
print(f"{len(tag_names)} tag_names found in repo")
return tag_names
@@ -77,6 +79,10 @@ def get_release_zip(tag: str) -> tuple[str, str]:
raise Exception(f"Couldn't find the release matching '{python_version}' and '{TARGET_OS}' in tag '{tag}'.")
def run(command: str) -> None:
subprocess.check_output(command)
start = datetime.datetime.now()
URL_CHOCO_PACKAGE = "https://community.chocolatey.org/packages/blender"
@@ -96,7 +102,7 @@ should_release = False
target_release_tag = ""
TARGET_OS = "windows-x64"
git_status = os.popen("git status").read()
git_status = subprocess.check_output("git status", text=True)
print(git_status)
for tag_name in get_repo_tag_names():
@@ -146,7 +152,7 @@ blenderbim_build_version = target_release_tag.replace("blenderbim-", "")
# url_blenderbim_py3x_win_zip
release_zip_file_name, url_blenderbim_py3x_win_zip = get_release_zip(target_release_tag)
os.popen(f"wget {url_blenderbim_py3x_win_zip} --no-verbose").read()
subprocess.check_call(f"wget {url_blenderbim_py3x_win_zip} --no-verbose")
# sha256sum_blenderbim_py310_win_zip
sha256sum_blenderbim_py3x_win_zip = get_file_sha256_hash(release_zip_file_name)
@@ -200,13 +206,13 @@ print("[INFO] inserting dynamic chocolatey package parameters successful")
print("\n_____ build choco.exe with mono")
choco_version = "1.1.0"
os.popen(f"wget https://github.com/chocolatey/choco/archive/refs/tags/{choco_version}.tar.gz --quiet").read()
os.popen(f"tar -xzf {choco_version}.tar.gz").read()
run(f"wget https://github.com/chocolatey/choco/archive/refs/tags/{choco_version}.tar.gz --quiet")
run(f"tar -xzf {choco_version}.tar.gz")
print("choco tar unpack successful")
os.chdir("choco-1.1.0")
os.popen("./build.sh").read()
run("./build.sh")
os.popen("cp -r build_output/chocolatey /opt/chocolatey").read()
run("cp -r build_output/chocolatey /opt/chocolatey")
os.chdir(BLENDERBIM_DIR)
if pathlib.Path("/opt/chocolatey/choco.exe").exists():
@@ -214,11 +220,15 @@ if pathlib.Path("/opt/chocolatey/choco.exe").exists():
print("\n_____ build choco pack")
os.popen("mono /opt/chocolatey/choco.exe pack --allow-unofficial").read()
os.popen('mono /opt/chocolatey/choco.exe setapikey --key="{choco_token}" --source="https://push.chocolatey.org/" --allow-unofficial').read()
run("mono /opt/chocolatey/choco.exe pack --allow-unofficial")
run(
'mono /opt/chocolatey/choco.exe setapikey --key="{choco_token}" --source="https://push.chocolatey.org/" --allow-unofficial'
)
print("\n_____ build choco push")
os.popen('mono /opt/chocolatey/choco.exe push --source="https://push.chocolatey.org/" --key="$CHOCO_TOKEN" --allow-unofficial --verbose').read()
run(
'mono /opt/chocolatey/choco.exe push --source="https://push.chocolatey.org/" --key="$CHOCO_TOKEN" --allow-unofficial --verbose'
)
print(f"choco push of version: {target_release_tag} successful!")
print(f"it took: {datetime.datetime.now() - start}")
@@ -1,6 +1,5 @@
import bpy
bpy.ops.preferences.addon_disable(module='blenderbim')
bpy.ops.wm.save_userpref()
@@ -1,6 +1,5 @@
import bpy
bpy.ops.preferences.addon_enable(module='blenderbim')
bpy.ops.wm.save_userpref()
+264 -798
View File
File diff suppressed because it is too large Load Diff
+113
View File
@@ -0,0 +1,113 @@
{
"version": 6,
"configurePresets": [
{
"name": "shared",
"generator": "Ninja",
"hidden": true,
"cacheVariables": {
"BUILD_IFCPYTHON": "ON",
"BUILD_IFCGEOM": "ON",
"COLLADA_SUPPORT": "OFF",
"BUILD_EXAMPLES": "OFF",
"BUILD_GEOMSERVER": "OFF",
"GLTF_SUPPORT": "ON",
"BUILD_CONVERT": "ON",
"BUILD_IFCMAX": "OFF",
"IFCXML_SUPPORT": "ON",
"HDF5_SUPPORT": "ON",
"SCHEMA_VERSIONS": "4x3_add2",
"CMAKE_GENERATOR_PLATFORM": "",
"CMAKE_GENERATOR_TOOLSET": ""
}
},
{
"name": "win-shared",
"inherits": [
"shared"
],
"hidden": true,
"environment": {
"CONDA_BUILD": "ON",
"CONDA_PY": "312"
},
"cacheVariables": {
"Boost_USE_STATIC_LIBS": "OFF",
"CMAKE_INSTALL_PREFIX": "$env{LIBRARY_PREFIX}",
"PYTHON_EXECUTABLE": "$env{PREFIX}/python.exe",
"PYTHON_INCLUDE_DIR": "$env{PREFIX}/include",
"PYTHON_LIBRARY": "$env{PREFIX}/libs/python$env{CONDA_PY}.lib",
"CMAKE_FIND_ROOT_PATH": "$env{LIBRARY_PREFIX}",
"CMAKE_PREFIX_PATH": "$env{LIBRARY_PREFIX}",
"LIBXML2_LIBRARIES": "$env{LIBRARY_PREFIX}/lib/libxml2.lib",
"OCC_INCLUDE_DIR": "$env{LIBRARY_PREFIX}/include/opencascade",
"OCC_LIBRARY_DIR": "$env{LIBRARY_PREFIX}/lib",
"CGAL_INCLUDE_DIR": "$env{LIBRARY_PREFIX}/include",
"EIGEN_DIR": "$env{LIBRARY_PREFIX}/include/eigen3",
"JSON_INCLUDE_DIR": "$env{LIBRARY_PREFIX}/include",
"GMP_INCLUDE_DIR": "$env{LIBRARY_PREFIX}/include",
"GMP_LIBRARY_DIR": "$env{LIBRARY_PREFIX}/lib",
"MPFR_LIBRARY_DIR": "$env{LIBRARY_PREFIX}/lib",
"Boost_LIBRARY_DIR": "$env{LIBRARY_PREFIX}/lib",
"Boost_INCLUDE_DIR": "$env{LIBRARY_PREFIX}/include",
"HDF5_INCLUDE_DIR": "$env{LIBRARY_PREFIX}/include",
"HDF5_LIBRARY_DIR": "$env{LIBRARY_PREFIX}/lib",
"ZLIB_INCLUDE_DIR": "$env{LIBRARY_PREFIX}/include"
}
},
{
"name": "win-release",
"inherits": [
"win-shared"
],
"hidden": false,
"warnings": {
"dev": false
},
"environment": {
"PREFIX": "${sourceDir}/../.pixi/envs/prod",
"LIBRARY_PREFIX": "${sourceDir}/../.pixi/envs/prod/Library"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "win-debug",
"inherits": [
"win-shared"
],
"hidden": false,
"binaryDir": "${sourceDir}/../build/win-debug",
"warnings": {
"dev": false
},
"environment": {
"PREFIX": "${sourceDir}/../.pixi/envs/dev",
"LIBRARY_PREFIX": "${sourceDir}/../.pixi/envs/dev/Library"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
}
},
{
"name": "win-test",
"inherits": [
"win-shared"
],
"hidden": false,
"binaryDir": "${sourceDir}/../build/win-test",
"warnings": {
"dev": false
},
"environment": {
"PREFIX": "${sourceDir}/../.pixi/envs/tests",
"LIBRARY_PREFIX": "${sourceDir}/../.pixi/envs/tests/Library"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"SCHEMA_VERSIONS": "2x3;4;4x3_add2"
}
}
]
}
+68
View File
@@ -0,0 +1,68 @@
#
# Input variables:
# - `CGAL_INCLUDE_DIR`
# - `CGAL_LIBRARY_DIR`
# - `GMP_INCLUDE_DIR`
# - `GMP_LIBRARY_DIR`
# - `MPFR_INCLUDE_DIR`
# - `MPFR_LIBRARY_DIR`
# If input variables are not specified, try to find HDF5 config.
# Input variables could also be provided as environment variables.
#
# Output targets:
# - `IFCOPENSHELL_CGAL`
#
if(TARGET IFCOPENSHELL_CGAL)
return()
endif()
UNIFY_ENVVARS_AND_CACHE(CGAL_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(CGAL_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(GMP_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(GMP_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(MPFR_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(MPFR_LIBRARY_DIR)
if(CGAL_INCLUDE_DIR)
find_library(libGMP NAMES gmp mpir PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH)
find_library(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH)
if(NOT libGMP)
message(FATAL_ERROR "Unable to find GMP library files, aborting")
endif()
if(NOT libMPFR)
message(FATAL_ERROR "Unable to find MPFR library files, aborting")
endif()
add_library(CGAL::CGAL INTERFACE IMPORTED)
target_include_directories(CGAL::CGAL INTERFACE "${CGAL_INCLUDE_DIR}")
target_include_directories(CGAL::CGAL INTERFACE "${GMP_INCLUDE_DIR}" "${MPFR_INCLUDE_DIR}")
target_link_libraries(CGAL::CGAL INTERFACE "${libMPFR}" "${libGMP}")
else()
# CGAL is not respecting default Boost_USE_STATIC_LIBS value
# and sometiems it's getting in the way.
if(NOT DEFINED Boost_USE_STATIC_LIBS)
set(CGAL_Boost_USE_STATIC_LIBS OFF)
else()
set(CGAL_Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}")
endif()
# Annoyingly this is producing CMP0167 boost warnings, because it's unsetting cmake policies
# and using FindBoost module. But there's nothing we can do about it,
# since everything happens in the scope of CGAL config. I guess it's be resolved in CGAL 6.1.0.
find_package(CGAL CONFIG)
if(NOT CGAL_FOUND)
message(
FATAL_ERROR
"CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found."
)
endif()
message(STATUS "CGAL: found config at '${CGAL_DIR}'.")
endif()
# Adding another `IFCOPENSHELL_CGAL` target, because we want to add compile definitions to it,
# but in `CGALconfig.cmake` `CGAL::CGAL` is an alias, so you can't add properties to it.
add_library(IFCOPENSHELL_CGAL INTERFACE)
target_link_libraries(IFCOPENSHELL_CGAL INTERFACE CGAL::CGAL)
target_compile_definitions(IFCOPENSHELL_CGAL INTERFACE IFOPSH_WITH_CGAL)
set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL)
install(TARGETS IFCOPENSHELL_CGAL EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
+27
View File
@@ -0,0 +1,27 @@
#
# Input variables:
# - `EIGEN_DIR`
# If input variables are not specified, try to find Eigen3 config.
# Input variables could also be provided as environment variables.
#
# Output targets:
# - `Eigen3::Eigen`
UNIFY_ENVVARS_AND_CACHE(EIGEN_DIR)
if(EXISTS "${EIGEN_DIR}")
# Mimic Eigen3Config.cmake target.
add_library(Eigen3::Eigen INTERFACE IMPORTED)
target_include_directories(Eigen3::Eigen INTERFACE "${EIGEN_DIR}")
else()
find_package(Eigen3 CONFIG)
if(Eigen3_DIR)
message(STATUS "Eigen3: found config at '${Eigen3_DIR}'.")
else()
message(
FATAL_ERROR
"EIGEN_DIR is not provided or provided folder doesn't exist (current value: '${EIGEN_DIR}'). "
"Also couldn't find Eigen3 as a package."
)
endif()
endif()
+109
View File
@@ -0,0 +1,109 @@
#
# Input variables:
# - `HDF5_INCLUDE_DIR`
# - `HDF5_LIBRARY_DIR`
# - `HDF5_LIBRARIES`
# If input variables are not specified, try to find HDF5 config.
# Input variables could also be provided as environment variables.
#
# Output variables:
# - `HDF5_INCLUDE_DIR`
# - `HDF5_LIBRARY_DIR`
# - `HDF5_LIBRARIES`
#
UNIFY_ENVVARS_AND_CACHE(HDF5_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(HDF5_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(HDF5_LIBRARIES)
# To avoid cyclic calls to this file
list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
if(NOT HDF5_INCLUDE_DIR)
message(STATUS "No HDF5 include directory specified")
else()
set(HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIR}" CACHE FILEPATH "HDF5 header files")
endif()
if(NOT HDF5_LIBRARY_DIR)
message(STATUS "No HDF5 library directory specified")
else()
set(HDF5_LIBRARY_DIR "${HDF5_LIBRARY_DIR}" CACHE FILEPATH "HDF5 library files")
endif()
if(HDF5_LIBRARY_DIR)
# result of the HDF5 ctest package
# Find zlib using cmake find_library. How should this be implemented?
# FIND_LIBRARY(NAMES z libz libz_debug PATHS ... NO_DEFAULT_PATH)
if(NOT DEFINED ENV{CONDA_BUILD})
# result of the HDF5 ctest package
if(WIN32)
set(zlib_post lib)
set(lib_ext lib)
else()
set(lib_ext a)
endif()
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
set(debug_postfix "_debug")
endif()
set(HDF5_LIBRARIES
"${HDF5_LIBRARY_DIR}/libhdf5_cpp${debug_postfix}.${lib_ext}"
"${HDF5_LIBRARY_DIR}/libhdf5${debug_postfix}.${lib_ext}"
"${HDF5_LIBRARY_DIR}/libz${zlib_post}${debug_postfix}.${lib_ext}"
"${HDF5_LIBRARY_DIR}/libsz${debug_postfix}.${lib_ext}"
"${HDF5_LIBRARY_DIR}/libaec${debug_postfix}.${lib_ext}"
)
else()
message(STATUS "Packaging hdf5 and zlib for conda distribution")
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
# macOS
set(zlib_post libz)
set(lib_ext dylib)
set(HDF5_LIBRARIES
"${HDF5_LIBRARY_DIR}/libhdf5_cpp.${lib_ext}"
"${HDF5_LIBRARY_DIR}/libhdf5.${lib_ext}"
"${HDF5_LIBRARY_DIR}/${zlib_post}.${lib_ext}"
)
else()
# linux and windows
# Find HDF5 package
find_package(HDF5 REQUIRED COMPONENTS C CXX)
# Find ZLIB package
find_package(ZLIB REQUIRED)
# Include directories
include_directories(${HDF5_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS})
# Link libraries
set(HDF5_LIBRARIES ${HDF5_LIBRARIES} ${ZLIB_LIBRARIES})
message(STATUS "HDF5 libraries: ${HDF5_LIBRARIES}")
endif()
endif()
endif()
if(NOT HDF5_INCLUDE_DIR OR NOT HDF5_LIBRARY_DIR)
# First try to find it as a config.
find_package(HDF5 CONFIG)
mark_as_advanced(HDF5_DIR)
if(HDF5_DIR)
message(STATUS "HDF5: found config at '${HDF5_DIR}'.")
set(HDF5_LIBRARIES hdf5_cpp-static)
else()
# If it failed, still try to find as a module.
# E.g. on Ubuntu `libhdf5-dev` doesn't provie hdf5-config.cmake.
# Will automatically fill HDF5_LIBRARIES and HDF5_INCLUDE_DIR.
find_package(HDF5 COMPONENTS CXX)
if(NOT HDF5_INCLUDE_DIR)
message(
FATAL_ERROR
"HDF5_INCLUDE_DIR is not provided (current value: '${HDF5_INCLUDE_DIR}'). "
"HDF5_LIBRARY_DIR is not provided (current value: '${HDF5_LIBRARY_DIR}'). "
"Also could not find HDF5 package (neither module or config)."
)
endif()
endif()
endif()
# Restore module path.
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
+47
View File
@@ -0,0 +1,47 @@
#
# Input variables:
# - `LIBXML2_INCLUDE_DIR`
# - `LIBXML2_LIBRARIES`
# If input variables are not specified, try to find LibXml2 config.
# Input variables could also be provided as environment variables.
#
# Output targets:
# - `LibXml2::LibXml2`
#
# To avoid cyclic calls to this file
list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
UNIFY_ENVVARS_AND_CACHE(LIBXML2_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(LIBXML2_LIBRARIES)
if((NOT LIBXML2_INCLUDE_DIR AND NOT LIBXML2_LIBRARIES))
# First try config mode (probably works with vcpkg, Conan, macOS brew installs, but not on ubuntu 22.04)
# CONFIG is provided using root path, so no need to clear sysroot here.
find_package(LibXml2 QUIET CONFIG)
if(NOT LibXml2_FOUND)
# Fallback to CMake's builtin FindLibXml2 module (works on Ubuntu)
find_package(LibXml2 REQUIRED)
else()
message(STATUS "Found LibXml2 config: ${LibXml2_DIR}")
endif()
else()
find_package(LibXml2 REQUIRED)
if(MSVC)
# Unset `IMPORTED_LOCATION` and set it manually.
set_property(TARGET LibXml2::LibXml2 PROPERTY IMPORTED_LOCATION)
get_release_variant(LIBXML2_RELEASE_LIB "${LIBXML2_LIBRARIES}" "d")
get_debug_variant(LIBXML2_DEBUG_LIB "${LIBXML2_LIBRARIES}" "d")
set_target_properties(
LibXml2::LibXml2
PROPERTIES
IMPORTED_CONFIGURATIONS "Release;Debug"
IMPORTED_LOCATION_RELEASE "${LIBXML2_RELEASE_LIB}"
IMPORTED_LOCATION_DEBUG "${LIBXML2_DEBUG_LIB}"
)
endif()
endif()
# Restore module path.
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
+191
View File
@@ -0,0 +1,191 @@
#
# Input variables:
# - `OCC_INCLUDE_DIR`
# - `OCC_LIBRARY_DIR`
# If input variables are not specified, try to find OpenCASCADE config.
# Input variables could also be provided as environment variables.
#
# Output variables
# - `OpenCASCADE_LIBRARIES`
#
UNIFY_ENVVARS_AND_CACHE(OCC_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(OCC_LIBRARY_DIR)
if(OCC_INCLUDE_DIR)
set(OCC_INCLUDE_DIR ${OCC_INCLUDE_DIR} CACHE FILEPATH "Open CASCADE header files")
message(STATUS "Looking for Open CASCADE include files in: ${OCC_INCLUDE_DIR}")
endif()
if(OCC_LIBRARY_DIR)
set(OCC_LIBRARY_DIR ${OCC_LIBRARY_DIR} CACHE FILEPATH "Open CASCADE library files")
message(STATUS "Looking for Open CASCADE library files in: ${OCC_LIBRARY_DIR}")
endif()
if(NOT OCC_INCLUDE_DIR AND NOT OCC_LIBRARY_DIR)
# OCE is not supported for find_package, because it's using a different name (`oce`)
# and also has an odd directory structure (install/lib/oce-0.18/*.cmake).
# find_package creates variables:
# - `OpenCASCADE_INCLUDE_DIR`
# - `OpenCASCADE_LIBRARIES`
# OpenCASCADE may be built with VTK support. Try to find VTK first to avoid
# CMake errors when OpenCASCADE's config references VTK targets.
find_package(VTK QUIET)
mark_as_advanced(VTK_DIR)
find_package(OpenCASCADE CONFIG REQUIRED)
mark_as_advanced(OpenCASCADE_DIR)
message(STATUS "Found OpenCASCADE config: ${OpenCASCADE_DIR}")
if(OpenCASCADE_VERSION VERSION_LESS "7.7.0")
# cmake configs < 7.7.0 were not adding include directories to targets automatically.
set_target_properties(TKernel PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}")
endif()
if(
OpenCASCADE_VERSION VERSION_LESS "7.9.0"
AND CMAKE_VERSION GREATER_EQUAL "3.24"
AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
)
# Before 7.9.0 targets in OCCT cmake configs are not linked to each other
# leading to missing symbols on Unix. Link them as a single group as a workaround.
# Only needed for gcc, because other compilers (e.g. Apple Clang, MSVC) do rescan automatically.
set(OpenCASCADE_LIBRARIES "$<LINK_GROUP:RESCAN,${OpenCASCADE_LIBRARIES}>")
endif()
if(OpenCASCADE_VERSION VERSION_LESS "7.9.0" AND WIN32)
# Bug in OCCT cmake configs < 7.9.0 - missing linked library.
list(APPEND OpenCASCADE_LIBRARIES WSOCK32.lib)
endif()
return()
endif()
# No specific paths specified, try to find package.
if(OCC_INCLUDE_DIR AND OCC_LIBRARY_DIR)
message(
STATUS
"Using provided OCC_INCLUDE_DIR ('${OCC_INCLUDE_DIR}') "
"and OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}')."
)
# Parse OCC_VERSION_STRING.
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR REGEX "#define OCC_VERSION_MAJOR.*")
string(REGEX MATCH "[0-9]+" OCC_MAJOR ${OCC_MAJOR})
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR REGEX "#define OCC_VERSION_MINOR.*")
string(REGEX MATCH "[0-9]+" OCC_MINOR ${OCC_MINOR})
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT REGEX "#define OCC_VERSION_MAINTENANCE.*")
string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT})
set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}")
else()
message(
FATAL_ERROR
"Couldn't find Open CASCADE installation. "
"Either both OCC_INCLUDE_DIR ('${OCC_INCLUDE_DIR}') and OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}') "
"must be specified or OpenCASCADE package should be discoverable. "
"If you're using OCE, then providing a package is not available "
"and you need to provide OCE_INCLUDE_DIR and OCE_LIBRARY_DIR directly."
)
endif()
set(OpenCASCADE_LIBRARIES
TKernel
TKMath
TKBRep
TKGeomBase
TKGeomAlgo
TKG3d
TKG2d
TKShHealing
TKTopAlgo
TKMesh
TKPrim
TKBool
TKBO
TKFillet
TKXSBase
TKOffset
TKHLR
# @todo investigate the exact conditions when this is necessary
TKBin
)
if(OCC_VERSION_STRING VERSION_LESS 7.8.0)
list(
APPEND OpenCASCADE_LIBRARIES
TKIGES
TKSTEPBase
TKSTEPAttr
TKSTEP209
TKSTEP
)
else(OCC_VERSION_STRING VERSION_LESS 7.8.0)
list(APPEND OpenCASCADE_LIBRARIES TKDESTEP TKDEIGES)
endif(OCC_VERSION_STRING VERSION_LESS 7.8.0)
find_library(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH)
if(libTKernel)
message(STATUS "Required Open Cascade Library files found")
else()
message(FATAL_ERROR "Unable to find Open Cascade library files in OCC_LIBRARY_DIR ('${OCC_LIBRARY_DIR}'), aborting")
endif()
if(MSVC)
add_definitions(-DHAVE_NO_DLL)
add_debug_variants(OpenCASCADE_LIBRARIES "${OpenCASCADE_LIBRARIES}" d)
endif()
if(WIN32)
# OCC might require linking to Winsock depending on the version and build configuration
list(APPEND OpenCASCADE_LIBRARIES ws2_32.lib)
endif()
# Make sure cross-referenced symbols between static OCC libraries get
# resolved. Also add thread and rt libraries.
get_filename_component(libTKernelExt ${libTKernel} EXT)
if("${libTKernelExt}" STREQUAL ".a")
set(OCCT_STATIC ON)
endif()
if(OCCT_STATIC)
find_package(Threads)
if(WASM_BUILD)
set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
else()
# OpenCASCADE_LIBRARIES repeated N times below in order to fix cyclic dependencies
# tfk: --start-group ... --end-group didn't work on the apple linker when last tested
if(APPLE)
set(OpenCASCADE_LIBRARIES
${OpenCASCADE_LIBRARIES}
${OpenCASCADE_LIBRARIES}
${OpenCASCADE_LIBRARIES}
${OpenCASCADE_LIBRARIES}
${OpenCASCADE_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
else()
set(OpenCASCADE_LIBRARIES
-Wl,--start-group
${OpenCASCADE_LIBRARIES}
-Wl,--end-group
${CMAKE_THREAD_LIBS_INIT}
)
endif()
endif()
if(NOT APPLE AND NOT WIN32)
set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES} "rt")
endif()
if(NOT WIN32)
set(OpenCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES} "dl")
endif()
endif()
add_library(OpenCASCADE_INTERFACE INTERFACE)
target_include_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_INCLUDE_DIR}")
target_link_libraries(OpenCASCADE_INTERFACE INTERFACE ${OpenCASCADE_LIBRARIES})
target_link_directories(OpenCASCADE_INTERFACE INTERFACE "${OCC_LIBRARY_DIR}")
set(OpenCASCADE_LIBRARIES OpenCASCADE_INTERFACE)
install(TARGETS OpenCASCADE_INTERFACE EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
+145
View File
@@ -0,0 +1,145 @@
#
# Input variables:
# - `OPENCOLLADA_INCLUDE_DIR`
# - `OPENCOLLADA_LIBRARY_DIR`
# - `PCRE_LIBRARY_DIR`
# If input variables are not specified, try to find OpenCOLLADA config.
# Input variables could also be provided as environment variables.
#
# Output variables:
# - `OPENCOLLADA_INCLUDE_DIR`
# - `OPENCOLLADA_LIBRARY_DIR`
# - `OPENCOLLADA_LIBRARIES`
#
UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(PCRE_LIBRARY_DIR)
if(NOT OPENCOLLADA_INCLUDE_DIR AND NOT OPENCOLLADA_LIBRARY_DIR)
# If package is found, automatically sets
# OPENCOLLADA_INCLUDE_DIRS and OPENCOLLADA_LIBRARIES (list of targets, not paths).
find_package(OpenCOLLADA CONFIG)
mark_as_advanced(OpenCOLLADA_DIR)
if(OpenCOLLADA_DIR)
message(STATUS "Found OpenCOLLADA: '${OpenCOLLADA_DIR}'.")
set(OPENCOLLADA_FOUND TRUE)
else()
message(STATUS "OpenCOLLADA package not found, falling back to manual search.")
endif()
endif()
if(NOT OpenCOLLADA_DIR)
# Find OpenCOLLADA
if("${OPENCOLLADA_INCLUDE_DIR}" STREQUAL "")
message(STATUS "No OpenCOLLADA include directory specified")
set(OPENCOLLADA_INCLUDE_DIR "/usr/include/opencollada" CACHE FILEPATH "OpenCOLLADA header files")
else()
set(OPENCOLLADA_INCLUDE_DIR "${OPENCOLLADA_INCLUDE_DIR}" CACHE FILEPATH "OpenCOLLADA header files")
endif()
if("${OPENCOLLADA_LIBRARY_DIR}" STREQUAL "")
message(STATUS "No OpenCOLLADA library directory specified")
find_library(
OPENCOLLADA_FRAMEWORK_LIB
NAMES OpenCOLLADAFramework
PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib
)
get_filename_component(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_FRAMEWORK_LIB} PATH)
endif()
find_library(
OpenCOLLADAFramework
NAMES OpenCOLLADAFramework OpenCOLLADAFrameworkd
PATHS ${OPENCOLLADA_LIBRARY_DIR}
NO_DEFAULT_PATH
)
if(OpenCOLLADAFramework)
message(STATUS "OpenCOLLADA library files found")
else()
message(
FATAL_ERROR
"COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA libraries. "
"Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed."
)
endif()
set(OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR}" CACHE FILEPATH "OpenCOLLADA library files")
set(OPENCOLLADA_INCLUDE_DIRS
"${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils"
"${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter"
)
find_file(COLLADASWStreamWriter_h "COLLADASWStreamWriter.h" ${OPENCOLLADA_INCLUDE_DIRS})
if(COLLADASWStreamWriter_h)
message(STATUS "OpenCOLLADA header files found")
set(OPENCOLLADA_FOUND TRUE)
set(OPENCOLLADA_LIBRARY_NAMES
GeneratedSaxParser
MathMLSolver
OpenCOLLADABaseUtils
OpenCOLLADAFramework
OpenCOLLADASaxFrameworkLoader
OpenCOLLADAStreamWriter
UTF
buffer
ftoa
)
# Use the found OpenCOLLADAFramework as a template for all other OpenCOLLADA libraries
foreach(lib ${OPENCOLLADA_LIBRARY_NAMES})
# Make sure we'll handle the Windows/MSVC debug postfix convention too.
string(REPLACE OpenCOLLADAFrameworkd "${lib}" lib_path "${OpenCOLLADAFramework}")
string(REPLACE OpenCOLLADAFramework "${lib}" lib_path "${lib_path}")
list(APPEND OPENCOLLADA_LIBRARIES "${lib_path}")
endforeach()
if("${PCRE_LIBRARY_DIR}" STREQUAL "")
if(WIN32)
find_library(pcre_library NAMES pcre pcred PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH)
else()
find_library(pcre_library NAMES pcre PATHS ${OPENCOLLADA_LIBRARY_DIR})
endif()
get_filename_component(PCRE_LIBRARY_DIR ${pcre_library} PATH)
else()
find_library(pcre_library NAMES pcre pcred PATHS ${PCRE_LIBRARY_DIR} NO_DEFAULT_PATH)
endif()
if(pcre_library)
set(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_LIBRARY_DIR} ${PCRE_LIBRARY_DIR})
if(MSVC)
# Add release lib regardless whether release or debug found. Debug version will be appended below.
list(APPEND OPENCOLLADA_LIBRARIES "${PCRE_LIBRARY_DIR}/pcre.lib")
else()
list(APPEND OPENCOLLADA_LIBRARIES "${pcre_library}")
endif()
else()
message(
FATAL_ERROR
"COLLADA_SUPPORT enabled, but unable to find PCRE. "
"Disable COLLADA_SUPPORT or fix PCRE_LIBRARY_DIR path to proceed."
)
endif()
if(MSVC)
add_debug_variants(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES}" d)
endif()
else()
message(
FATAL_ERROR
"COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA headers. "
"Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed."
)
endif()
endif(NOT OpenCOLLADA_DIR)
if(OPENCOLLADA_FOUND)
add_definitions(-DWITH_OPENCOLLADA)
set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_OPENCOLLADA)
endif()
+56
View File
@@ -0,0 +1,56 @@
#
# Input variables:
# - `PROJ_INCLUDE_DIR`
# - `PROJ_LIBRARIES`
# If input variables are not specified, try to find PROJ config.
# Input variables could also be provided as environment variables.
#
# Output targets:
# - `PROJ::proj`
#
# To avoid cyclic calls to this file
list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
UNIFY_ENVVARS_AND_CACHE(PROJ_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(PROJ_LIBRARIES)
if((NOT PROJ_INCLUDE_DIR AND NOT PROJ_LIBRARIES))
find_package(PROJ QUIET CONFIG)
if(NOT PROJ_FOUND)
find_path(PROJ_INCLUDE_DIR proj.h PATHS /usr/include/proj REQUIRED)
if(PROJ_INCLUDE_DIR)
message(STATUS "Found PROJ include files in: ${PROJ_INCLUDE_DIR}")
else()
message(FATAL_ERROR "Unable to find PROJ include directory, specify PROJ_INCLUDE_DIR manually.")
endif()
find_library(PROJ_LIBRARY NAMES proj PATHS /usr/lib/x86_64-linux-gnu)
if(PROJ_LIBRARY)
message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}")
set(PROJ_LIBRARIES ${PROJ_LIBRARY})
else()
message(FATAL_ERROR "Unable to find PROJ libraries in: ${PROJ_LIBRARY_DIR}")
endif()
add_library(PROJ::proj INTERFACE IMPORTED)
target_include_directories(PROJ::proj INTERFACE "${PROJ_INCLUDE_DIR}")
target_link_libraries(PROJ::proj INTERFACE ${PROJ_LIBRARIES})
target_link_directories(PROJ::proj INTERFACE "${PROJ_LIBRARY}")
endif()
else()
find_library(PROJ_LIBRARY NAMES proj PATHS ${PROJ_LIBRARY_DIR})
if(PROJ_LIBRARY)
message(STATUS "PROJ libraries ${PROJ_LIBRARY} found in: ${PROJ_LIBRARY_DIR}")
set(PROJ_LIBRARIES ${PROJ_LIBRARY})
else()
message(FATAL_ERROR "Unable to find PROJ libraries in: ${PROJ_LIBRARY_DIR}")
endif()
set(PROJ_INCLUDE_DIR ${PROJ_INCLUDE_DIR} CACHE FILEPATH "PROJ header files")
message(STATUS "Looking for PROJ include files in: ${PROJ_INCLUDE_DIR}")
include_directories(${PROJ_INCLUDE_DIR})
endif()
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
+86
View File
@@ -0,0 +1,86 @@
#
# Input variables:
# - `USD_INCLUDE_DIR`
# - `USD_LIBRARY_DIR`
# - `TBB_INCLUDE_DIR`
# - `TBB_LIBRARY_DIR`
# Input variables could also be provided as environment variables.
# If `USD_INCLUDE_DIR` and `USD_LIBRARY_DIR` are not provided,
# try to find USD by locating its config file.
#
# Output targets:
# - `pxr::USD`
UNIFY_ENVVARS_AND_CACHE(USD_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(USD_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(TBB_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(TBB_LIBRARY_DIR)
if(NOT USD_LIBRARY_DIR AND NOT USD_INCLUDE_DIR)
find_package(pxr CONFIG)
if(pxr_FOUND)
add_library(pxr::USD INTERFACE IMPORTED)
target_link_libraries(pxr::USD INTERFACE ${PXR_LIBRARIES})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(USD REQUIRED_VARS pxr_DIR)
return()
endif()
endif()
if(NOT USD_INCLUDE_DIR)
find_path(USD_INCLUDE_DIR pxr.h PATHS /usr/include/pxr /usr/local/include/pxr REQUIRED)
if(USD_INCLUDE_DIR)
message(STATUS "Found USD include files in: ${USD_INCLUDE_DIR}")
else()
message(FATAL_ERROR "Unable to find USD include directory, specify USD_INCLUDE_DIR manually.")
endif()
else()
set(USD_INCLUDE_DIR ${USD_INCLUDE_DIR} CACHE FILEPATH "USD header files")
message(STATUS "Looking for USD include files in: ${USD_INCLUDE_DIR}")
endif()
set(USD_LIBRARIES
usd_usd
usd_usdGeom
usd_usdShade
usd_usdLux
usd_vt
usd_sdf
usd_tf
usd_gf
usd_kind
usd_pcp
usd_arch
usd_ar
usd_plug
usd_js
usd_sdr
usd_work
usd_trace
usd_ndr
usd_ts
)
find_library(USD_LIBRARY NAMES ${USD_LIBRARIES} PATHS ${USD_LIBRARY_DIR})
if(USD_LIBRARY)
message(STATUS "USD libraries ${USD_LIBRARIES} found in: ${USD_LIBRARY_DIR}")
link_directories(${USD_LIBRARY_DIR})
else()
message(FATAL_ERROR "Unable to find USD libraries in: ${USD_LIBRARY_DIR}")
endif()
add_library(pxr::USD INTERFACE IMPORTED)
target_link_directories(pxr::USD INTERFACE ${USD_LIBRARY_DIR} ${TBB_LIBRARY_DIR})
target_include_directories(pxr::USD INTERFACE ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR})
# We don't link TBB libraries - on Windows they're provided using `pragma(lib)`.
# On Unix there's no `pragma(lib)`, so in theory it will break.
target_link_libraries(pxr::USD INTERFACE ${USD_LIBRARIES})
if(MSVC)
target_link_libraries(pxr::USD INTERFACE debug DbgHelp.lib)
endif()
target_compile_definitions(pxr::USD INTERFACE PXR_STATIC WITH_USD)
set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_USD)
+30
View File
@@ -0,0 +1,30 @@
#
# Input variables:
# - `JSON_INCLUDE_DIR`
# If input variables are not specified, try to find nlohmann_json config.
# Input variables could also be provided as environment variables.
#
# Output targets:
# - `nlohmann_json::nlohmann_json`
UNIFY_ENVVARS_AND_CACHE(JSON_INCLUDE_DIR)
if(NOT JSON_INCLUDE_DIR)
find_package(nlohmann_json CONFIG)
mark_as_advanced(nlohmann_json)
if(nlohmann_json_DIR)
return()
endif()
endif()
find_path(json_header_path "nlohmann/json.hpp" HINTS "${JSON_INCLUDE_DIR}")
mark_as_advanced(json_header_path)
if(json_header_path)
message(STATUS "JSON for Modern C++ header file found in '${json_header_path}'.")
add_library(nlohmann_json::nlohmann_json INTERFACE IMPORTED)
target_include_directories(nlohmann_json::nlohmann_json INTERFACE ${json_header_path})
return()
endif()
message(FATAL_ERROR "Unable to find JSON for Modern C++ header file / package, aborting")
+63
View File
@@ -0,0 +1,63 @@
@PACKAGE_INIT@
# Variable to inspect installed schema versions.
set(IFCOPENSHELL_SCHEMA_VERSIONS @SCHEMA_VERSIONS@)
set(IFCOPENSHELL_WITH_OPENCASCADE @WITH_OPENCASCADE@)
set(IFCOPENSHELL_WITH_CGAL @WITH_CGAL@)
set(IFCOPENSHELL_IFCXML @IFCXML_SUPPORT@)
set(IFCOPENSHELL_WITH_ROCKSDB @WITH_ROCKSDB@)
include(CMakeFindDependencyMacro)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_COMPONENTS
system
program_options
regex
thread
date_time
iostreams
)
find_dependency(Boost CONFIG COMPONENTS ${Boost_COMPONENTS})
find_dependency(Eigen3 CONFIG)
if(IFCOPENSHELL_WITH_ROCKSDB)
find_dependency(zstd CONFIG)
# Temporaily mess with CMAKE_FIND_PACKAGE_PREFER_CONFIG to help RocksDB
# find it's zstd dependency on Windows.
# Only do it on Windows, otherwise it might create problems as
# findzstd and zstd-config target names do not match.
# https://github.com/facebook/rocksdb/pull/13975
if(WIN32)
set(TEMP CMAKE_FIND_PACKAGE_PREFER_CONFIG)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
endif()
find_dependency(RocksDB CONFIG)
if(WIN32)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ${TEMP})
endif()
endif()
if(IFCOPENSHELL_IFCXML)
find_dependency(LibXml2 CONFIG)
endif()
if(IFCOPENSHELL_WITH_CGAL)
find_dependency(CGAL CONFIG)
endif()
if(IFCOPENSHELL_WITH_OPENCASCADE)
find_dependency(OpenCASCADE CONFIG)
if(OpenCASCADE_VERSION VERSION_LESS "7.7.0")
# cmake configs < 7.7.0 were not adding include directories to targets automatically.
set_target_properties(TKernel PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${OpenCASCADE_INCLUDE_DIR}")
endif()
endif()
include("${CMAKE_CURRENT_LIST_DIR}/@CONFIG_TARGETS_FILENAME@")
check_required_components("@PROJECT_NAME@")
+6 -13
View File
@@ -25,19 +25,12 @@ file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
foreach(file ${files})
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
set(filepath "$ENV{DESTDIR}${file}")
message(STATUS "Uninstalling ${filepath}")
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
exec_program(
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
OUTPUT_VARIABLE rm_out
RETURN_VALUE rm_retval
)
if(NOT "${rm_retval}" STREQUAL 0)
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
endif()
else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
if(IS_SYMLINK "${filepath}" OR EXISTS "${filepath}")
file(REMOVE "${filepath}")
else(NOT EXISTS "${filepath}")
message(STATUS "File ${filepath} does not exist.")
endif()
endforeach()
+22
View File
@@ -0,0 +1,22 @@
set(CONFIG_PACKAGE_LOCATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
set(CONFIG_NAMESPACE "${PROJECT_NAME}")
set(CONFIG_TARGETS_FILENAME ${PROJECT_NAME}Targets.cmake)
set(CONFIG_VERSION_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
set(CONFIG_PACKAGE_INPUT "${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in")
set(CONFIG_PACKAGE_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake")
# Allow linking against build directory.
export(EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} FILE ${CONFIG_TARGETS_FILENAME} NAMESPACE ${CONFIG_NAMESPACE}::)
install(EXPORT ${IFCOPENSHELL_EXPORT_TARGETS} NAMESPACE ${CONFIG_NAMESPACE}:: DESTINATION "${CONFIG_PACKAGE_LOCATION}")
include(CMakePackageConfigHelpers)
write_basic_package_version_file(${CONFIG_VERSION_OUTPUT} COMPATIBILITY ExactVersion)
configure_package_config_file(
${CONFIG_PACKAGE_INPUT}
${CONFIG_PACKAGE_OUTPUT}
INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION}
)
install(FILES "${CONFIG_PACKAGE_OUTPUT}" "${CONFIG_VERSION_OUTPUT}" DESTINATION ${CONFIG_PACKAGE_LOCATION})
+27 -2
View File
@@ -19,8 +19,9 @@
# Create a cache entry if absent for environment variables
macro(UNIFY_ENVVARS_AND_CACHE VAR)
if((NOT DEFINED ${VAR}) AND(NOT "$ENV{${VAR}}" STREQUAL ""))
if(NOT DEFINED ${VAR} AND DEFINED ENV{${VAR}} AND NOT ENV{${VAR}} STREQUAL "")
set(${VAR} "$ENV{${VAR}}" CACHE STRING "${VAR}" FORCE)
mark_as_advanced(${VAR})
endif()
endmacro()
@@ -113,6 +114,30 @@ function(add_debug_variants NAME LIBRARIES POSTFIX)
set(${NAME} ${LIBRARIES} PARENT_SCOPE)
endfunction()
# E.g.
# - `get_release_variant(MYLIB "mylibd.lib" "d")` -> `MYLIB = "mylib.lib"`
# - `get_release_variant(MYLIB "mylib.lib" "d")` -> `MYLIB = "mylib.lib"`
function(get_release_variant NAME LIBRARY POSTFIX)
set(RELEASE_SUFFIX ".lib")
set(DEBUG_SUFFIX "${POSTFIX}${RELEASE_SUFFIX}")
if("${LIBRARY}" MATCHES "${DEBUG_SUFFIX}$")
string(REPLACE "${DEBUG_SUFFIX}" "${RELEASE_SUFFIX}" LIBRARY ${LIBRARY})
endif()
set(${NAME} "${LIBRARY}" PARENT_SCOPE)
endfunction()
# E.g.
# - `get_debug_variant(MYLIB "mylib.lib" "d")` -> `MYLIB = "mylibd.lib"`
# - `get_debug_variant(MYLIB "mylibd.lib" "d")` -> `MYLIB = "mylibd.lib"`
function(get_debug_variant NAME LIBRARY POSTFIX)
set(RELEASE_SUFFIX ".lib")
set(DEBUG_SUFFIX "${POSTFIX}${RELEASE_SUFFIX}")
if(NOT "${LIBRARY}" MATCHES "${DEBUG_SUFFIX}$" AND "${LIBRARY}" MATCHES "${RELEASE_SUFFIX}$")
string(REPLACE "${RELEASE_SUFFIX}" "${DEBUG_SUFFIX}" LIBRARY ${LIBRARY})
endif()
set(${NAME} "${LIBRARY}" PARENT_SCOPE)
endfunction()
function(files_for_ifc_version IFC_VERSION RESULT_NAME)
set(IFC_PARSE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcparse)
set(${RESULT_NAME}
@@ -121,4 +146,4 @@ function(files_for_ifc_version IFC_VERSION RESULT_NAME)
${IFC_PARSE_DIR}/Ifc${IFC_VERSION}.cpp
PARENT_SCOPE
)
endfunction()
endfunction()
+5 -2
View File
@@ -41,11 +41,14 @@ cmake -G "Ninja" ^
-D Boost_LIBRARY_DIR:FILEPATH="%LIBRARY_PREFIX%\lib" ^
-D Boost_INCLUDE_DIR:FILEPATH="%LIBRARY_PREFIX%\include" ^
-D Boost_USE_STATIC_LIBS:BOOL=OFF ^
-D CITYJSON_SUPPORT:BOOL=OFF ^
../cmake
if errorlevel 1 exit 1
ninja install -j 1
if errorlevel 1 exit 1
python %RECIPE_DIR%/update_version_init.py %PKG_VERSION% %SP_DIR%/ifcopenshell/__init__.py
if errorlevel 1 exit 1
+3 -2
View File
@@ -41,9 +41,10 @@ cmake ${CMAKE_ARGS} -G Ninja \
-DBUILD_IFCGEOM:BOOL=ON \
-DBUILD_GEOMSERVER:BOOL=OFF \
-DBOOST_USE_STATIC_LIBS:BOOL=OFF \
-DCITYJSON_SUPPORT:BOOL=OFF \
./cmake
ninja
ninja install -j 1
ninja install -j 1
python "${RECIPE_DIR}/update_version_init.py" "${PKG_VERSION}" "${SP_DIR}/ifcopenshell/__init__.py"
+16 -16
View File
@@ -1,6 +1,5 @@
variant:
- novtk
- all
python:
- 3.12
occt:
- 7.8.1
@@ -24,14 +23,15 @@ cxx_compiler_version:
- '12' # [linux]
- '16' # [osx]
c_stdlib_version:
- '2.12' # [linux]
- '10.13' # [osx]
- 2.17 # [linux]
- 10.13 # [osx and x86_64]
- 11.0 # [osx and arm64]
hdf5:
- 1.14.3
- 1.14.6
libboost_devel:
- '1.84'
- '1.86'
libxml2:
- '2'
- 2.13
mpfr:
- '4'
gmp:
@@ -47,12 +47,12 @@ target_platform:
- win-64 # [win]
- linux-64 # [linux]
- osx-64 # [osx]
macos_machine:
- x86_64-apple-darwin13.4.0
MACOSX_DEPLOYMENT_TARGET:
- '10.13'
MACOSX_SDK_VERSION:
- '10.13'
macos_machine: # [osx]
- x86_64-apple-darwin13.4.0 # [osx and x86_64]
- arm64-apple-darwin20.0.0 # [osx and arm64]
MACOSX_DEPLOYMENT_TARGET: # [osx]
- 11.0 # [osx and arm64]
- 10.13 # [osx and x86_64]
CONDA_BUILD_SYSROOT:
- "/Users/runner/work/MacOSX10.13.sdk" # [osx]
CONDA_BUILD_SYSROOT: # [osx]
- "/Users/runner/work/MacOSX10.13.sdk" # [osx and x86_64]
+48 -33
View File
@@ -1,64 +1,78 @@
{% set version = environ.get('VERSION_OVERRIDE', '0.8.0') %}
{% set build = 0 %}
# Higher number -> Always prioritize "novtk" variant over "all" variant
{% set build = build + 200 %} # [variant == "novtk"]
{% set build = build + 100 %} # [variant == "all"]
context:
version: ${{ env.get("VERSION_OVERRIDE", default="0.8.2.1") }}
build: 1
package:
name: ifcopenshell
version: {{ version }}
version: ${{ version }}
source:
path: ../
- path: ..
build:
number: {{ build }}
skip: true # [py<39]
binary_relocation: false # [osx]
string: py{{ CONDA_PY }}_{{ variant }}_h{{ PKG_HASH }}_{{ build }}
run_exports:
- {{ pin_subpackage('ifcopenshell', max_pin='x.x.x') }} *{{ variant }}*
number: ${{ build }}
dynamic_linking:
binary_relocation: ${{ true if osx }}
requirements:
build:
- cmake
- if: build_platform != target_platform
then:
- python
- cross-python_${{ target_platform }}
- cmake <4
- ninja
- swig >=4.1.1
- {{ stdlib("c") }}
- {{ compiler('c') }}
- {{ compiler('cxx') }}
- ${{ stdlib("c") }}
- ${{ compiler('c') }}
- ${{ compiler('cxx') }}
host:
- python
- libboost-devel
- occt *=*{{ variant }}*
- occt
- libxml2
- cgal-cpp
- hdf5
- eigen
- mpfr
- nlohmann_json
- gmp # [unix]
- mpir # [win]
- gmp
- zlib
run:
- python
- {{ pin_compatible('occt', max_pin='x.x.x') }} *{{ variant }}*
- {{ pin_compatible('cgal-cpp', max_pin='x.x') }}
test:
imports:
- ifcopenshell
- shapely
- typing_extensions
- ${{ pin_compatible('occt', upper_bound='x.x.x') }}
- ${{ pin_compatible('cgal-cpp', upper_bound='x.x') }}
run_exports:
- ${{ pin_subpackage('ifcopenshell', upper_bound='x.x.x') }}
tests:
- python:
imports:
- ifcopenshell
pip_check: false
- script:
- python -c "import ifcopenshell; assert ifcopenshell.version == '${{ version }}', 'print(ifcopenshell.version)'"
requirements:
run:
- occt * *novtk* # Ensure that even though compiled against OCCT with VTK, it can still run with OCCT without VTK
- pytest
- python-dateutil
- xmlschema
- xsdata
- lxml
- isodate
- lark
- networkx
- tabulate
- shapely
about:
home: https://ifcopenshell.org
license: LGPL-3.0-or-later
license_file: COPYING
summary: 'IfcOpenShell is a library to support the IFC file format'
summary: IfcOpenShell is a library to support the IFC file format
description: |
IfcOpenShell
============
@@ -293,8 +307,9 @@ about:
[MSYS2]: https://msys2.github.io/ "MSYS2"
[win/readme.md]: https://github.com/IfcOpenShell/IfcOpenShell/tree/master/win/readme.md "win/readme.md"
[nix/build-all.py]: https://github.com/IfcOpenShell/IfcOpenShell/tree/master/nix/build-all.py "nix/build-all.py"
doc_url: https://ifcopenshell.org/
dev_url: https://github.com/IfcOpenShell/IfcOpenShell
homepage: https://ifcopenshell.org
repository: https://github.com/IfcOpenShell/IfcOpenShell
documentation: https://ifcopenshell.org/
extra:
recipe-maintainers:
+33
View File
@@ -0,0 +1,33 @@
import argparse
import re
from pathlib import Path
def update_version(file_path: str, version: str) -> None:
"""Update the version string in the given __init__.py file."""
file_path = Path(file_path)
# Read the file and replace the version
file_contents = file_path.read_text(encoding="utf-8")
new_contents = re.sub(r'version = "0\.0\.0"', f'version = "{version}"', file_contents)
# Write the updated contents back to the file
file_path.write_text(new_contents, encoding="utf-8")
print(f"Updated version in {file_path} to {version}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Update the version string in a Python file.")
parser.add_argument(
"version",
type=str,
help="The version string to replace '0.0.0' with (e.g., '1.2.3')."
)
parser.add_argument(
"file",
type=str,
help="The path to the __init__.py file where the version will be updated."
)
args = parser.parse_args()
update_version(args.file, args.version)
+1
View File
@@ -1,4 +1,5 @@
import textwrap
# The `extensions` list should already be in here from `sphinx-quickstart`
extensions = [
# there may be others here already, e.g. 'sphinx.ext.mathjax'
+19 -24
View File
@@ -1,14 +1,10 @@
#Look for an executable called sphinx-build
find_program(SPHINX_EXECUTABLE
NAMES sphinx-build
DOC "Path to sphinx-build executable")
find_program(SPHINX_EXECUTABLE NAMES sphinx-build DOC "Path to sphinx-build executable")
include(FindPackageHandleStandardArgs)
#Handle standard arguments to find_package like REQUIRED and QUIET
find_package_handle_standard_args(Sphinx
"Failed to find sphinx-build executable"
SPHINX_EXECUTABLE)
find_package_handle_standard_args(Sphinx "Failed to find sphinx-build executable" SPHINX_EXECUTABLE)
find_package(Doxygen REQUIRED)
#find_package(Sphinx REQUIRED)
@@ -16,25 +12,24 @@ find_package(Doxygen REQUIRED)
set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR})
set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/docs/sphinx)
MESSAGE(STATUS "SPHINX BUILD ${CMAKE_CURRENT_BINARY_DIR}")
message(STATUS "SPHINX BUILD ${CMAKE_CURRENT_BINARY_DIR}")
file(MAKE_DIRECTORY ./output/doxygen)
if (DOXYGEN_FOUND)
if(DOXYGEN_FOUND)
add_custom_target(
Sphinx
ALL
COMMAND ${SPHINX_EXECUTABLE} -v -T -b html ${SPHINX_SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/output
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output
COMMENT "Generating documentation with Sphinx"
)
add_custom_target(Sphinx ALL
COMMAND
${SPHINX_EXECUTABLE} -v -T -b html
${SPHINX_SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/output
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output
COMMENT "Generating documentation with Sphinx")
# add_custom_target(ifcopenshell_python_docs ALL
# COMMAND make html
# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs
# OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs
# COMMENT "Generating documentation with Sphinx")
else (DOXYGEN_FOUND)
message("Doxygen need to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND)
# add_custom_target(ifcopenshell_python_docs ALL
# COMMAND make html
# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs
# OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs
# COMMENT "Generating documentation with Sphinx")
else(DOXYGEN_FOUND)
message("Doxygen need to be installed to generate the doxygen documentation")
endif(DOXYGEN_FOUND)
+2 -2
View File
@@ -1,10 +1,10 @@
# This program requires doxygen, sphinx, breathe and exhale.
import multiprocessing
import os
import sys
import shutil
import subprocess
import multiprocessing
import sys
# some extra check to see if we can find sphinx in pypy bin dir
sphinx_build = os.path.join(os.path.dirname(sys.executable), 'sphinx-build')
+880 -362
View File
File diff suppressed because it is too large Load Diff
+79
View File
@@ -0,0 +1,79 @@
"""
Cache built dependencies for builds.
This script is finding common install directory and either
packs each folder into a tar.gz archive, if it wasn't packed before,
or unpacks existing archives.
Expected to be executed from 'build' directory (e.g. that might contain 'Linux/x86_64/install').
Usage: python cache_dependencies.py [pack|unpack]
"""
import platform
import subprocess
import sys
import tarfile
from pathlib import Path
from typing import Literal
CACHE_PREFIX = "cache-"
def get_install_dir() -> Path:
if platform.system() == "Darwin":
pattern = "Darwin/*/*/install"
else:
pattern = "*/*/install"
for data in Path.cwd().glob(pattern):
return data
raise Exception("No install dir found")
def run(cmd: str) -> None:
print(f"Running command: `{cmd}`")
subprocess.check_call(cmd, shell=True)
def pack_dependencies(install_dir: Path) -> None:
# Process each install_dir
for dependency_path in install_dir.iterdir():
if not dependency_path.is_dir():
continue
dependency_name = dependency_path.name
# Skip ifcopenshell - it's a build output, not a dependency to reuse across builds.
if dependency_name == "ifcopenshell":
continue
tar_path = install_dir / f"{CACHE_PREFIX}{dependency_name}.tar.gz"
if tar_path.exists():
print(f"Skipping existing cache: '{tar_path}'")
else:
# Python's `tarfile` is 10x slower than `tar` cli, so we use `tar`.
run(f'tar -czf "{tar_path}" -C "{install_dir}" "{dependency_name}"')
print(f"Created cache: '{tar_path}'")
def unpack_dependencies(install_dir: Path) -> None:
# `filter` argument was fully introduced in 3.12
# and results in deprecation warnings in 3.12-3.13, if not provided.
tar_filter: dict[Literal["filter"], Literal["data"]] = (
{"filter": "data"} if bool(sys.version_info >= (3, 12)) else {}
)
for tar_path in install_dir.glob(f"{CACHE_PREFIX}*.tar.gz"):
with tarfile.open(tar_path, "r:gz") as tar:
tar.extractall(path=install_dir, **tar_filter)
print(f"Extracted cache: '{tar_path.name}'.")
if __name__ == "__main__":
if len(sys.argv) != 2 or (action := sys.argv[1].lower()) not in ("pack", "unpack"):
print(__doc__)
sys.exit(1)
install_dir = get_install_dir()
print(f"Found install dir: '{install_dir}'")
if action == "pack":
pack_dependencies(install_dir)
else:
unpack_dependencies(install_dir)
+9 -13
View File
@@ -1,13 +1,9 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fd17283f77..6cecf9dad3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -826,6 +826,8 @@ if (EMSCRIPTEN)
list (REMOVE_ITEM BUILD_TOOLKITS ExpToCasExe)
endif()
+list (REMOVE_ITEM BUILD_TOOLKITS ExpToCasExe)
+
# bison
if (BUILD_YACCLEX)
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/bison")
--- a/adm/MODULES
+++ b/adm/MODULES
@@ -3,5 +3,5 @@ ModelingData TKG2d TKG3d TKGeomBase TKBRep
ModelingAlgorithms TKGeomAlgo TKTopAlgo TKPrim TKBO TKBool TKHLR TKFillet TKOffset TKFeat TKMesh TKXMesh TKShHealing
Visualization TKService TKV3d TKOpenGl TKOpenGles TKMeshVS TKIVtk TKD3DHost
ApplicationFramework TKCDF TKLCAF TKCAF TKBinL TKXmlL TKBin TKXml TKStdL TKStd TKTObj TKBinTObj TKXmlTObj TKVCAF
-DataExchange TKXDE TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh TKXDECascade TKExpress ExpToCasExe
+DataExchange TKXDE TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh TKXDECascade TKExpress
Draw TKDraw TKTopTest TKOpenGlTest TKOpenGlesTest TKD3DHostTest TKViewerTest TKXSDRAW TKDCAF TKXDEDRAW TKTObjDRAW TKQADraw TKIVtkDraw DRAWEXE
@@ -1,13 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1bacca1a48..11f931ad39 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -820,6 +820,8 @@ else()
OCCT_CHECK_AND_UNSET ("3RDPARTY_DOT_EXECUTABLE")
endif()
+list (REMOVE_ITEM BUILD_TOOLKITS ExpToCasExe)
+
# bison
if (BUILD_YACCLEX)
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/bison")
@@ -1,13 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 86905287dc..9d0bce984c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -828,6 +828,8 @@ else()
OCCT_CHECK_AND_UNSET ("3RDPARTY_DOT_EXECUTABLE")
endif()
+list (REMOVE_ITEM BUILD_TOOLKITS ExpToCasExe)
+
# bison
if (BUILD_YACCLEX)
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/bison")
@@ -0,0 +1,13 @@
diff --git a/OpenCOLLADAConfig.cmake.in b/OpenCOLLADAConfig.cmake.in
index d765b108..6800c2a7 100644
--- a/OpenCOLLADAConfig.cmake.in
+++ b/OpenCOLLADAConfig.cmake.in
@@ -31,7 +31,7 @@ set(OPENCOLLADA_INCLUDE_DIRS
include("@PACKAGE_OPENCOLLADA_INST_CMAKECONFIG@/OpenCOLLADATargets.cmake")
# Set the library variable
-if(UNIX)
+if(0)
set(OPENCOLLADA_LIBRARIES
ftoa_shared
buffer_shared
+8645
View File
File diff suppressed because it is too large Load Diff
+84
View File
@@ -0,0 +1,84 @@
[project]
name = "IfcOpenShell"
version = "0.8.4"
description = "IfcOpenShell is a library to support the IFC file format"
channels = ["conda-forge"]
platforms = ["win-64", "linux-64", "osx-64"]
[environments]
common = { features = ["common"], no-default-feature = true }
prod = { features = ["prod", "common"], no-default-feature = true }
dev = { features = ["dev", "common"], no-default-feature = true }
lint = { features = ["lint"], no-default-feature = true }
tests = { features = ["tests", "common"], no-default-feature = true }
[feature.lint.dependencies]
ruff = "*"
black = "*"
[feature.common.dependencies]
# Build deps
cmake = "==3.30.5"
ninja = "*"
swig = "*"
c-compiler = "*"
cxx-compiler = "*"
# Runtime deps
python = "3.12.*"
libboost-devel = "*"
occt = { version = "*", build = "*novtk*" }
cgal-cpp = "*"
numpy = "*"
lark = "*"
hdf5 = "*"
eigen = "*"
mpfr = "*"
gmp = "*"
nlohmann_json = "*"
zlib = "*"
# Not strictly necessary
pythonocc-core = "*"
[feature.tests.dependencies]
pytest = "*"
shapely = "*"
tabulate = "*"
isodate = "*"
python-dateutil = "*"
xmlschema = "*"
xsdata = "*"
lxml = "*"
networkx = "*"
[feature.common.target.win-64.dependencies]
vs2022_win-64 = "*"
#vs_win-64 = "*" # Visual Studio
#vswhere = "*" # Visual Studio
[feature.common.tasks]
init-submodules = { cmd = "git submodule update --init --recursive", outputs =["$PIXI_PROJECT_ROOT/src/svgfill/3rdparty/svgpp/*"]}
[feature.prod.target.win-64.tasks]
configure-release = { cmd = ["cmake", "--preset", "win-release", "-B", "build/win-release", "cmake"], description = "Configure the project", depends-on=[{ task="init-submodules", environment = "common" }] }
build-release = { cmd = ["cmake", "--build", "build/win-release", "--config", "Release"], description = "Build the project" }
[feature.dev.target.win-64.tasks]
configure-debug = { cmd = ["cmake", "--preset", "win-debug", "-B", "build/win-debug", "cmake"], description = "Configure the project", depends-on=[{ task="init-submodules", environment = "common" }], outputs=["build/win-debug/CMakeCache.txt"] }
build-debug = { cmd = ["cmake", "--build", "build/win-debug", "--config", "Debug"], description = "Build the project", depends-on = ["configure-debug"] }
install-debug = { cmd = ["cmake", "--install", "build/win-debug", "--config", "Debug"], description = "Install the project" } # Optionally Install files to your desired env using --prefix
vsdebug = { cmd = ["python"], description = "Run a python script with vs debugger attached" }
[feature.tests.tasks]
configure-test = { cmd = ["cmake", "--preset", "win-test", "-B", "build/win-test", "cmake"], description = "Configure the project", depends-on=[{ task="init-submodules", environment = "common" }], outputs=["build/win-test/CMakeCache.txt"] }
build-test = { cmd = ["cmake", "--build", "build/win-test", "--config", "Release"], description = "Build the project", depends-on = ["configure-test"], outputs=["build/win-test/IfcGeom.lib"] }
install-test = { cmd = ["cmake", "--install", "build/win-test", "--config", "Release"], description = "Install the project", depends-on = ["build-test"] } # Optionally Install files to your desired env using --prefix
test = { cmd = "pytest .", cwd="src/ifcopenshell-python/test", depends-on=["install-test"], env = {PYTHONPATH="$PIXI_PROJECT_ROOT/src/ifcpatch"}}
[feature.lint.tasks]
lint = { cmd = "ruff check && black --diff --check ."}
[feature.common.target.win-64.activation]
#scripts = ["cmake/activate.bat"]
+32
View File
@@ -0,0 +1,32 @@
There are two ways to build pyodide ifcopenshell Python wrapper wheel.
1. Using pyodide build system (`build_pyodide.yml` does it):
- install prebuilt pyodide build and emscripten environment (see `build_pyodide.sh`)
- clone IfcOpenShell to `IfcOpenShell` folder
- create `packages/ifcopenshell` folder that will be used by pyodide build system
- from `IfcOpenShell` move building recipe `pyodide/meta.yaml` to `packages/ifcopenshell`
- run `pyodide build-recipes ifcopenshell --install`, it will
- execute `meta.yaml` recipe - it will:
- copy IfcOpenShell source to build folder `packages/ifcopenhell/build/ifcopenshell-0.8.0`
- build ifcopenshell and its dependencies
- note that rerunning `pyodide build-recipes` will remove previous build folder and rebuild all dependencies.
The way to avoid it, if build fails, is to use `pyodide build-recipes-no-deps ifcopenshell --continue` instead.
- run `setup.py` in `IfcOpenShell` root, producing a wheel in `IfcOpenShell/dist`
- copy that wheel to `packages/ifcopenshell/dist`
- `--install` it to current build envrionment
- copy the wheel next to `dist` folder (in root directory, next to `packages`)
- add wheel to `dist/pyodide-lock.json`
2. Build it outside of pyodide build system.
Building inside pyodide build system should be preferred, option to build it outside is useful for debugging purposes,
since it's pure cmake without any additional moving parts.
- setup pyodide environment, see above
- clone IfcOpenShell repo next to it to `IfcOpenShell` folder
- run `python nix/build-all.py -wasm -py-313` in `IfcOpenShell`
- it will produce Python package in `IfcOpenShell/ifcopenshell`
- run `pyodide build`
- it will produce a wheel in `IfcOpenShell/dist`
+41
View File
@@ -0,0 +1,41 @@
#!/usr/bin/bash
set -ex
# Script is assuming that it will be possible to execute it multiple times
# therefore we're clearing venv each time and ignoring existing 'emsdk' folder.
# Install uv.
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python 3.13 --clear
source .venv/bin/activate
# Install pyodide cross build environment.
# Instructions: https://pyodide.org/en/stable/development/building-packages.html
uv pip install pyodide-build
# `uv run` is required, so xbuildenv would skip using `pip`.
uv run pyodide xbuildenv install
# Emscripten doesn't come with xbuildenv.
if [ ! -d emsdk ]; then
git clone https://github.com/emscripten-core/emsdk
fi
pushd emsdk
PYODIDE_EMSCRIPTEN_VERSION=$(pyodide config get emscripten_version)
./emsdk install ${PYODIDE_EMSCRIPTEN_VERSION}
./emsdk activate ${PYODIDE_EMSCRIPTEN_VERSION}
source emsdk_env.sh
which emcc
popd
mkdir -p packages/ifcopenshell
VERSION=`cat IfcOpenShell/VERSION`
cp IfcOpenShell/pyodide/meta.yaml packages/ifcopenshell
sed -i s/0.8.0/$VERSION/g packages/ifcopenshell/meta.yaml
# Use custom build ifcopenshell directory in build-all to make caching simpler
# Otherwise pyodide build path typically includes package version, so cached cmake configs might break.
export BUILD_DIR=`readlink -f ifcopenshell_build`
# Use build-recipes-no-deps first, so logs would be printed to stdout.
pyodide build-recipes-no-deps ifcopenshell
pyodide build-recipes ifcopenshell --install
+3 -3
View File
@@ -3,12 +3,12 @@ package:
version: 0.8.0
source:
path: IfcOpenShell
# meta.yaml is placed as `packages/ifcopenshell/meta.yaml`.
path: ../../IfcOpenShell
build:
script: |
python nix/build-all.py --without-hdf5 --without-opencollada --without-swig --without-pcre -v --wasm --py310 IfcOpenShell-Python
cp pyodide/setup.py .
BUILD_CFG=Release python nix/build-all.py -v --wasm --py313
about:
home: http://ifcopenshell.org
+45 -9
View File
@@ -1,11 +1,47 @@
from setuptools import setup, find_packages
# setup.py is getting deprecated, but we still use it,
# because `tool.setuptools.ext-modules` is still experimental in pyproject.toml
# and we need it to get the wheel suffix right.
import os
from pathlib import Path
setup(name='IfcOpenShell',
version='0.8.0',
description='IfcOpenShell is an open source (LGPL) software library for working with the Industry Foundation Classes (IFC) file format.',
author='Thomas Krijnen',
author_email='thomas@aecgeeks.com',
url='http://ifcopenshell.org',
packages=find_packages(),
package_data={'': ['*.so']},
import tomllib
from setuptools import Extension, find_packages, setup
REPO_FOLDER = Path(__file__).parent
def get_version() -> str:
if "PKG_VERSION" in os.environ:
# Inside pyodide build environment.
return os.environ["PKG_VERSION"]
return (REPO_FOLDER / "VERSION").read_text().strip()
# Read dependencies from pyproject.toml
def get_dependencies() -> list[str]:
pyproject_toml = REPO_FOLDER / "src" / "ifcopenshell-python" / "pyproject.toml"
pyproject_data = tomllib.loads(pyproject_toml.read_text())
dependencies = pyproject_data["project"]["dependencies"]
return dependencies
setup(
name="ifcopenshell",
version=get_version(),
description=(
"IfcOpenShell is an open source (LGPL) software library "
"for working with the Industry Foundation Classes (IFC) file format."
),
author="Thomas Krijnen",
author_email="thomas@aecgeeks.com",
url="https://ifcopenshell.org",
install_requires=get_dependencies(),
packages=find_packages(include=["ifcopenshell", "ifcopenshell.*"]),
package_data={
# "*.so" is needed to include prebuilt binary extension. Otherwise it would try to build it and fail.
"ifcopenshell": ["util/schema/*.json", "util/schema/*.ifc", "*.so"],
"": ["*.json", "*.ifc"],
},
# Has to provide extension to get the correct wheel suffix.
ext_modules=[Extension("ifcopenshell._ifcopenshell_wrapper", sources=[])],
)
+26
View File
@@ -0,0 +1,26 @@
from pathlib import Path
WHEEL_FILENAME = next(
p.name for p in (Path.cwd() / "pyodide").iterdir() if p.name.startswith("ifcopenshell-") and p.suffix == ".whl"
)
def test_ifcopenshell_import(selenium):
selenium.load_package("micropip")
# Important to test it with `micropip.install`
# without any dependencies loaded to ensure micropip will load them automatically.
selenium.run_async(
f"""
import micropip
await micropip.install(f"./{WHEEL_FILENAME}")
import ifcopenshell
ifc_file = ifcopenshell.file()
wall = ifc_file.create_entity("IfcWall")
wall1 = ifc_file.by_type("IfcWall")[0]
print(wall, wall1)
assert wall == wall1, "Wall entity doesn't match"
wall.Name = "Test"
assert wall.Name == "Test", f"Entity name wasn't changed: {{wall}}"
print(wall)
"""
)
+254 -23
View File
@@ -1,35 +1,266 @@
[project]
name = "IfcOpenShell"
version = "0.0.0"
dependencies = [
"black==26.3.1",
"ruff==0.15.7",
"poethepoet",
"gersemi==0.26.1",
]
[tool.black]
line-length = 120
include = '''
src/(
bcf
|bcfserver
|bonsai
|bsdd
|foundationserver
|ifc2ca
|ifc4d
|ifc5d
|ifcbimtester
|ifcblender
|ifccityjson
|ifcclash
|ifccsv
|ifcdiff
|ifcfm
|ifcpatch
|ifctester
|ifcopenshell-python
|ifcsverchok
|opencdeserver
)/.*.py$
src/.*.pyi?$
|nix/.*.pyi?$
'''
extend-exclude = '''
src/ifcopenshell-python/ifcopenshell/express/*
src/ifcopenshell-python/ifcopenshell/express/rules/*
|src/ifcopenshell-python/ifcopenshell/express/express_parser.py
|src/ifcopenshell-python/ifcopenshell/mvd/*
|src/ifcopenshell-python/ifcopenshell/simple_spf/*
|src/ifc2ca/templates/*
|src/svgfill
|src/exterior-shell-extractor
'''
[tool.pyright]
reportInvalidTypeForm = false
disableBytesTypePromotions = true
reportUnnecessaryTypeIgnoreComment = true
# Pylance doesn't respect gitignore, so we have to exclude files manually here
# to avoid VS Code slowing down.
# https://github.com/microsoft/pylance-release/issues/5169
exclude = [
"_deps",
]
# Define here general ruff settings,
# then they will be inherited by projects' .toml files.
# This allows using assuming different Python version for different projects.
[tool.ruff]
exclude = [
# Submodules.
"src/ifcopenshell-python/ifcopenshell/express",
"src/ifcopenshell-python/ifcopenshell/mvd",
"src/ifcopenshell-python/ifcopenshell/simple_spf",
"src/svgfill",
#
# Unformatted.
"src/exterior-shell-extractor",
# Incompatible with linter.
"src/ifc2ca/templates",
]
[tool.ruff.lint]
preview = true
select = [
# Default Ruff rules.
# "E4", # imports
# "E7", # statements
"E9", # io errors
# "F", # pyflakes
#
"FA", # future annotations
"UP", # pyupgrade
"RUF015", # next() > list_comprehension[0]
"RUF022", # sort __all__
"I", # import sorting
]
ignore = [
"FA100", # Conflicts with Blender using annotations for props definitions.
# Maybe will enable later:
"UP007", # Optional to X | Y
"UP045", # Optional to X | None
"UP015", # Unnecessary mode argument
"UP028", # yield for -> yield from
"UP030", # implicit references for positional format fields
"UP031", # Replace % with .format
"UP032", # Replace .format with f-string
]
[tool.ty.rules]
all = "ignore"
# Structural rules (no deep type inference needed, easier to adapt).
abstract-method-in-final-class = "error"
ambiguous-protocol-member = "error"
byte-string-type-annotation = "error"
conflicting-declarations = "error"
conflicting-metaclass = "error"
cyclic-class-definition = "error"
cyclic-type-alias-definition = "error"
dataclass-field-order = "error"
duplicate-base = "error"
duplicate-kw-only = "error"
empty-body = "error"
escape-character-in-forward-annotation = "error"
final-on-non-method = "error"
final-without-value = "error"
fstring-type-annotation = "error"
ignore-comment-unknown-rule = "error"
implicit-concatenated-string-type-annotation = "error"
inconsistent-mro = "error"
ineffective-final = "error"
instance-layout-conflict = "error"
invalid-dataclass = "error"
invalid-dataclass-override = "error"
invalid-enum-member-annotation = "error"
invalid-explicit-override = "error"
invalid-frozen-dataclass-subclass = "error"
invalid-generic-class = "error"
invalid-generic-enum = "error"
invalid-ignore-comment = "error"
invalid-legacy-positional-parameter = "error"
invalid-legacy-type-variable = "error"
invalid-named-tuple = "error"
invalid-newtype = "error"
invalid-overload = "error"
invalid-paramspec = "error"
invalid-protocol = "error"
invalid-syntax-in-forward-annotation = "error"
invalid-total-ordering = "error"
invalid-type-alias-type = "error"
invalid-type-checking-constant = "error"
invalid-type-guard-definition = "error"
invalid-type-variable-bound = "error"
invalid-type-variable-constraints = "error"
invalid-typed-dict-header = "error"
invalid-typed-dict-statement = "error"
override-of-final-method = "error"
override-of-final-variable = "error"
possibly-missing-import = "error"
possibly-missing-submodule = "error"
# Has false positives due to ty walrus operator bug.
# possibly-unresolved-reference = "error"
raw-string-type-annotation = "error"
redundant-final-classvar = "error"
shadowed-type-variable = "error"
subclass-of-final-class = "error"
super-call-in-named-tuple-method = "error"
unavailable-implicit-super-arguments = "error"
unbound-type-variable = "error"
undefined-reveal = "error"
unresolved-global = "error"
unresolved-import = "error"
unresolved-reference = "error"
unused-ignore-comment = "error"
unused-type-ignore-comment = "error"
useless-overload-body = "error"
# Non-structural rules:
deprecated = "error"
zero-stepsize-in-slice = "error"
possibly-missing-implicit-call = "error"
unused-awaitable = "error"
# Function argument rules:
# Conflicts with `ifcopenshell.api.geometry.add_representation` type of callables we have, confusing them with a module.
# call-non-callable = "error"
conflicting-argument-forms = "error"
# Too many false positives.
# invalid-argument-type = "error"
missing-argument = "error"
parameter-already-assigned = "error"
positional-only-parameter-as-kwarg = "error"
too-many-positional-arguments = "error"
unknown-argument = "error"
# Has a lot of warnings due to current ty walrus operator issues.
# index-out-of-bounds = "error"
# unresolved-attribute = "error"
[tool.ty.environment]
extra-paths = [
"src/bonsai/external_dependencies",
"src/bcf",
"src/bsdd",
"src/bonsai",
"src/ifc4d",
"src/ifc5d",
"src/ifccityjson",
"src/ifcclash",
"src/ifccsv",
"src/ifcdiff",
"src/ifcfm",
"src/ifcopenshell-python",
"src/ifcpatch",
"src/ifctester",
]
[tool.ty.src]
exclude = [
# External dependencies cloned for type checking only.
"src/bonsai/external_dependencies",
# Submodules.
"src/ifcopenshell-python/ifcopenshell/express",
"src/ifcopenshell-python/ifcopenshell/mvd",
"src/ifcopenshell-python/ifcopenshell/simple_spf",
"src/svgfill/3rdparty",
# Has special dependencies.
"src/ifcopenshell-python/ifcopenshell/geom/app.py",
"src/ifcopenshell-python/ifcopenshell/geom/code_editor_pane.py",
"src/ifcopenshell-python/ifcopenshell/util/doc.py",
"src/ifcopenshell-python/ifcopenshell/util/generate_pset_templates.py",
"src/ifcopenshell-python/ifcopenshell/util/ifc4x3dev_scrape_data_for_docs.py",
# Too esoteric.
"src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.py",
"src/ifc2ca/templates",
# Too dev.
"src/bcf/setup.py",
"src/bsdd/yml_to_classes.py",
# Deprecated.
"src/ifc2ca/_deprecated",
]
[tool.poe.tasks]
ruff-main = "ruff check --extend-exclude nix/build-all.py"
# It's actually Python 3.6, but ruff only supports 3.7+, but it should do.
ruff-old = "ruff check nix/build-all.py --target-version py37"
ruff.sequence = ["ruff-main", "ruff-old"]
black = "black ."
ty.sequence = ["ty-bonsai", "ty-ios"]
ty.help = "Run ty type checker. Requires ty-venv to be set up first."
ty-bonsai = "ty check src/bonsai --python=src/bonsai/.venv"
ty-venv.sequence = ["ty-venv-bonsai", "ty-venv-ios"]
ty-venv-bonsai.sequence = [
{cmd = "uv venv src/bonsai/.venv --python=3.11 --allow-existing"},
{cmd = "uv pip install -r src/bonsai/type-check-requirements.txt --python=src/bonsai/.venv"},
]
ty-venv-ios.sequence = [
{cmd = "uv venv src/ifcopenshell-python/.venv --python=3.10 --allow-existing"},
{cmd = "uv pip install -r src/ifcopenshell-python/type-check-requirements.txt --python=src/ifcopenshell-python/.venv"},
]
format.sequence = ["black", "ruff-main", "ruff-old"]
cmake-format = "gersemi . --in-place"
[tool.poe.tasks.ty-ios]
# --ignore unresolved-reference: walrus operator false positives in ty.
cmd = """
ty check
src/bcf
src/bsdd
src/ifc2ca
src/ifc4d
src/ifc5d
src/ifccityjson
src/ifcclash
src/ifccsv
src/ifcdiff
src/ifcfm
src/ifcopenshell-python
src/ifcpatch
src/ifctester
--python=src/ifcopenshell-python/.venv
--ignore unresolved-reference
"""
[tool.poe.tasks.bonsai-deps]
help = "Clone or update Bonsai external dependencies."
cmd = "python src/bonsai/scripts/bonsai_deps.py"
+4 -3
View File
@@ -1,7 +1,8 @@
from dataclasses import fields
from typing import NamedTuple, Union
import bcf.v2.model.extensions
import bcf.v3.model.extensions
from typing import NamedTuple, Union
from dataclasses import fields
class AttributeData(NamedTuple):
@@ -20,7 +21,7 @@ def get_extensions_attributes(extensions: Extensions) -> dict[str, AttributeData
- subattribute name"""
possible_attributes = {}
for field in fields(type(extensions)):
field_type = field.type.__args__[0] # type: ignore [reportAttributeAccessIssue]
field_type = field.type.__args__[0] # pyright: ignore [reportAttributeAccessIssue]
subfield = next(iter(fields(field_type)))
xsd_name = subfield.metadata["name"]
possible_attributes[field.name] = AttributeData(field_type, subfield.name, xsd_name)
+2 -1
View File
@@ -1,6 +1,7 @@
from typing import Union
import bcf.v2.model
import bcf.v3.model
from typing import Union
BimSnippet = Union[bcf.v2.model.BimSnippet, bcf.v3.model.BimSnippet]
BitMap = Union[bcf.v2.model.VisualizationInfoBitmap, bcf.v3.model.Bitmap]
+6 -4
View File
@@ -1,14 +1,16 @@
import tempfile
from pathlib import Path
from typing import Optional, Union
from typing_extensions import assert_never
import bcf.agnostic.model as mdl
import bcf.v2.bcfxml
import bcf.v2.model
import bcf.v2.topic
import bcf.v3.bcfxml
import bcf.v3.model
import bcf.v3.topic
import bcf.agnostic.model as mdl
from pathlib import Path
from typing import Union, Optional
from typing_extensions import assert_never
TopicHandler = Union[bcf.v2.topic.TopicHandler, bcf.v3.topic.TopicHandler]
+3 -2
View File
@@ -1,5 +1,6 @@
import bcf.v2.visinfo
import bcf.v3.visinfo
from typing import Union
import bcf.v2.visinfo
import bcf.v3.visinfo
VisualizationInfoHandler = Union[bcf.v2.visinfo.VisualizationInfoHandler, bcf.v3.visinfo.VisualizationInfoHandler]
-1
View File
@@ -29,7 +29,6 @@ from bcf.v3.bcfxml import BcfXml as BcfXml3
from bcf.v3.model import Version as Version3
from bcf.xml_parser import AbstractXmlParserSerializer, XmlParserSerializer
BcfXml = Union[BcfXml2, BcfXml3]
+3 -12
View File
@@ -6,7 +6,7 @@ from numpy.typing import NDArray
def camera_vectors_from_element_placement(
elem_placement: NDArray[np.float64],
) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]:
) -> tuple[list[float], list[float], list[float]]:
"""
Calculate the vectors of a camera pointing to an element.
@@ -22,7 +22,7 @@ def camera_vectors_from_element_placement(
def camera_vectors_from_target_position(
target_position: NDArray[np.float64], offset: Optional[NDArray[np.float64]] = None
) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]:
) -> tuple[list[float], list[float], list[float]]:
"""
Calculate the vectors of a camera pointing to a target point.
@@ -38,16 +38,7 @@ def camera_vectors_from_target_position(
camera_direction = unit_vector(-camera_offset) # pylint: disable=invalid-unary-operand-type
camera_right = unit_vector(np.cross(np.array([0.0, 0.0, 1.0]), camera_direction))
camera_up = unit_vector(np.cross(camera_direction, camera_right))
return camera_position, camera_direction, camera_up
# rotation_transform = np.eye(4)
# rotation_transform[0, :3] = camera_right
# rotation_transform[1, :3] = camera_up
# rotation_transform[2, :3] = camera_direction
# translation_transform = np.eye(4)
# translation_transform[:3, -1] = -camera_position
# look_at_transform = np.matmul(rotation_transform, translation_transform)
# mat = np.linalg.inv(look_at_transform)
# return camera_position, -mat[:3, 2], mat[:3, 1]
return camera_position.tolist(), camera_direction.tolist(), camera_up.tolist()
def unit_vector(v: NDArray[np.float64]) -> NDArray[np.float64]:
+4 -2
View File
@@ -6,6 +6,8 @@ Copyright (c) 2017-2020 Anthon van der Neut, Ruamel bvba
original idea from https://stackoverflow.com/a/19722365/1307905
"""
from __future__ import annotations
import zipfile
from io import BytesIO
from os import PathLike
@@ -25,7 +27,7 @@ class InMemoryZipFile:
self._file_name: Optional[str | Path] = str(file_name) if hasattr(file_name, "_from_parts") else file_name
self.in_memory_data = BytesIO()
# Create the in-memory zipfile
self.in_memory_zip = zipfile.ZipFile(self.in_memory_data, "w", compression, False)
self.in_memory_zip = zipfile.ZipFile(self.in_memory_data, "w", compression, True)
self.in_memory_zip.debug = debug
def writestr(self, filename_in_zip: str | zipfile.ZipInfo, file_contents: bytes | str) -> None:
@@ -47,7 +49,7 @@ class InMemoryZipFile:
def data(self) -> bytes:
return self.in_memory_data.getvalue()
def __enter__(self) -> "InMemoryZipFile":
def __enter__(self) -> InMemoryZipFile:
return self
def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
+7 -5
View File
@@ -1,5 +1,7 @@
"""BCF XML V2 handler."""
from __future__ import annotations
import uuid
import warnings
import zipfile
@@ -31,7 +33,7 @@ class BcfXml:
self._extension_schema: Optional[bytes] = None
self._zip_file = self._load_zip_file()
def __enter__(self) -> "BcfXml":
def __enter__(self) -> BcfXml:
return self
def __exit__(self, *args: Any) -> None:
@@ -99,7 +101,7 @@ class BcfXml:
extensions = mdl_extensions.Extensions()
xs = "{http://www.w3.org/2001/XMLSchema}"
root = etree.parse(io.BytesIO((self.extension_schema)))
root = etree.parse(io.BytesIO(self.extension_schema))
attrs = bcf.agnostic.extensions.get_extensions_attributes(extensions)
xsd_to_attrs = {v.subattr_xsd_name: k for k, v in attrs.items()}
@@ -148,7 +150,7 @@ class BcfXml:
return topics
@classmethod
def load(cls, filename: Path, xml_handler: Optional[AbstractXmlParserSerializer] = None) -> Optional["BcfXml"]:
def load(cls, filename: Path, xml_handler: Optional[AbstractXmlParserSerializer] = None) -> Optional[BcfXml]:
"""
Create a BcfXml object from a file.
@@ -172,7 +174,7 @@ class BcfXml:
cls,
project_name: Optional[str] = None,
xml_handler: Optional[AbstractXmlParserSerializer] = None,
) -> "BcfXml":
) -> BcfXml:
"""
Create a new BcfXml object.
@@ -261,7 +263,7 @@ class BcfXml:
)
# region Deprecated methods
def new_project(self) -> "BcfXml":
def new_project(self) -> BcfXml:
"""Deprecated method."""
warnings.warn("new_project is deprecated, use create_new instead.", DeprecationWarning)
return self.create_new()

Some files were not shown because too many files have changed in this diff Show More