From 6d83815ab1904abb56c0e5610baa6fd985f86670 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 6 Jan 2020 11:46:42 +1100 Subject: [PATCH] Allow view scales to be set per camera instead of global --- src/ifcblenderexport/blenderbim/__init__.py | 5 +++ src/ifcblenderexport/blenderbim/operator.py | 2 +- src/ifcblenderexport/blenderbim/prop.py | 6 +++- src/ifcblenderexport/blenderbim/ui.py | 34 ++++++++++++++++----- 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/__init__.py b/src/ifcblenderexport/blenderbim/__init__.py index e07360572e..e9158c6204 100644 --- a/src/ifcblenderexport/blenderbim/__init__.py +++ b/src/ifcblenderexport/blenderbim/__init__.py @@ -80,6 +80,7 @@ if bpy is not None: operator.CutSection, operator.CreateSheets, operator.GenerateDigitalTwin, + operator.CreateView, prop.Subcontext, prop.BIMProperties, prop.DocProperties, @@ -95,6 +96,7 @@ if bpy is not None: prop.BIMMaterialProperties, prop.SweptSolid, prop.BIMMeshProperties, + prop.BIMCameraProperties, ui.BIM_PT_documentation, ui.BIM_PT_bim, ui.BIM_PT_owner, @@ -107,6 +109,7 @@ if bpy is not None: ui.BIM_PT_material, ui.BIM_PT_mesh, ui.BIM_PT_object, + ui.BIM_PT_camera, ) def menu_func_export(self, context): @@ -137,6 +140,7 @@ if bpy is not None: bpy.types.Collection.BIMObjectProperties = bpy.props.PointerProperty(type=prop.BIMObjectProperties) bpy.types.Material.BIMMaterialProperties = bpy.props.PointerProperty(type=prop.BIMMaterialProperties) bpy.types.Mesh.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties) + bpy.types.Camera.BIMCameraProperties = bpy.props.PointerProperty(type=prop.BIMCameraProperties) def unregister(): for cls in reversed(classes): @@ -152,6 +156,7 @@ if bpy is not None: del(bpy.types.Collection.BIMObjectProperties) del(bpy.types.Material.BIMMaterialProperties) del(bpy.types.Mesh.BIMMeshProperties) + del(bpy.types.Mesh.BIMCameraProperties) if __name__ == "__main__": register() diff --git a/src/ifcblenderexport/blenderbim/operator.py b/src/ifcblenderexport/blenderbim/operator.py index ed23b84b5e..3ed66485dd 100644 --- a/src/ifcblenderexport/blenderbim/operator.py +++ b/src/ifcblenderexport/blenderbim/operator.py @@ -855,7 +855,7 @@ class CutSection(bpy.types.Operator): ifc_cutter.cut_pickle_file = os.path.join(ifc_cutter.data_dir, '{}-cut.pickle'.format(self.diagram_name)) ifc_cutter.should_recut = bpy.context.scene.DocProperties.should_recut svg_writer = cut_ifc.SvgWriter(ifc_cutter) - numerator, denominator = bpy.context.scene.DocProperties.diagram_scale.split(':') + numerator, denominator = camera.data.BIMCameraProperties.diagram_scale.split(':') svg_writer.scale = float(numerator) / float(denominator) ifc_cutter.cut() svg_writer.write() diff --git a/src/ifcblenderexport/blenderbim/prop.py b/src/ifcblenderexport/blenderbim/prop.py index e05ad1812f..230d46a8e9 100644 --- a/src/ifcblenderexport/blenderbim/prop.py +++ b/src/ifcblenderexport/blenderbim/prop.py @@ -215,11 +215,15 @@ class Subcontext(PropertyGroup): class DocProperties(PropertyGroup): - diagram_scale: EnumProperty(items=getDiagramScales, name='Diagram Scale') should_recut: BoolProperty(name="Should Recut", default=True) view_name: StringProperty(name="View Name") +class BIMCameraProperties(PropertyGroup): + view_name: StringProperty(name="View Name") + diagram_scale: EnumProperty(items=getDiagramScales, name='Diagram Scale') + + class BIMProperties(PropertyGroup): schema_dir: StringProperty(default=os.path.join(cwd ,'schema') + os.path.sep, name="Schema Directory") data_dir: StringProperty(default=os.path.join(cwd, 'data') + os.path.sep, name="Data Directory") diff --git a/src/ifcblenderexport/blenderbim/ui.py b/src/ifcblenderexport/blenderbim/ui.py index fdbd0967ca..64f456d71f 100644 --- a/src/ifcblenderexport/blenderbim/ui.py +++ b/src/ifcblenderexport/blenderbim/ui.py @@ -198,13 +198,6 @@ class BIM_PT_documentation(Panel): row.prop(props, 'view_name') row.operator('bim.create_view', icon='ADD', text='') - row = layout.row() - row.prop(props, 'should_recut') - - row = layout.row(align=True) - row.prop(props, 'diagram_scale', text='') - row.operator('bim.cut_section') - row = layout.row() row.operator('bim.create_sheets') @@ -212,6 +205,33 @@ class BIM_PT_documentation(Panel): row.operator('bim.generate_digital_twin') +class BIM_PT_camera(Panel): + bl_label = "Diagrams and Documentation" + bl_idname = "BIM_PT_camera" + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = 'data' + + @classmethod + def poll(cls, context): + engine = context.engine + return context.camera and (engine in cls.COMPAT_ENGINES) and \ + hasattr(context.active_object.data, "BIMCameraProperties") + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + dprops = bpy.context.scene.DocProperties + props = context.active_object.data.BIMCameraProperties + + row = layout.row() + row.prop(dprops, 'should_recut') + + row = layout.row(align=True) + row.prop(props, 'diagram_scale', text='') + row.operator('bim.cut_section') + + class BIM_PT_owner(Panel): bl_label = "Owner History" bl_idname = "BIM_PT_owner"