diff --git a/src/blenderbim/blenderbim/bim/module/drawing/__init__.py b/src/blenderbim/blenderbim/bim/module/drawing/__init__.py index 6e0e9f80d2..c4d1fe70a1 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/__init__.py @@ -49,6 +49,7 @@ classes = ( operator.DisableEditingSheets, operator.DisableEditingText, operator.DuplicateDrawing, + operator.AssignSelectedObjectAsProduct, operator.EditAssignedProduct, operator.EditSheet, operator.EditText, diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py index 05f0aaf9c5..a8b43324f5 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/operator.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/operator.py @@ -2284,6 +2284,27 @@ class RemoveTextLiteral(bpy.types.Operator): return {"FINISHED"} +class AssignSelectedObjectAsProduct(bpy.types.Operator): + bl_idname = "bim.assign_selected_as_product" + bl_label = "Assign Selected Object As Product" + bl_options = {"REGISTER", "UNDO"} + + @classmethod + def poll(cls, context): + if len(context.selected_objects) != 2: + cls.poll_message_set({"ERROR"}, "2 objects need to be selected") + return False + return True + + def execute(self, context): + objs = context.selected_objects[:] + objs.remove(context.active_object) + other_selected_object = next(obj for obj in context.selected_objects if obj != context.active_object) + context.active_object.BIMAssignedProductProperties.relating_product = other_selected_object + bpy.ops.bim.edit_assigned_product() + return {"FINISHED"} + + class EditAssignedProduct(bpy.types.Operator, Operator): bl_idname = "bim.edit_assigned_product" bl_label = "Edit Text Product" diff --git a/src/blenderbim/blenderbim/bim/module/drawing/ui.py b/src/blenderbim/blenderbim/bim/module/drawing/ui.py index e051207dbc..8df63ba98e 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/ui.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/ui.py @@ -409,13 +409,16 @@ class BIM_PT_product_assignments(Panel): if props.is_editing_product: row = self.layout.row(align=True) row.prop(props, "relating_product", text="") + row.operator("bim.assign_selected_as_product", icon="OBJECT_DATA", text="") row.operator("bim.edit_assigned_product", icon="CHECKMARK", text="") row.operator("bim.disable_editing_assigned_product", icon="CANCEL", text="") else: row = self.layout.row(align=True) row.label(text=ProductAssignmentsData.data["relating_product"] or "No Relating Product", icon="OBJECT_DATA") row.operator("bim.enable_editing_assigned_product", icon="GREASEPENCIL", text="") - row.operator("bim.select_assigned_product", icon="RESTRICT_SELECT_OFF", text="") + col = row.column() + col.operator("bim.select_assigned_product", icon="RESTRICT_SELECT_OFF", text="") + col.enabled = bool(ProductAssignmentsData.data["relating_product"]) class BIM_PT_text(Panel):