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
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.
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.
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
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"])
Mentioned in #5604. Since IfcSurfaceStyle.Side is used during representation generation, we need to regenerate them if the value was changed. Previously it would require manual update / project reload.