Andrej730
7370d07db1
ruff: sort imports
2026-08-10 16:54:37 +05:00
Petru Conduraru
5541bad23f
ifcopenshell.util.element: dedupe SET-typed attributes in replace_attribute
...
replace_attribute() rewrites references inside aggregate attributes via
element.walk(), but never checked whether the replacement value was
already present elsewhere in the same aggregate. For an EXPRESS SET
(e.g. IfcProject.RepresentationContexts, IfcRelAggregates.RelatedObjects)
this can leave the same reference listed twice, which is invalid IFC.
LIST and BAG aggregates legitimately allow duplicates, so a blanket dedup
would be wrong; only SET-typed attributes are deduplicated, determined at
runtime from the schema declaration (IfcOpenShell#8706 review comment).
The SET/LIST/BAG check is cached per (schema, class, attribute index), and
the dedup pass itself only runs when a cheap linear pre-check finds the
replacement value already present in the aggregate, so the common case
(no duplicate produced) pays only that pre-check, not a hash-set rebuild.
Benchmarked against a 23MB (431k entities) and a 104MB (2.4M entities) IFC
model against a large SET attribute: worst case adds well under 1ms per
call; the realistic case (merging duplicate contexts, matching the PR
#8706 scenario) shows no measurable regression.
Fixes the root cause flagged in IfcOpenShell#8706 (Moult), obviating the
need for MergeDuplicateContexts' own manual aggregate-dedup pass for that
scenario.
Generated with the assistance of an AI coding tool.
(cherry picked from commit 8c434b7167 )
2026-07-25 23:18:32 +10:00
Andrej730
a3efa7e9ee
util.element - fix IfcComplexProperty KeyError when verbose=True ( #7921 )
...
Introduced by me in b77df1892
2026-04-10 19:11:42 +05:00
Dion Moult
d0f20371bd
Add feature to get parent of a particular IFC class
2026-03-20 23:10:00 +11:00
Andrej730
13be6ccd45
Sort imports
2025-12-19 18:53:14 +05: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
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
Andrej730
fcb263f59a
util.element.get_controls
2025-09-09 15:42:31 +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
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
20e1fc2618
Fix bug in get_container not passing specified ifc_class to the parent #6155
2025-02-14 17:49:51 +05: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
Andrej730
744487c786
fix test_element after 7b62b03
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
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
4b39631b98
get_element_by_style to support IfcFillAreaStyleTiles
2024-10-01 15:38:46 +05:00
Andrej730
e040dc4562
get_elements_by_style to support curve styles used in IfcFillAreaStyleHatching
2024-10-01 15:38:45 +05:00
Andrej730
e224bfd19f
Fix error showing material/profile psets in bbim after 691815fd41
2024-09-07 11:22:43 +05:00
Andrej730
a867e72fd3
rename get_elements_using_pset -> get_elements_by_pset for consistency
...
To be consistent with other get_elements_by_xxx methods.
2024-09-06 11:04:04 +05:00
Andrej730
0ab70827e5
pset.assign_pset, pset.unassign_pset
2024-09-04 18:51:07 +05:00
Andrej730
1c3cf44122
get_referenced_elements to support IfcExternalInformation
2024-08-26 17:15:44 +05:00
Dion Moult
a6286293d8
Run black on IOS-Python
2024-07-26 12:00:57 +10:00
Dion Moult
07060fc769
Replace all ifcopenshell.api.run with ifcopenshell.api static functions.
2024-06-28 12:36:31 +10:00
Andrej730
cbf04546b8
fix many implicit ifcopenshell.guid imports
...
a bit related to 10d30b0de
2024-05-08 18:18:02 +05:00
Andrej730
8ac0d22a95
spatial.reference_structure - support batching #4474
2024-04-16 15:17:48 +05:00
Andrej730
96b0a241d9
add tests for get_referenced_structures
2024-04-15 17:24:31 +05:00
Andrej730
ff76850a54
ifcopenshell.util.element.get_structure_referenced_elements
2024-04-15 17:24:31 +05:00
Andrej730
097f44284f
document.assign_document - support batching #4474
2024-04-15 17:24:31 +05:00
Andrej730
81dcad6a14
library.assign_reference - support batching #4474
2024-04-15 17:24:31 +05:00
Andrej730
03af1013a0
add tests for util.element.get_referenced_elements
2024-04-15 17:23:25 +05:00
Andrej730
919dcbe2d9
black format
2024-04-15 14:47:32 +05:00
Dion Moult
8a62558575
Fix #4484 . Clarify inheritance rules of predefined types.
2024-04-15 09:27:58 +10:00
Andrej730
59cc9c0a16
material.assign_material - support batching #4474
2024-04-12 17:41:37 +05:00
Andrej730
fa0dbac914
new util method ifcopenshell.util.element.get_groups
2024-04-11 17:50:30 +05:00
Andrej730
df4943205a
type.assign_type - support batching #4474
2024-04-10 18:58:44 +05:00
Andrej730
90bb2f0e16
unify tests for ifc4 and ifc2x3
2024-04-10 18:45:37 +05:00
Andrej730
81ff9c168e
nest.assign_object to support ifc2x3
2024-04-10 18:45:37 +05:00
Andrej730
239ab5b587
get_pset() fix bug getting inherited psets with psets_only/qtos_only = True
2024-04-10 18:45:37 +05:00
Dion Moult
bee1e21f0e
Fix #4490 . Fix fundamental bug where get_pset would return none for inherited props with a boolean False value.
2024-04-10 12:57:52 +10:00
Andrej730
965a45d65b
ifcopenshell.util.element.get_nest test
2024-04-09 18:33:26 +05:00
Andrej730
cd11d2de27
aggregate.assign_object - support batching #4474
2024-04-08 17:49:48 +05:00
Andrej730
7ecec973dd
layer.assign_layer - support batching #4474
2024-04-08 14:51:07 +05:00
Andrej730
109787d869
spatial.assign_container - support batching #4474
2024-04-05 17:28:30 +05:00
Andrej730
602e18a262
promote get_shape_aspects to util.element method
2024-02-19 18:08:18 +05:00
Dion Moult
58be92d3fc
New verbose option in util get_pset(s) which lets you get ID and class for complex processing.
2023-10-15 08:57:37 +11:00
Dion Moult
ed4abacd1e
Fix #3578 . Support querying surface styles in tools like IfcCSV.
2023-08-14 11:55:15 +10:00
Dion Moult
a1caef5b4f
See #3334 . Fix some get_pset implementation errors in 64516a1
2023-07-05 10:37:13 +10:00