From c5dd9a24cb2bdb7aec0ab65a8c280332074fa3e1 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 29 Aug 2020 10:28:34 +1000 Subject: [PATCH] Different drawings can now have different aspect ratios. Finally! --- src/ifcblenderexport/blenderbim/bim/__init__.py | 2 ++ src/ifcblenderexport/blenderbim/bim/operator.py | 17 +++++++++++++++++ src/ifcblenderexport/blenderbim/bim/prop.py | 2 ++ src/ifcblenderexport/blenderbim/bim/ui.py | 5 +++++ 4 files changed, 26 insertions(+) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index 576eb1e207..37a9019853 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -341,6 +341,7 @@ if bpy is not None: bpy.types.VIEW3D_MT_mesh_add.append(model_window.add_object_button) bpy.types.VIEW3D_MT_mesh_add.append(model_slab.add_object_button) bpy.types.VIEW3D_MT_mesh_add.append(model_opening.add_object_button) + bpy.app.handlers.depsgraph_update_pre.append(operator.depsgraph_update_pre_handler) def unregister(): for cls in reversed(classes): @@ -367,3 +368,4 @@ if bpy is not None: bpy.types.VIEW3D_MT_mesh_add.remove(model_window.add_object_button) bpy.types.VIEW3D_MT_mesh_add.remove(model_slab.add_object_button) bpy.types.VIEW3D_MT_mesh_add.remove(model_opening.add_object_button) + bpy.app.handlers.depsgraph_update_pre.remove(operator.depsgraph_update_pre_handler) diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index f9e34c5eb3..960200ac9d 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -25,6 +25,7 @@ from itertools import cycle from mathutils import Vector, Matrix, Euler from math import radians, atan, tan, cos, sin, atan2 from pathlib import Path +from bpy.app.handlers import persistent colour_list = [ (.651, .81, .892, 1), @@ -40,6 +41,22 @@ colour_list = [ (.993, .999, .6, 1), (.693, .349, .157, 1)] + +@persistent +def depsgraph_update_pre_handler(scene): + set_active_camera_resolution(scene) + + +def set_active_camera_resolution(scene): + if not scene.camera \ + or '/' not in scene.camera.name: + return + if scene.render.resolution_x != scene.camera.data.BIMCameraProperties.raster_x \ + or scene.render.resolution_y != scene.camera.data.BIMCameraProperties.raster_y: + scene.render.resolution_x = scene.camera.data.BIMCameraProperties.raster_x + scene.render.resolution_y = scene.camera.data.BIMCameraProperties.raster_y + + class ExportIFC(bpy.types.Operator): bl_idname = "export_ifc.bim" bl_label = "Export IFC" diff --git a/src/ifcblenderexport/blenderbim/bim/prop.py b/src/ifcblenderexport/blenderbim/bim/prop.py index 18d888450e..88b56b3d64 100644 --- a/src/ifcblenderexport/blenderbim/bim/prop.py +++ b/src/ifcblenderexport/blenderbim/bim/prop.py @@ -543,6 +543,8 @@ class BIMCameraProperties(PropertyGroup): view_name: StringProperty(name="View Name") diagram_scale: EnumProperty(items=getDiagramScales, name='Drawing Scale') custom_diagram_scale: StringProperty(name='Custom Scale') + raster_x: IntProperty(name='Raster X', default=1000) + raster_y: IntProperty(name='Raster Y', default=1000) is_nts: BoolProperty(name='Is NTS') cut_objects: EnumProperty(items=[ ('.IfcWall|.IfcSlab|.IfcCurtainWall|.IfcStair|.IfcStairFlight|.IfcColumn|.IfcBeam|.IfcMember|.IfcCovering', diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 54e4d94c29..a61ea6bf26 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -906,6 +906,11 @@ class BIM_PT_camera(Panel): row = layout.row() row.prop(props, 'cut_objects_custom') + row = layout.row() + row.prop(props, 'raster_x') + row = layout.row() + row.prop(props, 'raster_y') + row = layout.row() row.prop(props, 'diagram_scale') if props.diagram_scale == 'CUSTOM':