Commit Graph

138 Commits

Author SHA1 Message Date
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 cce4e426c3 util.get_pset to support ifc2x3 material props 2024-09-05 17:13:41 +05:00
Andrej730 691815fd41 Tools for handling shared psets #5291
In IFC it's possible for a property set to be assigned to multiple elements and which may lead to confusing behaviour when you edit a pset on one element and other element seems to get edited too.

Which makes it worse is that that it is possible that some software is might be doing this unintentionally when exporting IFC (as some sort of optimization as storing 1 is more optimal than n copies of it).

So now there are some tools in Bonsai and in IfcOpenShell to handle the shared psest:

1) Indication that property is shared - https://imgur.com/a/9dd3jST (similar to how Blender indicates ID data-block users). You can click on it to "unshare" the pset - a new copy for the pset will be created and it's going to be linked only to the active object.

2) api pset.unshare_pset method that does the same. And util.element.get_elements_using_pset method that encapsulates schema differences and different approaches for occurrences/types.

3) ifcpatch recipe 'UnsharePsets' that's making all property sets in the IFC file to have just 1 element that's using them. You can limit the affected elements by providing query.

ifcpatch recipe is also available in Bonsai - https://i.imgur.com/aOCx7HI.png
2024-09-04 18:51:06 +05:00
Dion Moult 521b0ab58d Fix #5271. Prevent duplicate entries when getting a decomposition. 2024-09-02 17:35:49 +10:00
Andrej730 1c3cf44122 get_referenced_elements to support IfcExternalInformation 2024-08-26 17:15:44 +05:00
Andrej730 d5613e0e26 typing 2024-06-26 17:06:30 +05:00
Andrej730 f364643d7e fix assigning material usages / reloading reprs after c4ae9578e #4843 2024-06-25 18:30:52 +05:00
Dion Moult ac58e6b8b2 Minor fix to new collection organisation for drawings 2024-06-24 18:21:06 +10:00
Andrej730 a834e5b4cd element.get_type doc note 2024-06-21 17:50:22 +05:00
Andrej730 d443c5e2a6 element.get_type - check schema explicitly for a small optimization
Previously if product had no types it would still run through all element.IsDefinedBy and check if they are IfcRelDefinesByType even if it's not IFC2X3.
2024-06-21 17:49:02 +05:00
Andrej730 db98f13982 typing 2024-06-07 17:15:52 +05:00
Dion Moult 60ae4e80ce New get_contained util.element function 2024-06-05 13:04:50 +10:00
Andrej730 70091aa28b typing 2024-06-03 17:44:04 +05:00
Dion Moult 0f9ea1e1e7 New utility functions to get parent in spatial hierarchy, filled void, and voided element 2024-06-01 15:09:05 +10:00
Andrej730 45a1655485 typing 2024-05-29 18:00:44 +05:00
Dion Moult 02cae9c7c2 Continue to revise optimisation of remove_deep to fix failing tests after a8729933 2024-05-23 22:54:19 +10:00
Dion Moult a8729933af Optimise remove_deep, which can make removing lots of elements 100x faster in scripts. 2024-05-23 20:15:09 +10:00
Dion Moult 69c197c1a4 get_psets utility now defaults to merging duplicate psets instead of overriding
This behaviour is more comprehensive for broken data and now consistent for types and materials.
2024-05-22 08:12:38 +10:00
Andrej730 3884403231 typing 2024-05-16 18:14:06 +05:00
Andrej730 bb8e84e5ec typing 2024-05-15 17:18:33 +05:00
Andrej730 1e630ede08 ifc2x3 tests 2024-05-10 19:18:09 +05:00
Andrej730 cbf04546b8 fix many implicit ifcopenshell.guid imports
a bit related to 10d30b0de
2024-05-08 18:18:02 +05:00
Dion Moult 93639e9e50 Even more cleaning of documentation references 2024-05-07 19:08:13 +10:00
Dion Moult 89c4cbeb05 Drop support for Python 2. 2024-05-07 12:17:46 +10:00
Andrej730 8dde98f543 fix #4592 (after 0da3270)
Before IFC4 Shape Aspects counldn't be part of IfcRepresentationMap
2024-04-29 15:22:26 +05:00
Andrej730 ff76850a54 ifcopenshell.util.element.get_structure_referenced_elements 2024-04-15 17:24:31 +05:00
Andrej730 75c854da01 ifcopenshell.util.get_referenced_elements 2024-04-15 17:21:10 +05:00
Dion Moult 8a62558575 Fix #4484. Clarify inheritance rules of predefined types. 2024-04-15 09:27:58 +10:00
Andrej730 fa0dbac914 new util method ifcopenshell.util.element.get_groups 2024-04-11 17:50:30 +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
Andrej730 37a33d62d5 further ifcopenshell.util.element optimization
and readibility for props addressed by the index
2024-04-10 18:45:37 +05:00
Andrej730 13c6fdd3c6 maintain verbosity getting complex property subproperties 2024-04-10 18:45:36 +05:00
Andrej730 e69597f72b typing 2024-04-10 18:45:36 +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 153389fe4a ifcopenshell.util.element optimization
Tried to reduce amount of IFC attributes retrieved by reusing already retrieved values.

E.g. previously get_nest() was retrieving same attribute 3 times on each call, now it does it only once and it's 2 times faster (2.4 ms -> 1.2 ms).
2024-04-09 18:36:55 +05:00
Andrej730 d1bcec7a6a typing 2024-04-09 18:33:25 +05:00
Dion Moult ccfe7ab80a Optimise property / quantity checks for IDS and other purposes 2024-03-27 16:09:13 +11:00
Andrej730 f20fd3357f typing 2024-03-14 14:50:34 +05:00
Andrej730 4d23706145 more typing 2024-03-11 15:15:17 +05:00
Andrej730 602e18a262 promote get_shape_aspects to util.element method 2024-02-19 18:08:18 +05:00
Andrej730 352321364c fix couple building docs errors / warnings 2024-01-24 16:38:53 +05:00
Dion Moult 000245c26c Nesting collections only generate for element nesting, not port nesting 2023-12-14 16:50:56 +11:00
Dion Moult 7c89d072e2 Fix #4086. Add support for non predefined bSDD pset and qto values. 2023-12-08 15:07:46 +11:00
Dion Moult 1b35ea122e Implement support for managing nest hosts and components. 2023-12-07 13:19:29 +11:00
Dion Moult 229c7285c2 Add support for loading nested elements and consider nesting for indirect spatial containment. 2023-11-20 16:57:38 +11:00
Dion Moult 7c694e5b3e Fix #3951. mats selector now supports IfcMaterialList. 2023-11-01 22:48:31 +11:00
Dion Moult 7f7f353131 Disable batching for removal as it doesn't seem to help mostly from experience. Still testing. 2023-10-31 12:31:05 +11: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 dd70b09fb1 Representation items panel now shows styles and layers 2023-10-12 22:56:36 +11:00
Andrej730 3faaee80ec copy_deep to always pass exclude_callback to the recursion
It wasn't passing the exclude_callback if attribute of the copied element wasn't a tuple, resulting in duplicated named profiles in case if you'd copy a IfcBooleanClippingResult #3810

For example, how copy_deep of IfcProductDefinitionShape with boolean clipping previously would work:
V IfcShapeRepresentation - copied with exlude_callback (part of .Representations[])
V IfcBooleanClippingResult - copied with exlude_callback (part of .Items[])
X IfcExtrudedAreaSolid - copied without exlude_callback becuase it's part of .FirstOperand (not an array) and we have IfcIShapeProfileDef duplicated

Case without booleanclippings:
V IfcShapeRepresentation - copied with exlude_callback (part of .Representations[])
V IfcExtrudedAreaSolid - copied with exlude_callback, since it's part of .Items[], IfcIShapeProfileDef not duplicated
2023-09-29 09:29:25 +05:00