Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'space_view3d_brush_menus/dyntopo_menu.py')
-rw-r--r--space_view3d_brush_menus/dyntopo_menu.py125
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')
+