diff options
Diffstat (limited to 'space_view3d_brush_menus/curve_menu.py')
-rw-r--r-- | space_view3d_brush_menus/curve_menu.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/space_view3d_brush_menus/curve_menu.py b/space_view3d_brush_menus/curve_menu.py new file mode 100644 index 00000000..5a836031 --- /dev/null +++ b/space_view3d_brush_menus/curve_menu.py @@ -0,0 +1,88 @@ +# gpl author: Ryan Inch (Imaginer) + +import bpy +from bpy.types import ( + Operator, + Menu, + ) +from . import utils_core + + +class BrushCurveMenu(Menu): + bl_label = "Curve" + bl_idname = "VIEW3D_MT_sv3_brush_curve_menu" + + @classmethod + def poll(self, context): + return utils_core.get_mode() in ( + 'SCULPT', 'VERTEX_PAINT', + 'WEIGHT_PAINT', 'TEXTURE_PAINT', + 'PARTICLE_EDIT' + ) + + def draw(self, context): + layout = self.layout + curves = (("Smooth", "SMOOTH", "SMOOTHCURVE"), + ("Sphere", "ROUND", "SPHERECURVE"), + ("Root", "ROOT", "ROOTCURVE"), + ("Sharp", "SHARP", "SHARPCURVE"), + ("Linear", "LINE", "LINCURVE"), + ("Constant", "MAX", "NOCURVE")) + + # add the top slider + layout.row().operator(CurvePopup.bl_idname, icon="RNDCURVE") + layout.row().separator() + + # add the rest of the menu items + for curve in curves: + item = layout.row().operator("brush.curve_preset", + text=curve[0], icon=curve[2]) + item.shape = curve[1] + + +class CurvePopup(Operator): + """Edit Falloff Curve""" + bl_label = "Adjust Curve" + bl_idname = "view3d.sv3_curve_popup" + bl_description = "Edit Falloff Curve" + bl_options = {'REGISTER'} + + @classmethod + def poll(self, context): + return utils_core.get_mode() in ( + 'SCULPT', 'VERTEX_PAINT', + 'WEIGHT_PAINT', 'TEXTURE_PAINT' + ) + + def draw(self, context): + layout = self.layout + has_brush = utils_core.get_brush_link(context, types="brush") + + if utils_core.get_mode() == 'SCULPT' or \ + utils_core.get_mode() == 'VERTEX_PAINT' or \ + utils_core.get_mode() == 'WEIGHT_PAINT' or \ + utils_core.get_mode() == 'TEXTURE_PAINT': + if has_brush: + layout.column().template_curve_mapping(has_brush, + "curve", brush=True) + else: + layout.row().label(text="No brushes available", icon="INFO") + else: + layout.row().label(text="No brushes available", icon="INFO") + + def execute(self, context): + return context.window_manager.invoke_popup(self, width=180) + + +classes = ( + BrushCurveMenu, + CurvePopup + ) + +def register(): + for cls in classes: + bpy.utils.register_class(cls) + +def unregister(): + for cls in classes: + bpy.utils.unregister_class(cls) |