diff --git a/src/ifcblenderexport/blenderbim/bim/handler.py b/src/ifcblenderexport/blenderbim/bim/handler.py index 7af2edb706..3f874c87bc 100644 --- a/src/ifcblenderexport/blenderbim/bim/handler.py +++ b/src/ifcblenderexport/blenderbim/bim/handler.py @@ -3,6 +3,7 @@ import json import blenderbim.bim.decoration as decoration from bpy.app.handlers import persistent from blenderbim.bim.ifc import IfcStore +from blenderbim.bim.module.attribute.data import Data as AttributeData def mode_callback(obj, data): @@ -19,6 +20,17 @@ def mode_callback(obj, data): bpy.ops.bim.update_mesh_representation(obj=obj.name) +def name_callback(obj, data): + # Blender material names are up to 63 UTF-8 bytes + if not obj.BIMObjectProperties.ifc_definition_id or "/" not in obj.name or len(bytes(obj.name, "utf-8")) >= 63: + return + element = IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id) + if not element.is_a("IfcRoot"): + return + element.Name = "/".join(obj.name.split("/")[1:]) + AttributeData.load(obj.BIMObjectProperties.ifc_definition_id) + + def subscribe_to(object, data_path, callback): subscribe_to = object.path_resolve(data_path, False) bpy.msgbus.subscribe_rna( diff --git a/src/ifcblenderexport/blenderbim/bim/ifc.py b/src/ifcblenderexport/blenderbim/bim/ifc.py index dc2fa476de..b58c3a388e 100644 --- a/src/ifcblenderexport/blenderbim/bim/ifc.py +++ b/src/ifcblenderexport/blenderbim/bim/ifc.py @@ -38,6 +38,7 @@ class IfcStore: IfcStore.guid_map[element.GlobalId] = obj obj.BIMObjectProperties.ifc_definition_id = element.id() blenderbim.bim.handler.subscribe_to(obj, "mode", blenderbim.bim.handler.mode_callback) + blenderbim.bim.handler.subscribe_to(obj, "name", blenderbim.bim.handler.name_callback) @staticmethod def unlink_element(element, obj=None):