From ef41daedb95e5b491df9f2bd2085eefb26993880 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 11 Aug 2020 13:52:16 +1000 Subject: [PATCH] Users can now specify what objects to cut for documentation with presets --- src/ifcblenderexport/blenderbim/bim/cut_ifc.py | 6 ++++-- src/ifcblenderexport/blenderbim/bim/operator.py | 4 ++++ src/ifcblenderexport/blenderbim/bim/prop.py | 7 +++++++ src/ifcblenderexport/blenderbim/bim/ui.py | 6 ++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/bim/cut_ifc.py b/src/ifcblenderexport/blenderbim/bim/cut_ifc.py index aa4fdb8cb0..878bd892fd 100644 --- a/src/ifcblenderexport/blenderbim/bim/cut_ifc.py +++ b/src/ifcblenderexport/blenderbim/bim/cut_ifc.py @@ -71,6 +71,7 @@ except ImportError: import ifcopenshell import ifcopenshell.geom +import ifcopenshell.util.selector cwd = os.path.dirname(os.path.realpath(__file__)) this_file = os.path.join(cwd, 'cut_ifc.py') @@ -164,6 +165,7 @@ class IfcCutter: self.cut_pickle_file = 'cut.pickle' self.should_recut = True self.should_recut_selected = True + self.cut_objects = '' self.selected_global_ids = [] self.should_extract = True self.diagram_name = None @@ -291,8 +293,8 @@ class IfcCutter: with open(shape_pickle, 'rb') as shape_file: shape_map = pickle.load(shape_file) - # TODO: This should perhaps be configurable, e.g. spaces cut to show zones in the drawing - products.extend(ifc_file.by_type('IfcElement')) + selector = ifcopenshell.util.selector.Selector() + products.extend(selector.parse(ifc_file, self.cut_objects)) include_elements = [] for i, product in enumerate(products): diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index cfa042b6d6..de7321bb0d 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -2080,6 +2080,10 @@ class CutSection(bpy.types.Operator): ifc_cutter.data_dir = bpy.context.scene.BIMProperties.data_dir ifc_cutter.diagram_name = self.diagram_name ifc_cutter.background_image = bpy.context.scene.render.filepath + if camera.data.BIMCameraProperties.cut_objects == 'CUSTOM': + ifc_cutter.cut_objects = camera.data.BIMCameraProperties.cut_objects_custom + else: + ifc_cutter.cut_objects = camera.data.BIMCameraProperties.cut_objects ifc_cutter.leader_obj = None ifc_cutter.stair_obj = None ifc_cutter.dimension_obj = None diff --git a/src/ifcblenderexport/blenderbim/bim/prop.py b/src/ifcblenderexport/blenderbim/bim/prop.py index f209e39cfa..a089c6c9a8 100644 --- a/src/ifcblenderexport/blenderbim/bim/prop.py +++ b/src/ifcblenderexport/blenderbim/bim/prop.py @@ -416,6 +416,13 @@ class BIMCameraProperties(PropertyGroup): view_name: StringProperty(name="View Name") diagram_scale: EnumProperty(items=getDiagramScales, name='Diagram Scale') is_nts: BoolProperty(name='Is NTS') + cut_objects: EnumProperty(items=[ + ('.IfcWall|.IfcSlab|.IfcCurtainWall|.IfcStair|.IfcStairFlight|.IfcColumn|.IfcBeam|.IfcMember|.IfcCovering', + 'Overall Plan / Section', ''), + ('.IfcElement', 'Detail Drawing', ''), + ('CUSTOM', 'Custom', '') + ], name='Cut Objects') + cut_objects_custom: StringProperty(name='Custom Cut') class BIMTextProperties(PropertyGroup): diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 2d1604a892..9e18b7fdd1 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -855,6 +855,12 @@ class BIM_PT_camera(Panel): row = layout.row() row.operator('bim.resize_text') + row = layout.row() + row.prop(props, 'cut_objects') + if props.cut_objects == 'CUSTOM': + row = layout.row() + row.prop(props, 'cut_objects_custom') + row = layout.row(align=True) row.prop(props, 'diagram_scale', text='') row.operator('bim.cut_section')