From 6bc05c5bdc6bc145d99de539af7fd7c021c60e37 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 28 Aug 2020 23:16:25 +1000 Subject: [PATCH] Add support for custom titleblocks, and provide presets for A1, A2, A3 sizes --- .../blenderbim/bim/data/sheets/.gitkeep | 0 .../blenderbim/bim/data/sheets/SHEET.svg | 4 - .../{titleblock.svg => titleblocks/A1.svg} | 0 .../bim/data/templates/titleblocks/A2.svg | 203 +++++++++++++++++ .../bim/data/templates/titleblocks/A3.svg | 207 ++++++++++++++++++ .../blenderbim/bim/operator.py | 2 +- src/ifcblenderexport/blenderbim/bim/prop.py | 18 ++ .../blenderbim/bim/sheeter.py | 19 +- src/ifcblenderexport/blenderbim/bim/ui.py | 2 +- 9 files changed, 442 insertions(+), 13 deletions(-) create mode 100644 src/ifcblenderexport/blenderbim/bim/data/sheets/.gitkeep delete mode 100644 src/ifcblenderexport/blenderbim/bim/data/sheets/SHEET.svg rename src/ifcblenderexport/blenderbim/bim/data/templates/{titleblock.svg => titleblocks/A1.svg} (100%) create mode 100644 src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A2.svg create mode 100644 src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A3.svg diff --git a/src/ifcblenderexport/blenderbim/bim/data/sheets/.gitkeep b/src/ifcblenderexport/blenderbim/bim/data/sheets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/ifcblenderexport/blenderbim/bim/data/sheets/SHEET.svg b/src/ifcblenderexport/blenderbim/bim/data/sheets/SHEET.svg deleted file mode 100644 index 1650be34e7..0000000000 --- a/src/ifcblenderexport/blenderbim/bim/data/sheets/SHEET.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/ifcblenderexport/blenderbim/bim/data/templates/titleblock.svg b/src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A1.svg similarity index 100% rename from src/ifcblenderexport/blenderbim/bim/data/templates/titleblock.svg rename to src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A1.svg diff --git a/src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A2.svg b/src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A2.svg new file mode 100644 index 0000000000..f450a15cfb --- /dev/null +++ b/src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A2.svg @@ -0,0 +1,203 @@ + + + + + + + image/svg+xml + + + + + + /home/dion/Projects/IfcOpenShell/src/ifcblenderexport/titleblock.dxf - scale = 1.000000, origin = (0.000000, 0.000000), method = manual + + + REV. NO. + + + + + + + + + + + + + DESCRIPTION + AUTHOR + DATE + + + + DRAWING NUMBER + REV + {{revision}} + {{number}} + + + + + + diff --git a/src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A3.svg b/src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A3.svg new file mode 100644 index 0000000000..0f570cc865 --- /dev/null +++ b/src/ifcblenderexport/blenderbim/bim/data/templates/titleblocks/A3.svg @@ -0,0 +1,207 @@ + + + + + + + image/svg+xml + + + + + + /home/dion/Projects/IfcOpenShell/src/ifcblenderexport/titleblock.dxf - scale = 1.000000, origin = (0.000000, 0.000000), method = manual + + + REV. NO. + + + + + + + + + + + + + DESCRIPTION + AUTHOR + DATE + + + + + DRAWING NUMBER + REV + {{revision}} + {{number}} + + + + + + + diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index 0ef10c6478..f9e34c5eb3 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -2221,7 +2221,7 @@ class AddSheet(bpy.types.Operator): new.name = '{} - SHEET'.format(len(bpy.context.scene.DocProperties.sheets)) sheet_builder = sheeter.SheetBuilder() sheet_builder.data_dir = bpy.context.scene.BIMProperties.data_dir - sheet_builder.create(new.name) + sheet_builder.create(new.name, bpy.context.scene.DocProperties.titleblock) return {'FINISHED'} diff --git a/src/ifcblenderexport/blenderbim/bim/prop.py b/src/ifcblenderexport/blenderbim/bim/prop.py index eeaad15ca9..18d888450e 100644 --- a/src/ifcblenderexport/blenderbim/bim/prop.py +++ b/src/ifcblenderexport/blenderbim/bim/prop.py @@ -32,6 +32,7 @@ types_enum = [] availablematerialpsets_enum = [] ifcpatchrecipes_enum = [] featuresfiles_enum = [] +titleblocks_enum = [] scenarios_enum = [] psetnames_enum = [] psetfiles_enum = [] @@ -291,6 +292,22 @@ def refreshFeaturesFiles(self, context): getFeaturesFiles(self, context) +def getTitleblocks(self, context): + global titleblocks_enum + if len(titleblocks_enum) < 1: + titleblocks_enum.clear() + for filename in Path(os.path.join(context.scene.BIMProperties.data_dir, 'templates', 'titleblocks')).glob('*.svg'): + f = str(filename.stem) + titleblocks_enum.append((f, f, '')) + return titleblocks_enum + + +def refreshTitleblocks(self, context): + global titleblocks_enum + titleblocks_enum.clear() + getTitleblocks(self, context) + + def getScenarios(self, context): global scenarios_enum if len(scenarios_enum) < 1: @@ -515,6 +532,7 @@ class DocProperties(PropertyGroup): active_drawing_index: IntProperty(name='Active Drawing Index') schedules: CollectionProperty(name='Schedules', type=Schedule) active_schedule_index: IntProperty(name='Active Schedule Index') + titleblock: EnumProperty(items=getTitleblocks, name="Titleblock", update=refreshTitleblocks) sheets: CollectionProperty(name='Sheets', type=Sheet) active_sheet_index: IntProperty(name='Active Sheet Index') ifc_files: CollectionProperty(name='IFCs', type=StrProperty) diff --git a/src/ifcblenderexport/blenderbim/bim/sheeter.py b/src/ifcblenderexport/blenderbim/bim/sheeter.py index 7fffcd9a76..b1439fcb93 100644 --- a/src/ifcblenderexport/blenderbim/bim/sheeter.py +++ b/src/ifcblenderexport/blenderbim/bim/sheeter.py @@ -11,25 +11,30 @@ class SheetBuilder: self.data_dir = None self.scale = 'NTS' - def create(self, name): + def create(self, name, titleblock_name): sheet_path = '{}sheets/{}.svg'.format(self.data_dir, name) root = ET.Element('svg') root.attrib['xmlns'] = 'http://www.w3.org/2000/svg' root.attrib['xmlns:xlink'] = 'http://www.w3.org/1999/xlink' root.attrib['id'] = 'root' root.attrib['version'] = '1.1' - root.attrib['width'] = '841mm' - root.attrib['height'] = '594mm' - root.attrib['viewBox'] = '0 0 841 594' + view_root = ET.parse( + os.path.join(self.data_dir, 'templates', 'titleblocks', titleblock_name + '.svg')).getroot() + view_width = self.convert_to_mm(view_root.attrib.get('width')) + view_height = self.convert_to_mm(view_root.attrib.get('height')) view = ET.SubElement(root, 'g') view.attrib['data-type'] = 'titleblock' titleblock = ET.SubElement(view, 'image') - titleblock.attrib['xlink:href'] = '../templates/titleblock.svg' + titleblock.attrib['xlink:href'] = '../templates/titleblocks/' + titleblock_name + '.svg' titleblock.attrib['x'] = '0' titleblock.attrib['y'] = '0' - titleblock.attrib['width'] = '841' - titleblock.attrib['height'] = '594' + titleblock.attrib['width'] = str(view_width) + titleblock.attrib['height'] = str(view_height) + + root.attrib['width'] = '{}mm'.format(view_width) + root.attrib['height'] = '{}mm'.format(view_height) + root.attrib['viewBox'] = '0 0 {} {}'.format(view_width, view_height) with open(sheet_path, 'w') as f: f.write(minidom.parseString(ET.tostring(root)).toprettyxml(indent=' ')) diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index b0fac99466..54e4d94c29 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -785,10 +785,10 @@ class BIM_PT_sheets(Panel): def draw(self, context): layout = self.layout - layout.use_property_split = True props = bpy.context.scene.DocProperties row = layout.row(align=True) + row.prop(props, 'titleblock', text='') row.operator('bim.add_sheet') if props.sheets: