From b4ecdfba6906b94ea034e079dc6dad4602aedaba Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 25 Jan 2021 14:58:12 +1100 Subject: [PATCH] WIP refactor model module with new pie menu for convenience. See #1222. --- .../blenderbim/bim/__init__.py | 1 - .../blenderbim/bim/import_ifc.py | 32 ++-- .../module/geometry/edit_object_placement.py | 1 + .../blenderbim/bim/module/model/__init__.py | 26 +++- .../blenderbim/bim/module/model/door.py | 141 +++++++++--------- .../blenderbim/bim/module/model/opening.py | 5 +- .../blenderbim/bim/module/model/pie.py | 124 +++++++++++++++ .../blenderbim/bim/module/model/slab.py | 5 +- .../blenderbim/bim/module/model/stair.py | 7 +- .../blenderbim/bim/module/model/wall.py | 6 +- .../blenderbim/bim/module/model/window.py | 115 +++++++------- .../blenderbim/bim/module/void/operator.py | 1 + src/ifcblenderexport/blenderbim/bim/prop.py | 26 +++- src/ifcblenderexport/blenderbim/bim/ui.py | 14 -- 14 files changed, 322 insertions(+), 182 deletions(-) create mode 100644 src/ifcblenderexport/blenderbim/bim/module/model/pie.py diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index 6e493f893b..6d266cd4c6 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -181,7 +181,6 @@ if bpy is not None: ui.BIM_PT_object_structural, ui.BIM_PT_camera, ui.BIM_PT_text, - ui.BIM_PT_modeling_utilities, ui.BIM_PT_annotation_utilities, ui.BIM_PT_clash_manager, ui.BIM_PT_misc_utilities, diff --git a/src/ifcblenderexport/blenderbim/bim/import_ifc.py b/src/ifcblenderexport/blenderbim/bim/import_ifc.py index 57b4765a7c..1eab79ff69 100644 --- a/src/ifcblenderexport/blenderbim/bim/import_ifc.py +++ b/src/ifcblenderexport/blenderbim/bim/import_ifc.py @@ -1570,22 +1570,22 @@ class IfcImportSettings: self.logger = None self.input_file = None self.diff_file = None - self.should_import_type_representations: False - self.should_import_curves: False - self.should_import_spaces: False - self.should_auto_set_workarounds: True - self.should_use_cpu_multiprocessing: True - self.should_merge_by_class: False - self.should_merge_by_material: False - self.should_merge_materials_by_colour: False - self.should_clean_mesh: True - self.deflection_tolerance: 0.001 - self.angular_tolerance: 0.5 - self.should_allow_non_element_aggregates: False - self.should_offset_model: False - self.model_offset_coordinates: (0, 0, 0) - self.ifc_import_filter: "NONE" - self.ifc_selector: "" + self.should_import_type_representations = False + self.should_import_curves = False + self.should_import_spaces = False + self.should_auto_set_workarounds = True + self.should_use_cpu_multiprocessing = True + self.should_merge_by_class = False + self.should_merge_by_material = False + self.should_merge_materials_by_colour = False + self.should_clean_mesh = True + self.deflection_tolerance = 0.001 + self.angular_tolerance = 0.5 + self.should_allow_non_element_aggregates = False + self.should_offset_model = False + self.model_offset_coordinates = (0, 0, 0) + self.ifc_import_filter = "NONE" + self.ifc_selector = "" @staticmethod diff --git a/src/ifcblenderexport/blenderbim/bim/module/geometry/edit_object_placement.py b/src/ifcblenderexport/blenderbim/bim/module/geometry/edit_object_placement.py index 4d872442a0..97070ec8ad 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/geometry/edit_object_placement.py +++ b/src/ifcblenderexport/blenderbim/bim/module/geometry/edit_object_placement.py @@ -40,6 +40,7 @@ class Usecase: inverse, self.settings["product"].ObjectPlacement, placement ) old = self.settings["product"].ObjectPlacement + old.PlacementRelTo = None self.settings["product"].ObjectPlacement = None if not self.file.get_inverse(old): ifcopenshell.util.element.remove_deep(self.file, old) diff --git a/src/ifcblenderexport/blenderbim/bim/module/model/__init__.py b/src/ifcblenderexport/blenderbim/bim/module/model/__init__.py index 09c610553b..8e097c91b3 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/model/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/module/model/__init__.py @@ -1,5 +1,5 @@ import bpy -from . import grid, wall, stair, door, window, slab, opening +from . import grid, wall, stair, door, window, slab, opening, pie classes = ( grid.BIM_OT_add_object, @@ -9,8 +9,20 @@ classes = ( window.BIM_OT_add_object, slab.BIM_OT_add_object, opening.BIM_OT_add_object, + pie.OpenPieClass, + pie.PieUpdateContainer, + pie.PieAddOpening, + pie.AssignIfcWall, + pie.AssignIfcSlab, + pie.AssignIfcStair, + pie.AssignIfcDoor, + pie.AssignIfcWindow, + pie.VIEW3D_MT_PIE_bim, + pie.VIEW3D_MT_PIE_bim_class, ) +addon_keymaps = [] + def register(): bpy.types.VIEW3D_MT_mesh_add.append(grid.add_object_button) @@ -20,6 +32,12 @@ def register(): bpy.types.VIEW3D_MT_mesh_add.append(window.add_object_button) bpy.types.VIEW3D_MT_mesh_add.append(slab.add_object_button) bpy.types.VIEW3D_MT_mesh_add.append(opening.add_object_button) + wm = bpy.context.window_manager + if wm.keyconfigs.addon: + km = wm.keyconfigs.addon.keymaps.new(name="3D View", space_type="VIEW_3D") + kmi = km.keymap_items.new("wm.call_menu_pie", "E", "PRESS", shift=True) + kmi.properties["name"] = "VIEW3D_MT_PIE_bim" + addon_keymaps.append((km, kmi)) def unregister(): @@ -30,3 +48,9 @@ def unregister(): bpy.types.VIEW3D_MT_mesh_add.remove(window.add_object_button) bpy.types.VIEW3D_MT_mesh_add.remove(slab.add_object_button) bpy.types.VIEW3D_MT_mesh_add.remove(opening.add_object_button) + wm = bpy.context.window_manager + kc = wm.keyconfigs.addon + if kc: + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() diff --git a/src/ifcblenderexport/blenderbim/bim/module/model/door.py b/src/ifcblenderexport/blenderbim/bim/module/model/door.py index 23b4bea5bd..e8ff0bd46d 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/model/door.py +++ b/src/ifcblenderexport/blenderbim/bim/module/model/door.py @@ -10,60 +10,61 @@ from mathutils import Vector def add_object(self, context): guid = ifcopenshell.guid.new() leaf_width = self.overall_width - 0.045 - 0.045 - verts = [ - # Left lining - Vector((0, 0, 0)), - Vector((0, self.depth, 0)), - Vector((0.04, self.depth, 0)), - Vector((0.04, self.depth - 0.04, 0)), - Vector((0.065, self.depth - 0.04, 0)), - Vector((0.065, 0, 0)), - # Right lining - Vector((self.overall_width, 0, 0)), - Vector((self.overall_width, self.depth, 0)), - Vector((self.overall_width - 0.04, self.depth, 0)), - Vector((self.overall_width - 0.04, self.depth - 0.04, 0)), - Vector((self.overall_width - 0.065, self.depth - 0.04, 0)), - Vector((self.overall_width - 0.065, 0, 0)), - # Door panel - Vector((0.045, self.depth, 0)), - Vector((0.045, self.depth + leaf_width, 0)), - Vector((0.080, self.depth + leaf_width, 0)), - Vector((0.080, self.depth, 0)), - ] - edges = [ - [0, 1], - [1, 2], - [2, 3], - [3, 4], - [4, 5], # Left lining - [6, 7], - [7, 8], - [8, 9], - [9, 10], - [10, 11], # Right lining - [12, 13], - [13, 14], - [14, 15], - [15, 12], # Door panel - ] - # Door swing - for i in range(0, 9): - verts.append( - Vector( - ( - 0.045 + (leaf_width * math.cos((math.pi / 2) / 8 * i)), - self.depth + (leaf_width * math.sin((math.pi / 2) / 8 * i)), - 0, - ) - ) - ) - edges.append([16 + i, 17 + i]) - edges.pop() - faces = [] - mesh = bpy.data.meshes.new(name="Plan/Annotation/PLAN_VIEW/" + guid) - mesh.use_fake_user = True - mesh.from_pydata(verts, edges, faces) + # TODO reimplement 2D. See #1222. + #verts = [ + # # Left lining + # Vector((0, 0, 0)), + # Vector((0, self.depth, 0)), + # Vector((0.04, self.depth, 0)), + # Vector((0.04, self.depth - 0.04, 0)), + # Vector((0.065, self.depth - 0.04, 0)), + # Vector((0.065, 0, 0)), + # # Right lining + # Vector((self.overall_width, 0, 0)), + # Vector((self.overall_width, self.depth, 0)), + # Vector((self.overall_width - 0.04, self.depth, 0)), + # Vector((self.overall_width - 0.04, self.depth - 0.04, 0)), + # Vector((self.overall_width - 0.065, self.depth - 0.04, 0)), + # Vector((self.overall_width - 0.065, 0, 0)), + # # Door panel + # Vector((0.045, self.depth, 0)), + # Vector((0.045, self.depth + leaf_width, 0)), + # Vector((0.080, self.depth + leaf_width, 0)), + # Vector((0.080, self.depth, 0)), + #] + #edges = [ + # [0, 1], + # [1, 2], + # [2, 3], + # [3, 4], + # [4, 5], # Left lining + # [6, 7], + # [7, 8], + # [8, 9], + # [9, 10], + # [10, 11], # Right lining + # [12, 13], + # [13, 14], + # [14, 15], + # [15, 12], # Door panel + #] + ## Door swing + #for i in range(0, 9): + # verts.append( + # Vector( + # ( + # 0.045 + (leaf_width * math.cos((math.pi / 2) / 8 * i)), + # self.depth + (leaf_width * math.sin((math.pi / 2) / 8 * i)), + # 0, + # ) + # ) + # ) + # edges.append([16 + i, 17 + i]) + #edges.pop() + #faces = [] + #mesh = bpy.data.meshes.new(name="Plan/Annotation/PLAN_VIEW/" + guid) + #mesh.use_fake_user = True + #mesh.from_pydata(verts, edges, faces) # Door lining profile verts = [ @@ -96,6 +97,7 @@ def add_object(self, context): bpy.ops.object.convert(target="CURVE") obj2.data.dimensions = "2D" + obj2.data.bevel_mode = "OBJECT" obj2.data.bevel_object = obj obj2.rotation_euler[0] = math.pi / 2 @@ -145,27 +147,22 @@ def add_object(self, context): obj4.parent = obj2 obj4.matrix_parent_inverse = obj2.matrix_world.inverted() obj4.hide_render = True - obj4.name = "IfcOpeningElement/Dumb Door Opening" - attribute = obj4.BIMObjectProperties.attributes.add() - attribute.name = "PredefinedType" - attribute.string_value = "OPENING" + obj4.name = "Door Opening" - obj2.name = "IfcDoor/Dumb Door" - attribute = obj2.BIMObjectProperties.attributes.add() - attribute.name = "PredefinedType" - attribute.string_value = "DOOR" - obj2.data.name = "Model/Body/MODEL_VIEW/" + guid - obj2.data.use_fake_user = True + obj2.name = "Door" + #obj2.data.name = "Model/Body/MODEL_VIEW/" + guid + #obj2.data.use_fake_user = True - rep = obj2.BIMObjectProperties.representation_contexts.add() - rep.context = "Model" - rep.name = "Body" - rep.target_view = "MODEL_VIEW" + # TODO: reimplement. See #1222. + #rep = obj2.BIMObjectProperties.representation_contexts.add() + #rep.context = "Model" + #rep.name = "Body" + #rep.target_view = "MODEL_VIEW" - rep = obj2.BIMObjectProperties.representation_contexts.add() - rep.context = "Plan" - rep.name = "Annotation" - rep.target_view = "PLAN_VIEW" + #rep = obj2.BIMObjectProperties.representation_contexts.add() + #rep.context = "Plan" + #rep.name = "Annotation" + #rep.target_view = "PLAN_VIEW" class BIM_OT_add_object(Operator, AddObjectHelper): diff --git a/src/ifcblenderexport/blenderbim/bim/module/model/opening.py b/src/ifcblenderexport/blenderbim/bim/module/model/opening.py index 059763a293..e2dcdd33c2 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/model/opening.py +++ b/src/ifcblenderexport/blenderbim/bim/module/model/opening.py @@ -15,11 +15,8 @@ def add_object(self, context): bm.to_mesh(mesh) bm.free() obj = object_data_add(context, mesh, operator=self) - obj.name = "IfcOpening/Dumb Opening" + obj.name = "Opening" obj.display_type = "WIRE" - attribute = obj.BIMObjectProperties.attributes.add() - attribute.name = "PredefinedType" - attribute.string_value = "OPENING" class BIM_OT_add_object(Operator, AddObjectHelper): diff --git a/src/ifcblenderexport/blenderbim/bim/module/model/pie.py b/src/ifcblenderexport/blenderbim/bim/module/model/pie.py new file mode 100644 index 0000000000..bee37229a4 --- /dev/null +++ b/src/ifcblenderexport/blenderbim/bim/module/model/pie.py @@ -0,0 +1,124 @@ +import bpy + + +class OpenPieClass(bpy.types.Operator): + bl_idname = "bim.open_pie_class" + bl_label = "Open Pie Class" + + def execute(self, context): + bpy.ops.wm.call_menu_pie(name="VIEW3D_MT_PIE_bim_class") + return {"FINISHED"} + + +class AssignIfcWall(bpy.types.Operator): + bl_idname = "bim.assign_ifc_wall" + bl_label = "IfcWall" + + def execute(self, context): + for obj in context.selected_objects: + if not obj.BIMObjectProperties.ifc_definition_id: + bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcWall") + return {"FINISHED"} + + +class AssignIfcSlab(bpy.types.Operator): + bl_idname = "bim.assign_ifc_slab" + bl_label = "IfcSlab" + + def execute(self, context): + for obj in context.selected_objects: + if not obj.BIMObjectProperties.ifc_definition_id: + bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcSlab") + return {"FINISHED"} + + +class AssignIfcStair(bpy.types.Operator): + bl_idname = "bim.assign_ifc_stair" + bl_label = "IfcStair" + + def execute(self, context): + for obj in context.selected_objects: + if not obj.BIMObjectProperties.ifc_definition_id: + bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcStair") + return {"FINISHED"} + + +class AssignIfcDoor(bpy.types.Operator): + bl_idname = "bim.assign_ifc_door" + bl_label = "IfcDoor" + + def execute(self, context): + for obj in context.selected_objects: + if not obj.BIMObjectProperties.ifc_definition_id: + bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcDoor") + return {"FINISHED"} + + +class AssignIfcWindow(bpy.types.Operator): + bl_idname = "bim.assign_ifc_window" + bl_label = "IfcWindow" + + def execute(self, context): + for obj in context.selected_objects: + if not obj.BIMObjectProperties.ifc_definition_id: + bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcWindow") + return {"FINISHED"} + + +class PieAddOpening(bpy.types.Operator): + bl_idname = "bim.pie_add_opening" + bl_label = "Add Opening" + + def execute(self, context): + if len(context.selected_objects) == 2: + opening_name = None + obj_name = None + for obj in context.selected_objects: + if "IfcOpeningElement" in obj.name or not obj.BIMObjectProperties.ifc_definition_id: + opening_name = obj.name + else: + opj_name = obj.name + bpy.ops.bim.add_opening(obj=opj_name, opening=opening_name) + return {"FINISHED"} + + +class PieUpdateContainer(bpy.types.Operator): + bl_idname = "bim.pie_update_container" + bl_label = "Update Spatial Container" + + def execute(self, context): + for obj in context.selected_objects: + if not obj.BIMObjectProperties.ifc_definition_id: + continue + relating_structure = None + for collection in obj.users_collection: + relating_structure_obj = bpy.data.objects.get(collection.name) + if not relating_structure_obj or not relating_structure_obj.BIMObjectProperties.ifc_definition_id: + continue + relating_structure = relating_structure_obj + bpy.ops.bim.assign_container(relating_structure=relating_structure.name, related_element=obj.name) + return {"FINISHED"} + + +class VIEW3D_MT_PIE_bim(bpy.types.Menu): + bl_label = "Geometry" + + def draw(self, context): + pie = self.layout.menu_pie() + pie.operator("bim.edit_object_placement") + pie.operator("bim.update_mesh_representation") + pie.operator("bim.pie_add_opening") + pie.operator("bim.pie_update_container") + pie.operator("bim.open_pie_class", text="Assign IFC Class") + + +class VIEW3D_MT_PIE_bim_class(bpy.types.Menu): + bl_label = "IFC Class" + + def draw(self, context): + pie = self.layout.menu_pie() + pie.operator("bim.assign_ifc_wall") + pie.operator("bim.assign_ifc_slab") + pie.operator("bim.assign_ifc_stair") + pie.operator("bim.assign_ifc_door") + pie.operator("bim.assign_ifc_window") diff --git a/src/ifcblenderexport/blenderbim/bim/module/model/slab.py b/src/ifcblenderexport/blenderbim/bim/module/model/slab.py index 72d8dd2806..09efbb6b3b 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/model/slab.py +++ b/src/ifcblenderexport/blenderbim/bim/module/model/slab.py @@ -22,10 +22,7 @@ def add_object(self, context): modifier.use_even_offset = True modifier.offset = 1 modifier.thickness = self.depth - obj.name = "IfcSlab/Dumb Slab" - attribute = obj.BIMObjectProperties.attributes.add() - attribute.name = "PredefinedType" - attribute.string_value = "FLOOR" + obj.name = "Slab" class BIM_OT_add_object(Operator, AddObjectHelper): diff --git a/src/ifcblenderexport/blenderbim/bim/module/model/stair.py b/src/ifcblenderexport/blenderbim/bim/module/model/stair.py index c5e36ca90a..b0074f34c2 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/model/stair.py +++ b/src/ifcblenderexport/blenderbim/bim/module/model/stair.py @@ -28,14 +28,13 @@ def add_object(self, context): modifier.relative_offset_displace[0] = 0 modifier.relative_offset_displace[1] = 1 modifier.use_constant_offset = True + modifier.constant_offset_displace[0] = 0 + modifier.constant_offset_displace[1] = 0 modifier.constant_offset_displace[2] = self.height / self.number_of_treads modifier.count = self.number_of_treads self.riser_height = self.height / self.number_of_treads self.length = self.number_of_treads * self.tread_length - obj.name = "IfcStairFlight/Dumb Stair" - attribute = obj.BIMObjectProperties.attributes.add() - attribute.name = "PredefinedType" - attribute.string_value = "STRAIGHT" + obj.name = "Stair" class BIM_OT_add_object(Operator, AddObjectHelper): diff --git a/src/ifcblenderexport/blenderbim/bim/module/model/wall.py b/src/ifcblenderexport/blenderbim/bim/module/model/wall.py index c234153785..da8db6400a 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/model/wall.py +++ b/src/ifcblenderexport/blenderbim/bim/module/model/wall.py @@ -38,10 +38,8 @@ def add_object(self, context): modifier = obj.modifiers.new("Wall Width", "SOLIDIFY") modifier.use_even_offset = True modifier.thickness = self.width - obj.name = "IfcWall/Dumb Wall" - attribute = obj.BIMObjectProperties.attributes.add() - attribute.name = "PredefinedType" - attribute.string_value = "STANDARD" + obj.name = "Wall" + return obj class BIM_OT_add_object(Operator, AddObjectHelper): diff --git a/src/ifcblenderexport/blenderbim/bim/module/model/window.py b/src/ifcblenderexport/blenderbim/bim/module/model/window.py index 3578ba0350..d9ca131f46 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/model/window.py +++ b/src/ifcblenderexport/blenderbim/bim/module/model/window.py @@ -10,48 +10,48 @@ from mathutils import Vector def add_object(self, context): guid = ifcopenshell.guid.new() leaf_width = self.overall_width - 0.045 - 0.045 - verts = [ - # Left lining - Vector((0, 0, 0)), - Vector((0, self.depth, 0)), - Vector((0.04, self.depth, 0)), - Vector((0.04, 0, 0)), - # Right lining - Vector((self.overall_width, 0, 0)), - Vector((self.overall_width, self.depth, 0)), - Vector((self.overall_width - 0.04, self.depth, 0)), - Vector((self.overall_width - 0.04, 0, 0)), - # Bottom lining - Vector((0, 0, 0)), - Vector((self.overall_width, 0, 0)), - Vector((0, self.depth, 0)), - Vector((self.overall_width, self.depth, 0)), - # Window panel - Vector((0.04, (self.depth / 2) + 0.005, 0)), - Vector((0.04, (self.depth / 2) - 0.005, 0)), - Vector((self.overall_width - 0.04, (self.depth / 2) - 0.005, 0)), - Vector((self.overall_width - 0.04, (self.depth / 2) + 0.005, 0)), - ] - edges = [ - [0, 1], - [1, 2], - [2, 3], - [3, 0], # Left lining - [4, 5], - [5, 6], - [6, 7], - [7, 4], # Right lining - [8, 9], - [10, 11], # Bottom lining - [12, 13], - [13, 14], - [14, 15], - [15, 12], # Window panel - ] - faces = [] - mesh = bpy.data.meshes.new(name="Plan/Annotation/PLAN_VIEW/" + guid) - mesh.use_fake_user = True - mesh.from_pydata(verts, edges, faces) + #verts = [ + # # Left lining + # Vector((0, 0, 0)), + # Vector((0, self.depth, 0)), + # Vector((0.04, self.depth, 0)), + # Vector((0.04, 0, 0)), + # # Right lining + # Vector((self.overall_width, 0, 0)), + # Vector((self.overall_width, self.depth, 0)), + # Vector((self.overall_width - 0.04, self.depth, 0)), + # Vector((self.overall_width - 0.04, 0, 0)), + # # Bottom lining + # Vector((0, 0, 0)), + # Vector((self.overall_width, 0, 0)), + # Vector((0, self.depth, 0)), + # Vector((self.overall_width, self.depth, 0)), + # # Window panel + # Vector((0.04, (self.depth / 2) + 0.005, 0)), + # Vector((0.04, (self.depth / 2) - 0.005, 0)), + # Vector((self.overall_width - 0.04, (self.depth / 2) - 0.005, 0)), + # Vector((self.overall_width - 0.04, (self.depth / 2) + 0.005, 0)), + #] + #edges = [ + # [0, 1], + # [1, 2], + # [2, 3], + # [3, 0], # Left lining + # [4, 5], + # [5, 6], + # [6, 7], + # [7, 4], # Right lining + # [8, 9], + # [10, 11], # Bottom lining + # [12, 13], + # [13, 14], + # [14, 15], + # [15, 12], # Window panel + #] + #faces = [] + #mesh = bpy.data.meshes.new(name="Plan/Annotation/PLAN_VIEW/" + guid) + #mesh.use_fake_user = True + #mesh.from_pydata(verts, edges, faces) # Window lining profile verts = [ @@ -83,6 +83,7 @@ def add_object(self, context): obj2.data.splines[0].use_cyclic_u = True obj2.data.dimensions = "2D" + obj2.data.bevel_mode = "OBJECT" obj2.data.bevel_object = obj obj2.rotation_euler[0] = math.pi / 2 @@ -132,27 +133,21 @@ def add_object(self, context): obj4.parent = obj2 obj4.matrix_parent_inverse = obj2.matrix_world.inverted() obj4.hide_render = True - obj4.name = "IfcOpeningElement/Dumb Window Opening" - attribute = obj4.BIMObjectProperties.attributes.add() - attribute.name = "PredefinedType" - attribute.string_value = "OPENING" + obj4.name = "Window Opening" - obj2.name = "IfcWindow/Dumb Window" - attribute = obj2.BIMObjectProperties.attributes.add() - attribute.name = "PredefinedType" - attribute.string_value = "WINDOW" - obj2.data.name = "Model/Body/MODEL_VIEW/" + guid - obj2.data.use_fake_user = True + obj2.name = "Window" + #obj2.data.name = "Model/Body/MODEL_VIEW/" + guid + #obj2.data.use_fake_user = True - rep = obj2.BIMObjectProperties.representation_contexts.add() - rep.context = "Model" - rep.name = "Body" - rep.target_view = "MODEL_VIEW" + #rep = obj2.BIMObjectProperties.representation_contexts.add() + #rep.context = "Model" + #rep.name = "Body" + #rep.target_view = "MODEL_VIEW" - rep = obj2.BIMObjectProperties.representation_contexts.add() - rep.context = "Plan" - rep.name = "Annotation" - rep.target_view = "PLAN_VIEW" + #rep = obj2.BIMObjectProperties.representation_contexts.add() + #rep.context = "Plan" + #rep.name = "Annotation" + #rep.target_view = "PLAN_VIEW" class BIM_OT_add_object(Operator, AddObjectHelper): diff --git a/src/ifcblenderexport/blenderbim/bim/module/void/operator.py b/src/ifcblenderexport/blenderbim/bim/module/void/operator.py index 5e3b998c48..cd1f9956e5 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/void/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/module/void/operator.py @@ -17,6 +17,7 @@ class AddOpening(bpy.types.Operator): def execute(self, context): obj = bpy.data.objects.get(self.obj) if self.obj else bpy.context.active_object opening = bpy.data.objects.get(self.opening) + opening.display_type = "WIRE" if not opening.BIMObjectProperties.ifc_definition_id: body_context_id = None if not ContextData.is_loaded: diff --git a/src/ifcblenderexport/blenderbim/bim/prop.py b/src/ifcblenderexport/blenderbim/bim/prop.py index 96c4eed206..12d54c9a62 100644 --- a/src/ifcblenderexport/blenderbim/bim/prop.py +++ b/src/ifcblenderexport/blenderbim/bim/prop.py @@ -270,7 +270,18 @@ def getSubcontexts(self, context): global subcontexts_enum subcontexts_enum.clear() # TODO: allow override of generated subcontexts? - subcontexts = export_ifc.IfcExportSettings().subcontexts + subcontexts = [ + "Annotation", + "Axis", + "Box", + "FootPrint", + "Reference", + "Body", + "Clearance", + "CoG", + "Profile", + "SurveyPoints", + ] for subcontext in subcontexts: subcontexts_enum.append((subcontext, subcontext, "")) return subcontexts_enum @@ -279,7 +290,18 @@ def getSubcontexts(self, context): def getTargetViews(self, context): global target_views_enum target_views_enum.clear() - for target_view in export_ifc.IfcExportSettings().target_views: + target_views = [ + "GRAPH_VIEW", + "SKETCH_VIEW", + "MODEL_VIEW", + "PLAN_VIEW", + "REFLECTED_PLAN_VIEW", + "SECTION_VIEW", + "ELEVATION_VIEW", + "USERDEFINED", + "NOTDEFINED", + ] + for target_view in target_views: target_views_enum.append((target_view, target_view, "")) return target_views_enum diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 3895645afd..49593f88bb 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -565,20 +565,6 @@ class BIM_PT_ifcclash(Panel): row.operator("bim.select_ifc_clash_results") -class BIM_PT_modeling_utilities(Panel): - bl_idname = "BIM_PT_modeling_utilities" - bl_label = "Architectural" - bl_space_type = "VIEW_3D" - bl_region_type = "UI" - bl_category = "BlenderBIM" - - def draw(self, context): - layout = self.layout - - row = layout.row(align=True) - row.operator("bim.add_opening") - - class BIM_PT_annotation_utilities(Panel): bl_idname = "BIM_PT_annotation_utilities" bl_label = "Annotation"