Files
blender-portable-repo/extensions/blender_org/EdgeFlow/__init__.py
T
2026-03-17 14:30:01 -06:00

165 lines
5.4 KiB
Python

bl_info = {
"name": "EdgeFlow",
"category": "Mesh",
"author": "Benjamin Sauder",
"description": "Helps adjusting geometry to curved surfaces",
"version": (1, 1, 2),
"location": "Mesh > Edge > Set Edge Flow",
"blender": (3, 5, 1),
"tracker_url": "https://github.com/BenjaminSauder/EdgeFlow/issues",
"wiki_url": "https://github.com/BenjaminSauder/EdgeFlow" ,
}
if "bpy" in locals():
import importlib
importlib.reload(util)
importlib.reload(edgeloop)
importlib.reload(interpolate)
importlib.reload(op_set_edge_flow)
importlib.reload(op_set_edge_linear)
importlib.reload(op_set_edge_curve)
importlib.reload(op_set_vertex_curve)
else:
from . import (
util,
interpolate,
edgeloop,
op_set_edge_flow,
op_set_edge_linear,
op_set_edge_curve,
op_set_vertex_curve,
)
import bpy
from bpy.types import Menu
from bpy.props import BoolProperty, EnumProperty
def menu_func_edges(self, context):
layout = self.layout
layout.separator()
layout.operator_context = "INVOKE_DEFAULT"
layout.operator(op_set_edge_flow.SetEdgeFlowOP.bl_idname, text='Set Flow')
layout.operator(op_set_edge_curve.SetEdgeCurveOP.bl_idname, text='Set Curve')
layout.operator(op_set_edge_linear.SetEdgeLinearOP.bl_idname, text='Set Linear')
def menu_func_vertices(self, context):
layout = self.layout
layout.separator()
layout.operator_context = "INVOKE_DEFAULT"
layout.operator(op_set_vertex_curve.SetVertexCurveOp.bl_idname, text='Set Vertex Curve')
list_insertion_options = [
("BOTTOM", "Bottom of Menu", "", 1),
("TOP", "Top of menu", "", 2),
]
def on_preferences_update(self, context):
preferences = bpy.context.preferences.addons[__package__].preferences
bpy.types.VIEW3D_MT_edit_mesh_context_menu.remove(menu_func_context_menu)
if preferences.add_to_rightclick_menu:
if preferences.list_insertion_choice == 'BOTTOM':
bpy.types.VIEW3D_MT_edit_mesh_context_menu.append(menu_func_context_menu)
else:
bpy.types.VIEW3D_MT_edit_mesh_context_menu.prepend(menu_func_context_menu)
class Preferences(bpy.types.AddonPreferences):
bl_idname = __package__
add_to_rightclick_menu: BoolProperty(name="Extend rightlick menu", default=True, update=on_preferences_update)
list_insertion_choice: EnumProperty(name="Add at", items=list_insertion_options, default=2, update=on_preferences_update)
def draw(self, context):
layout = self.layout
layout.use_property_split = True
layout.use_property_decorate = False # No animation.
layout.label(text="UI Options")
col = layout.column(heading="Add commands to rightlick menu")
col.prop(self, "add_to_rightclick_menu", text="")
row = col.row()
row.prop(self, "list_insertion_choice")
row.enabled = self.add_to_rightclick_menu
class VIEW3D_MT_edit_mesh_set_flow(Menu):
bl_label = "Set Flow"
def draw(self, context):
layout = self.layout
mesh_select_mode = context.scene.tool_settings.mesh_select_mode[:3]
if mesh_select_mode == (True, False, False):
layout.operator(op_set_vertex_curve.SetVertexCurveOp.bl_idname, text='Set Vertex Curve')
elif mesh_select_mode == (False, True, False):
layout.operator(op_set_edge_flow.SetEdgeFlowOP.bl_idname, text='Set Flow')
layout.operator(op_set_edge_curve.SetEdgeCurveOP.bl_idname, text='Set Curve')
layout.operator(op_set_edge_linear.SetEdgeLinearOP.bl_idname, text='Set Linear')
def menu_func_context_menu(self, context):
preferences = bpy.context.preferences.addons[__package__].preferences
mesh_select_mode = context.scene.tool_settings.mesh_select_mode[:3]
if mesh_select_mode == (True, False, False) or mesh_select_mode == (False, True, False):
if preferences.list_insertion_choice == 'BOTTOM':
self.layout.separator()
self.layout.menu("VIEW3D_MT_edit_mesh_set_flow")
if preferences.list_insertion_choice == 'TOP':
self.layout.separator()
# stuff which needs to be registered in blender
classes = [
Preferences,
op_set_edge_flow.SetEdgeFlowOP,
op_set_edge_linear.SetEdgeLinearOP,
op_set_edge_curve.SetEdgeCurveOP,
op_set_vertex_curve.SetVertexCurveOp,
VIEW3D_MT_edit_mesh_set_flow,
]
def register():
for c in classes:
bpy.utils.register_class(c)
preferences = bpy.context.preferences.addons[__package__].preferences
bpy.types.VIEW3D_MT_edit_mesh_edges.append(menu_func_edges)
bpy.types.VIEW3D_MT_edit_mesh_vertices.append(menu_func_vertices)
if preferences.add_to_rightclick_menu:
if preferences.list_insertion_choice == 'BOTTOM':
bpy.types.VIEW3D_MT_edit_mesh_context_menu.append(menu_func_context_menu)
else:
bpy.types.VIEW3D_MT_edit_mesh_context_menu.prepend(menu_func_context_menu)
def unregister():
preferences = bpy.context.preferences.addons[__package__].preferences
if preferences.add_to_rightclick_menu:
bpy.types.VIEW3D_MT_edit_mesh_context_menu.remove(menu_func_context_menu)
bpy.types.VIEW3D_MT_edit_mesh_edges.remove(menu_func_edges)
bpy.types.VIEW3D_MT_edit_mesh_vertices.remove(menu_func_vertices)
for c in classes:
bpy.utils.unregister_class(c)