diff options
Diffstat (limited to 'space_view3d_brush_menus/dyntopo_menu.py')
-rw-r--r-- | space_view3d_brush_menus/dyntopo_menu.py | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/space_view3d_brush_menus/dyntopo_menu.py b/space_view3d_brush_menus/dyntopo_menu.py new file mode 100644 index 00000000..a15c562c --- /dev/null +++ b/space_view3d_brush_menus/dyntopo_menu.py @@ -0,0 +1,125 @@ +from bpy.props import * +from .Utils.core import * + +class DynTopoMenu(bpy.types.Menu): + bl_label = "Dyntopo" + bl_idname = "VIEW3D_MT_sv3_dyntopo" + + @classmethod + def poll(self, context): + if get_mode() == sculpt: + return True + else: + return False + + def draw(self, context): + menu = Menu(self) + + if context.object.use_dynamic_topology_sculpting: + menu.add_item().operator("sculpt.dynamic_topology_toggle", "Disable Dynamic Topology") + + menu.add_item().separator() + + menu.add_item().menu(DynDetailMenu.bl_idname) + menu.add_item().menu(DetailMethodMenu.bl_idname) + + menu.add_item().separator() + + menu.add_item().operator("sculpt.optimize") + if bpy.context.tool_settings.sculpt.detail_type_method == 'CONSTANT': + menu.add_item().operator("sculpt.detail_flood_fill") + + menu.add_item().menu(SymmetrizeMenu.bl_idname) + menu.add_item().prop(context.tool_settings.sculpt, "use_smooth_shading", toggle=True) + + else: + menu.add_item() + menu.current_item.operator_context = 'INVOKE_DEFAULT' + menu.current_item.operator("sculpt.dynamic_topology_toggle", "Enable Dynamic Topology") + + +class DynDetailMenu(bpy.types.Menu): + bl_label = "Detail Size" + bl_idname = "VIEW3D_MT_sv3_dyn_detail" + + def init(self): + settings = [["40", 40], ["30", 30], ["20", 20], + ["10", 10], ["5", 5], ["1", 1]] + + if bpy.context.tool_settings.sculpt.detail_type_method == 'RELATIVE': + datapath = "tool_settings.sculpt.detail_size" + slider_setting = "detail_size" + + else: + datapath = "tool_settings.sculpt.constant_detail" + slider_setting = "constant_detail" + + return settings, datapath, slider_setting + + def draw(self, context): + settings, datapath, slider_setting = self.init() + menu = Menu(self) + + # add the top slider + menu.add_item().prop(context.tool_settings.sculpt, slider_setting, slider=True) + menu.add_item().separator() + + # add the rest of the menu items + for i in range(len(settings)): + menuprop(menu.add_item(), settings[i][0], settings[i][1], datapath, + icon='RADIOBUT_OFF', disable=True, + disable_icon='RADIOBUT_ON') + + +class DetailMethodMenu(bpy.types.Menu): + bl_label = "Detail Method" + bl_idname = "VIEW3D_MT_sv3_detail_method_menu" + + def draw(self, context): + menu = Menu(self) + refine_path = "tool_settings.sculpt.detail_refine_method" + type_path = "tool_settings.sculpt.detail_type_method" + + refine_items = [["Subdivide Edges", 'SUBDIVIDE'], + ["Collapse Edges", 'COLLAPSE'], + ["Subdivide Collapse", 'SUBDIVIDE_COLLAPSE']] + + type_items = [["Relative Detail", 'RELATIVE'], + ["Constant Detail", 'CONSTANT']] + + menu.add_item().label("Refine") + menu.add_item().separator() + + # add the refine menu items + for item in refine_items: + menuprop(menu.add_item(), item[0], item[1], refine_path, disable=True, + icon='RADIOBUT_OFF', disable_icon='RADIOBUT_ON') + + menu.add_item().label("") + + menu.add_item().label("Type") + menu.add_item().separator() + + # add the type menu items + for item in type_items: + menuprop(menu.add_item(), item[0], item[1], type_path, disable=True, + icon='RADIOBUT_OFF', disable_icon='RADIOBUT_ON') + + +class SymmetrizeMenu(bpy.types.Menu): + bl_label = "Symmetrize" + bl_idname = "VIEW3D_MT_sv3_symmetrize_menu" + + def draw(self, context): + menu = Menu(self) + path = "tool_settings.sculpt.symmetrize_direction" + + # add the the symmetrize operator to the menu + menu.add_item().operator("sculpt.symmetrize") + menu.add_item().separator() + + # add the rest of the menu items + for item in context.tool_settings.sculpt.bl_rna.properties['symmetrize_direction'].enum_items: + menuprop(menu.add_item(), item.name, item.identifier, path, disable=True, + icon='RADIOBUT_OFF', disable_icon='RADIOBUT_ON') + |