diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py index 1d5e751062f..f11837dba4e 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/operator.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/operator.py @@ -2373,6 +2373,7 @@ def _execute(self, context): if not filepath.is_file(): sheet_name = f"{sheet_prop.identification} - {sheet_prop.name}" sheets_not_found.append(f'"{sheet_name}" - {document_uri}') + core.regenerate_sheet(tool.Drawing, sheet) if sheets_not_found: self.report({"ERROR"}, "Some sheets svg files are missing:\n" + "\n".join(sheets_not_found)) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py index 736d8efbe5b..21220f39711 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py @@ -93,7 +93,7 @@ def draw_underlay(self, image): def setup_drawing_resource_paths(self, element): pset = ifcopenshell.util.element.get_pset(element, "EPset_Drawing") - for resource in ("Stylesheet", "Markers", "Symbols", "Patterns"): + for resource in ("Stylesheet", "Markers", "Symbols", "Patterns", "ShadingStyles"): resource_path = pset.get(resource) if not resource_path: self.resource_paths[resource] = None diff --git a/src/blenderbim/blenderbim/core/drawing.py b/src/blenderbim/blenderbim/core/drawing.py index cccdc16ad10..36cec23daa6 100644 --- a/src/blenderbim/blenderbim/core/drawing.py +++ b/src/blenderbim/blenderbim/core/drawing.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU General Public License # along with BlenderBIM Add-on. If not, see . +from pathlib import Path + def enable_editing_text(drawing, obj=None): drawing.enable_editing_text(obj) @@ -89,6 +91,12 @@ def add_sheet(ifc, drawing, titleblock=None): drawing.import_sheets() +def regenerate_sheet(drawing, sheet=None): + titleblock_uri = drawing.get_document_uri(sheet, "TITLEBLOCK") + drawing.create_svg_sheet(sheet, drawing.sanitise_filename(Path(titleblock_uri).stem)) + drawing.add_drawings(sheet) + + def open_sheet(drawing, sheet=None): drawing.open_layout_svg(drawing.get_document_uri(sheet, "LAYOUT")) diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index d1d7e9649a2..a5d67e5aedb 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -247,6 +247,21 @@ def create_svg_sheet(cls, document, titleblock): sheet_builder.create(uri, titleblock) return uri + @classmethod + def add_drawings(cls, sheet): + sheet_builder = sheeter.SheetBuilder() + sheet_builder.data_dir = bpy.context.scene.BIMProperties.data_dir + sheet_reference = None + drawing_names = [] + for reference in cls.get_document_references(sheet): + if reference.Description == "LAYOUT": + sheet_reference = reference + elif reference.Description == "DRAWING": + drawing_names.append(Path(reference.Location).stem) + for annotation in [e for e in tool.Ifc.get().by_type("IfcAnnotation") if e.ObjectType == "DRAWING"]: + if annotation.Name in drawing_names: + sheet_builder.add_drawing(sheet_reference, annotation, sheet) + @classmethod def delete_collection(cls, collection): bpy.data.collections.remove(collection, do_unlink=True)