From 44e4ee70ae3997e114e6a683c128c2ae8c60faf7 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 29 Jan 2022 15:45:45 +1100 Subject: [PATCH] Removing sheets now works in IFC. See #1153. --- .../blenderbim/bim/module/drawing/operator.py | 10 +++++----- src/blenderbim/blenderbim/bim/module/drawing/ui.py | 6 ++++-- src/blenderbim/blenderbim/core/drawing.py | 5 +++++ src/blenderbim/test/core/test_drawing.py | 7 +++++++ 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py index 0b554723ba..00117f34b8 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/operator.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/operator.py @@ -1048,16 +1048,16 @@ class EditVectorStyle(bpy.types.Operator): return {"FINISHED"} -class RemoveSheet(bpy.types.Operator): +class RemoveSheet(bpy.types.Operator, Operator): bl_idname = "bim.remove_sheet" bl_label = "Remove Sheet" bl_options = {"REGISTER", "UNDO"} index: bpy.props.IntProperty() - def execute(self, context): - props = context.scene.DocProperties - props.sheets.remove(self.index) - return {"FINISHED"} + def _execute(self, context): + self.props = context.scene.DocProperties + sheet = tool.Ifc.get().by_id(self.props.sheets[self.props.active_sheet_index].ifc_definition_id) + core.remove_sheet(tool.Ifc, tool.Drawing, sheet=sheet) class AddSchedule(bpy.types.Operator): diff --git a/src/blenderbim/blenderbim/bim/module/drawing/ui.py b/src/blenderbim/blenderbim/bim/module/drawing/ui.py index 289b563f16..57e1c347a4 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/ui.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/ui.py @@ -375,7 +375,9 @@ class BIM_UL_sheets(bpy.types.UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname): if item: row = layout.row(align=True) - row.label(text=item.identification or "X") - row.label(text=item.name or "Unnamed") + split1 = row.split(factor=0.2) + split1.label(text=item.identification or "X") + split2 = split1.split(factor=0.8) + split2.label(text=item.name or "Unnamed") else: layout.label(text="", translate=False) diff --git a/src/blenderbim/blenderbim/core/drawing.py b/src/blenderbim/blenderbim/core/drawing.py index 9ae46afcb8..83957651a6 100644 --- a/src/blenderbim/blenderbim/core/drawing.py +++ b/src/blenderbim/blenderbim/core/drawing.py @@ -82,3 +82,8 @@ def add_sheet(ifc, drawing, titleblock=None): def open_sheet(drawing, sheet=None): drawing.open_svg(drawing.get_sheet_filename(sheet)) + + +def remove_sheet(ifc, drawing, sheet=None): + ifc.run("document.remove_document", document=sheet) + drawing.import_sheets() diff --git a/src/blenderbim/test/core/test_drawing.py b/src/blenderbim/test/core/test_drawing.py index 2c12190730..aec03a03e8 100644 --- a/src/blenderbim/test/core/test_drawing.py +++ b/src/blenderbim/test/core/test_drawing.py @@ -117,3 +117,10 @@ class TestOpenSheet: drawing.get_sheet_filename("sheet").should_be_called().will_return("filename") drawing.open_svg("filename").should_be_called() subject.open_sheet(drawing, sheet="sheet") + + +class TestRemoveSheet: + def test_run(self, ifc, drawing): + ifc.run("document.remove_document", document="sheet").should_be_called() + drawing.import_sheets().should_be_called() + subject.remove_sheet(ifc, drawing, sheet="sheet")