From 3e9fff6c198f04d7a90f1b82a89fd2f82d3ef731 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 23 Jun 2020 23:42:33 +1000 Subject: [PATCH] New feature to unassign/reassign IFC class easily --- .../blenderbim/bim/__init__.py | 1 + .../blenderbim/bim/operator.py | 21 +++++++++++- src/ifcblenderexport/blenderbim/bim/ui.py | 34 ++++++++++++------- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index d68222b6e1..50f3fa8f03 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -13,6 +13,7 @@ if bpy is not None: classes = ( operator.AssignClass, + operator.UnassignClass, operator.SelectClass, operator.SelectType, operator.SelectBcfFile, diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index 26b2c80d09..d9ea5532be 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -174,7 +174,7 @@ class AssignClass(bpy.types.Operator): for obj in objects: existing_class = None if '/' in obj.name \ - and obj.name[0:3] == 'Ifc': + and obj.name[0:3] == 'Ifc': existing_class = obj.name.split('/')[0] if existing_class: obj.name = '{}/{}'.format( @@ -200,6 +200,25 @@ class AssignClass(bpy.types.Operator): object_type.string_value = bpy.context.scene.BIMProperties.ifc_userdefined_type return {'FINISHED'} + +class UnassignClass(bpy.types.Operator): + bl_idname = 'bim.unassign_class' + bl_label = 'Unassign IFC Class' + object_name: bpy.props.StringProperty() + + def execute(self, context): + if self.object_name: + objects = [bpy.data.objects.get(self.object_name)] + else: + objects = bpy.context.selected_objects + for obj in objects: + existing_class = None + if '/' in obj.name \ + and obj.name[0:3] == 'Ifc': + obj.name = '/'.join(obj.name.split('/')[1:]) + return {'FINISHED'} + + class SelectClass(bpy.types.Operator): bl_idname = 'bim.select_class' bl_label = 'Select IFC Class' diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 2ff8943737..e47abfc68f 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -20,20 +20,26 @@ class BIM_PT_object(Panel): props = context.active_object.BIMObjectProperties bim_properties = context.scene.BIMProperties + row = layout.row() + row.prop(bim_properties, "ifc_product") + row = layout.row() + row.prop(bim_properties, "ifc_class") + if bim_properties.ifc_predefined_type: + row = layout.row() + row.prop(bim_properties, "ifc_predefined_type") + if bim_properties.ifc_predefined_type == 'USERDEFINED': + row = layout.row() + row.prop(bim_properties, "ifc_userdefined_type") + row = layout.row(align=True) if 'Ifc' not in context.active_object.name: - row = layout.row() - row.prop(bim_properties, "ifc_product") - row = layout.row() - row.prop(bim_properties, "ifc_class") - if bim_properties.ifc_predefined_type: - row = layout.row() - row.prop(bim_properties, "ifc_predefined_type") - if bim_properties.ifc_predefined_type == 'USERDEFINED': - row = layout.row() - row.prop(bim_properties, "ifc_userdefined_type") - row = layout.row() op = row.operator("bim.assign_class") - op.object_name = context.active_object.name + else: + op = row.operator("bim.assign_class", text='Reassign IFC Class') + op.object_name = context.active_object.name + op = row.operator("bim.unassign_class", icon='X', text='') + op.object_name = context.active_object.name + + if 'Ifc' not in context.active_object.name: return layout.label(text="Software Identity:") @@ -845,9 +851,11 @@ class BIM_PT_bim(Panel): if bim_properties.ifc_predefined_type == 'USERDEFINED': row = layout.row() row.prop(bim_properties, "ifc_userdefined_type") - row = layout.row() + row = layout.row(align=True) op = row.operator("bim.assign_class") op.object_name = '' + op = row.operator("bim.unassign_class", icon='X', text='') + op.object_name = '' row = layout.row(align=True) row.operator("bim.select_class")