diff --git a/src/blenderbim/blenderbim/bim/module/model/ui.py b/src/blenderbim/blenderbim/bim/module/model/ui.py index 92b456cc4e..a3e689630b 100644 --- a/src/blenderbim/blenderbim/bim/module/model/ui.py +++ b/src/blenderbim/blenderbim/bim/module/model/ui.py @@ -41,7 +41,7 @@ from blenderbim.bim.helper import prop_with_search class LaunchTypeManager(bpy.types.Operator): bl_idname = "bim.launch_type_manager" bl_label = "Launch Type Manager" - bl_options = {"REGISTER"} + bl_options = {"REGISTER", "UNDO"} bl_description = "Display all available Construction Types to add new instances" def execute(self, context): @@ -127,6 +127,8 @@ class LaunchTypeManager(bpy.types.Operator): op.ifc_class = relating_type["ifc_class"] op.relating_type_id = relating_type["id"] + op = row.operator("bim.rename_type", icon="GREASEPENCIL", text="") + op.element = relating_type["id"] op = row.operator("bim.select_type", icon="OBJECT_DATA", text="") op.relating_type = relating_type["id"] op = row.operator("bim.duplicate_type", icon="DUPLICATE", text="") diff --git a/src/blenderbim/blenderbim/bim/module/type/__init__.py b/src/blenderbim/blenderbim/bim/module/type/__init__.py index 50accd37ea..d52d470062 100644 --- a/src/blenderbim/blenderbim/bim/module/type/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/type/__init__.py @@ -27,6 +27,7 @@ classes = ( operator.EnableEditingType, operator.PurgeUnusedTypes, operator.RemoveType, + operator.RenameType, operator.SelectSimilarType, operator.SelectType, operator.SelectTypeObjects, diff --git a/src/blenderbim/blenderbim/bim/module/type/operator.py b/src/blenderbim/blenderbim/bim/module/type/operator.py index fda53d560a..921543e5ba 100644 --- a/src/blenderbim/blenderbim/bim/module/type/operator.py +++ b/src/blenderbim/blenderbim/bim/module/type/operator.py @@ -446,7 +446,29 @@ class RemoveType(bpy.types.Operator, tool.Ifc.Operator): if obj: tool.Ifc.unlink(obj=obj) bpy.data.objects.remove(obj) - return {"FINISHED"} + + +class RenameType(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.rename_type" + bl_label = "Rename Type" + bl_options = {"REGISTER", "UNDO"} + element: bpy.props.IntProperty() + name: bpy.props.StringProperty(name="Name") + + def _execute(self, context): + element = tool.Ifc.get().by_id(self.element) + obj = tool.Ifc.get_object(element) + element.Name = self.name + if obj: + tool.Root.set_object_name(obj, element) + + def invoke(self, context, event): + element = tool.Ifc.get().by_id(self.element) + self.name = element.Name or "Unnamed" + return context.window_manager.invoke_props_dialog(self) + + def draw(self, context): + self.layout.prop(self, "name") class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/blenderbim/blenderbim/tool/root.py b/src/blenderbim/blenderbim/tool/root.py index eee7eb53c5..b7424ff3bc 100644 --- a/src/blenderbim/blenderbim/tool/root.py +++ b/src/blenderbim/blenderbim/tool/root.py @@ -161,8 +161,5 @@ class Root(blenderbim.core.tool.Root): @classmethod def set_object_name(cls, obj, element): - name = obj.name - if "/" in name and name.split("/")[0][0:3] == "Ifc": - name = "/".join(name.split("/")[1:]) - name = "{}/{}".format(element.is_a(), name) - obj.name = name + name = getattr(element, "Name", getattr(element, "AxisTag", None)) + obj.name = "{}/{}".format(element.is_a(), name or "Unnamed") diff --git a/src/blenderbim/test/core/test_drawing.py b/src/blenderbim/test/core/test_drawing.py index 2cadacdc26..ba839a1869 100644 --- a/src/blenderbim/test/core/test_drawing.py +++ b/src/blenderbim/test/core/test_drawing.py @@ -492,6 +492,9 @@ class TestUpdateDrawingName: drawing.does_file_exist("absolute_layout_uri").should_be_called().will_return(True) drawing.update_embedded_svg_location("absolute_layout_uri", "old_location", "new_location").should_be_called() + drawing.is_editing_sheets().should_be_called().will_return(True) + drawing.import_sheets().should_be_called() + subject.update_drawing_name(ifc, drawing, drawing="drawing", name="name")