Set and unset 3-point arcs only for profiles

This commit is contained in:
Dion Moult
2022-09-26 22:06:11 +10:00
parent 5e50a15b41
commit 4bbcf3fa1e
4 changed files with 56 additions and 32 deletions
@@ -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()
@@ -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"}
@@ -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"
+1
View File
@@ -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="[]")