diff --git a/src/ifcblenderexport/blenderbim/__init__.py b/src/ifcblenderexport/blenderbim/__init__.py index 454e7731d2..a6bd65b74b 100644 --- a/src/ifcblenderexport/blenderbim/__init__.py +++ b/src/ifcblenderexport/blenderbim/__init__.py @@ -86,6 +86,7 @@ if bpy is not None: operator.CreateView, operator.ActivateView, operator.ExecuteIfcDiff, + operator.AssignContext, prop.Subcontext, prop.BIMProperties, prop.DocProperties, diff --git a/src/ifcblenderexport/blenderbim/operator.py b/src/ifcblenderexport/blenderbim/operator.py index 290b03be1b..a4b289f724 100644 --- a/src/ifcblenderexport/blenderbim/operator.py +++ b/src/ifcblenderexport/blenderbim/operator.py @@ -947,6 +947,7 @@ class GenerateDigitalTwin(bpy.types.Operator): # Does absolutely nothing at all :D return {'FINISHED'} + class ActivateView(bpy.types.Operator): bl_idname = 'bim.activate_view' bl_label = 'Activate View' @@ -965,3 +966,32 @@ class ActivateView(bpy.types.Operator): bpy.context.view_layer.layer_collection.children['Views'].children[camera.users_collection[0].name].hide_viewport = False bpy.data.collections.get(camera.users_collection[0].name).hide_render = False return {'FINISHED'} + + +class AssignContext(bpy.types.Operator): + bl_idname = 'bim.assign_context' + bl_label = 'Assign Context' + + def execute(self, context): + if not self.is_mesh_context_sensitive(bpy.context.active_object.data.name): + bpy.context.active_object.data.name = '{}/{}/{}/{}'.format( + bpy.context.scene.BIMProperties.available_contexts, + bpy.context.scene.BIMProperties.available_subcontexts, + bpy.context.scene.BIMProperties.available_target_views, + bpy.context.active_object.data.name + ) + else: + bpy.context.active_object.data.name = '{}/{}/{}/{}'.format( + bpy.context.scene.BIMProperties.available_contexts, + bpy.context.scene.BIMProperties.available_subcontexts, + bpy.context.scene.BIMProperties.available_target_views, + bpy.context.active_object.data.name.split('/')[3] + ) + return {'FINISHED'} + + def is_mesh_context_sensitive(self, name): + return '/' in name \ + and ( \ + name[0:6] == 'Model/' \ + or name[0:5] == 'Plan/' \ + ) diff --git a/src/ifcblenderexport/blenderbim/prop.py b/src/ifcblenderexport/blenderbim/prop.py index 31dfa69ca0..da526a82d6 100644 --- a/src/ifcblenderexport/blenderbim/prop.py +++ b/src/ifcblenderexport/blenderbim/prop.py @@ -276,6 +276,7 @@ class BIMProperties(PropertyGroup): has_plan_context: BoolProperty(name="Has Plan Context", default=False) model_subcontexts: CollectionProperty(name='Model Subcontexts', type=Subcontext) plan_subcontexts: CollectionProperty(name='Plan Subcontexts', type=Subcontext) + available_contexts: EnumProperty(items=[('Model', 'Model', ''), ('Plan', 'Plan', '')], name="Available Contexts") available_subcontexts: EnumProperty(items=getSubcontexts, name="Available Subcontexts") available_target_views: EnumProperty(items=getTargetViews, name="Available Target Views") diff --git a/src/ifcblenderexport/blenderbim/ui.py b/src/ifcblenderexport/blenderbim/ui.py index 857f0e84f3..930fe269b7 100644 --- a/src/ifcblenderexport/blenderbim/ui.py +++ b/src/ifcblenderexport/blenderbim/ui.py @@ -95,6 +95,14 @@ class BIM_PT_mesh(Panel): return layout = self.layout props = context.active_object.data.BIMMeshProperties + + row = layout.row(align=True) + row.prop(bpy.context.scene.BIMProperties, 'available_contexts', text='') + row.prop(bpy.context.scene.BIMProperties, 'available_subcontexts', text='') + row.prop(bpy.context.scene.BIMProperties, 'available_target_views', text='') + row = layout.row() + row.operator('bim.assign_context') + row = layout.row() row.prop(props, 'is_wireframe') row = layout.row() @@ -271,9 +279,12 @@ class BIM_PT_context(Panel): for context in ['model', 'plan']: row = layout.row(align=True) - row.prop(props, 'has_{}_context'.format(context)) - layout.label(text="Geometric Representation Subcontexts:") + row.prop(props, f'has_{context}_context') + if not getattr(props, f'has_{context}_context'): + continue + + layout.label(text="Geometric Representation Subcontexts:") row = layout.row(align=True) row.prop(props, 'available_subcontexts', text='') row.prop(props, 'available_target_views', text='')