diff --git a/src/blenderbim/blenderbim/bim/module/cad/workspace.py b/src/blenderbim/blenderbim/bim/module/cad/workspace.py index 13a4f2aae3..f1a39648bb 100644 --- a/src/blenderbim/blenderbim/bim/module/cad/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/cad/workspace.py @@ -42,39 +42,51 @@ class CadTool(WorkSpaceTool): # Enable Mesh Tools add-on to get this amazing tool ("mesh.offset_edges", {"type": "O", "value": "PRESS", "shift": True}, {"properties": []}), ("bim.cad_arc_from_2_points", {"type": "C", "value": "PRESS", "shift": True}, {"properties": []}), - ("bim.cad_arc_from_3_points", {"type": "V", "value": "PRESS", "shift": True}, {"properties": []}), + ("bim.cad_hotkey", {"type": "V", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_V")]}), ) def draw_settings(context, layout, tool): - row = layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="", icon="EVENT_Q") - row.operator("bim.edit_extrusion_profile", text="Save Profile") - row.operator("bim.disable_editing_extrusion_profile", text="", icon="CANCEL") + if context.active_object.data.BIMMeshProperties.is_profile: + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="", icon="EVENT_Q") + row.operator("bim.edit_extrusion_profile", text="Save Profile") + row.operator("bim.disable_editing_extrusion_profile", text="", icon="CANCEL") - row = layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="Extend", icon="EVENT_E") + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="", icon="EVENT_E") + row.operator("bim.hotkey", text="Extend").hotkey = "S_E" - row = layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="Mitre", icon="EVENT_T") + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="", icon="EVENT_V") + row.operator("bim.set_arc_index", text="3-Point Arc") + else: + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="", icon="EVENT_E") + row.operator("bim.hotkey", text="Extend").hotkey = "S_E" - row = layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="Fillet", icon="EVENT_F") + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="Mitre", icon="EVENT_T") - row = layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="Offset", icon="EVENT_O") + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="Fillet", icon="EVENT_F") - row = layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="2-Point Arc", icon="EVENT_C") + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="Offset", icon="EVENT_O") - row = layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="3-Point Arc", icon="EVENT_V") + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="2-Point Arc", icon="EVENT_C") + + row = layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="3-Point Arc", icon="EVENT_V") class CadHotkey(bpy.types.Operator): @@ -96,8 +108,14 @@ class CadHotkey(bpy.types.Operator): def hotkey_S_E(self): bpy.ops.bim.cad_trim_extend() + def hotkey_S_Q(self): + bpy.ops.bim.edit_extrusion_profile() + def hotkey_S_T(self): bpy.ops.bim.cad_mitre() - def hotkey_S_Q(self): - bpy.ops.bim.edit_extrusion_profile() + def hotkey_S_V(self): + if bpy.context.active_object.data.BIMMeshProperties.is_profile: + bpy.ops.bim.set_arc_index() + else: + bpy.ops.bim.cad_arc_from_3_points() diff --git a/src/blenderbim/blenderbim/bim/module/model/slab.py b/src/blenderbim/blenderbim/bim/module/model/slab.py index 7c6779be8f..726978c6cb 100644 --- a/src/blenderbim/blenderbim/bim/module/model/slab.py +++ b/src/blenderbim/blenderbim/bim/module/model/slab.py @@ -587,6 +587,7 @@ class EnableEditingExtrusionProfile(bpy.types.Operator): mesh = bpy.data.meshes.new("Profile") mesh.from_pydata(self.vertices, self.edges, []) + mesh.BIMMeshProperties.is_profile = True obj.data = mesh for arc in self.arcs: @@ -757,10 +758,12 @@ class SetArcIndex(bpy.types.Operator): obj = context.active_object bpy.ops.object.mode_set(mode="OBJECT") selected_vertices = [v.index for v in obj.data.vertices if v.select] + in_group = any([bool(obj.data.vertices[v].groups) for v in selected_vertices]) for group in obj.vertex_groups: group.remove(selected_vertices) - group = obj.vertex_groups.new(name="IFCARCINDEX") - group.add(selected_vertices, 1, "REPLACE") + if in_group is False: + group = obj.vertex_groups.new(name="IFCARCINDEX") + group.add(selected_vertices, 1, "REPLACE") bpy.ops.object.mode_set(mode="EDIT") return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/pset/operator.py b/src/blenderbim/blenderbim/bim/module/pset/operator.py index 2178f74223..0692e4c4ec 100644 --- a/src/blenderbim/blenderbim/bim/module/pset/operator.py +++ b/src/blenderbim/blenderbim/bim/module/pset/operator.py @@ -389,12 +389,13 @@ class GuessQuantity(bpy.types.Operator): return None, "METRE" return unit_settings.length_unit[0 : -len("METERS")], "METRE" + class GuessAllQuantities(bpy.types.Operator): bl_idname = "bim.guess_all_quantities" bl_label = "Guess All Quantities" bl_options = {"REGISTER", "UNDO"} pset_id: bpy.props.IntProperty() - obj_name : bpy.props.StringProperty() + obj_name: bpy.props.StringProperty() obj_type: bpy.props.StringProperty() def execute(self, context): @@ -403,9 +404,9 @@ class GuessAllQuantities(bpy.types.Operator): bpy.ops.bim.enable_pset_editing(pset_id=self.pset_id, obj=self.obj_name, obj_type=self.obj_type) for prop in obj.PsetProperties.properties: if ( - 'length' in prop.name.lower() - or 'area' in prop.name.lower() - or 'volume' in prop.name.lower() + "length" in prop.name.lower() + or "area" in prop.name.lower() + or "volume" in prop.name.lower() or "width" in prop.name.lower() or "height" in prop.name.lower() or "depth" in prop.name.lower() @@ -415,6 +416,7 @@ class GuessAllQuantities(bpy.types.Operator): bpy.ops.bim.edit_pset(obj=self.obj_name, obj_type=self.obj_type) return {"FINISHED"} + class CopyPropertyToSelection(bpy.types.Operator, Operator): bl_idname = "bim.copy_property_to_selection" bl_label = "Copy Property To Selection" diff --git a/src/blenderbim/blenderbim/bim/prop.py b/src/blenderbim/blenderbim/bim/prop.py index ffdfc8bb27..359d10ffb1 100644 --- a/src/blenderbim/blenderbim/bim/prop.py +++ b/src/blenderbim/blenderbim/bim/prop.py @@ -370,6 +370,7 @@ class BIMMeshProperties(PropertyGroup): is_native: BoolProperty(name="Is Native", default=False) is_swept_solid: BoolProperty(name="Is Swept Solid") is_parametric: BoolProperty(name="Is Parametric", default=False) + is_profile: BoolProperty(name="Is Profile", default=False) ifc_definition: StringProperty(name="IFC Definition") ifc_parameters: CollectionProperty(name="IFC Parameters", type=IfcParameter) material_checksum: StringProperty(name="Material Checksum", default="[]")