Fix #4049. New basic "regenerate occurrence name" operator.

This commit is contained in:
Dion Moult
2023-11-29 17:36:59 +11:00
parent fdcb705551
commit 962b8fac67
6 changed files with 25 additions and 0 deletions
+4
View File
@@ -59,6 +59,10 @@ def name_callback(obj, data):
if not obj.BIMObjectProperties.ifc_definition_id: if not obj.BIMObjectProperties.ifc_definition_id:
return return
if obj.BIMObjectProperties.is_renaming:
obj.BIMObjectProperties.is_renaming = False
return
element = IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id) element = IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id)
if "/" in obj.name: if "/" in obj.name:
object_name = obj.name object_name = obj.name
@@ -22,6 +22,7 @@ from . import ui, prop, operator
classes = ( classes = (
operator.AddType, operator.AddType,
operator.AssignType, operator.AssignType,
operator.AutoRenameOccurrences,
operator.DisableEditingType, operator.DisableEditingType,
operator.DuplicateType, operator.DuplicateType,
operator.EnableEditingType, operator.EnableEditingType,
@@ -498,6 +498,22 @@ class RenameType(bpy.types.Operator, tool.Ifc.Operator):
self.layout.prop(self, "name") self.layout.prop(self, "name")
class AutoRenameOccurrences(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.auto_rename_occurrences"
bl_label = "Auto Rename Occurrences"
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
obj = context.active_object
element_type = tool.Ifc.get_entity(obj)
if element_type and element_type.is_a("IfcTypeObject"):
for occurrence in ifcopenshell.util.element.get_types(element_type):
obj = tool.Ifc.get_object(occurrence)
occurrence.Name = tool.Model.generate_occurrence_name(element_type, occurrence.is_a())
if obj:
tool.Root.set_object_name(obj, occurrence)
class DuplicateType(bpy.types.Operator, tool.Ifc.Operator): class DuplicateType(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.duplicate_type" bl_idname = "bim.duplicate_type"
bl_label = "Duplicate Type" bl_label = "Duplicate Type"
@@ -64,6 +64,7 @@ class BIM_PT_type(Panel):
select_type_objects_row.enabled = int(TypeData.data["total_instances"]) > 0 select_type_objects_row.enabled = int(TypeData.data["total_instances"]) > 0
op = row.operator("bim.duplicate_type", icon="DUPLICATE", text="") op = row.operator("bim.duplicate_type", icon="DUPLICATE", text="")
op.element = context.active_object.BIMObjectProperties.ifc_definition_id op.element = context.active_object.BIMObjectProperties.ifc_definition_id
row.operator("bim.auto_rename_occurrences", icon="ITALIC", text="")
def draw_product_ui(self, context): def draw_product_ui(self, context):
layout = self.layout layout = self.layout
+1
View File
@@ -425,6 +425,7 @@ class BIMObjectProperties(PropertyGroup):
default="NONE", default="NONE",
) )
is_reassigning_class: BoolProperty(name="Is Reassigning Class") is_reassigning_class: BoolProperty(name="Is Reassigning Class")
is_renaming: BoolProperty(name="Is Renaming", default=False)
location_checksum: StringProperty(name="Location Checksum") location_checksum: StringProperty(name="Location Checksum")
rotation_checksum: StringProperty(name="Rotation Checksum") rotation_checksum: StringProperty(name="Rotation Checksum")
+2
View File
@@ -214,5 +214,7 @@ class Root(blenderbim.core.tool.Root):
@classmethod @classmethod
def set_object_name(cls, obj, element): def set_object_name(cls, obj, element):
# This disables the Blender name event handler
obj.BIMObjectProperties.is_renaming = True
name = getattr(element, "Name", getattr(element, "AxisTag", None)) name = getattr(element, "Name", getattr(element, "AxisTag", None))
obj.name = "{}/{}".format(element.is_a(), name or "Unnamed") obj.name = "{}/{}".format(element.is_a(), name or "Unnamed")