[Bf-extensions-cvs] [f57d359e] master: space_view3d_brush_menus; moved to contrib: T63750
meta-androcto
noreply at git.blender.org
Fri May 24 02:03:11 CEST 2019
Commit: f57d359e7e0892d0d5848086aa2e0f9f334f230d
Author: meta-androcto
Date: Fri May 24 10:02:48 2019 +1000
Branches: master
https://developer.blender.org/rBACf57d359e7e0892d0d5848086aa2e0f9f334f230d
space_view3d_brush_menus; moved to contrib: T63750
===================================================================
A space_view3d_brush_menus/__init__.py
A space_view3d_brush_menus/brush_menu.py
A space_view3d_brush_menus/brushes.py
A space_view3d_brush_menus/curve_menu.py
A space_view3d_brush_menus/dyntopo_menu.py
A space_view3d_brush_menus/stroke_menu.py
A space_view3d_brush_menus/symmetry_menu.py
A space_view3d_brush_menus/texture_menu.py
A space_view3d_brush_menus/utils_core.py
===================================================================
diff --git a/space_view3d_brush_menus/__init__.py b/space_view3d_brush_menus/__init__.py
new file mode 100644
index 00000000..891a22de
--- /dev/null
+++ b/space_view3d_brush_menus/__init__.py
@@ -0,0 +1,131 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+# Modified by Meta-Androcto
+
+""" Copyright 2011 GPL licence applies"""
+
+bl_info = {
+ "name": "Sculpt/Paint Brush Menus",
+ "description": "Fast access to brushes & tools in Sculpt and Paint Modes",
+ "author": "Ryan Inch (Imaginer)",
+ "version": (1, 1, 6),
+ "blender": (2, 78, 0),
+ "location": "Alt V in Sculpt/Paint Modes",
+ "warning": '',
+ "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6/Py/"
+ "Scripts/3D_interaction/Advanced_UI_Menus",
+ "category": "3D View"}
+
+
+if "bpy" in locals():
+ import importlib
+ importlib.reload(utils_core)
+ importlib.reload(brush_menu)
+ importlib.reload(brushes)
+ importlib.reload(curve_menu)
+ importlib.reload(dyntopo_menu)
+ importlib.reload(stroke_menu)
+ importlib.reload(symmetry_menu)
+ importlib.reload(texture_menu)
+else:
+ from . import utils_core
+ from . import brush_menu
+ from . import brushes
+ from . import curve_menu
+ from . import dyntopo_menu
+ from . import stroke_menu
+ from . import symmetry_menu
+ from . import texture_menu
+
+
+import bpy
+from bpy.types import AddonPreferences
+from bpy.props import (
+ EnumProperty,
+ IntProperty,
+ )
+
+
+class VIEW3D_MT_Brushes_Pref(AddonPreferences):
+ bl_idname = __name__
+
+ use_brushes_menu_type: EnumProperty(
+ name="Choose Brushes Selection",
+ description="",
+ items=[('lists', "Use compact Menus",
+ "Use more compact menus instead \n"
+ "of thumbnails for displaying brushes"),
+ ('template', "Template ID Preview",
+ "Use Template ID preview menu (thumbnails) for brushes\n"
+ "(Still part of the menu)"),
+ ('popup', "Pop up menu",
+ "Use a separate pop-up window for accessing brushes")
+ ],
+ default='lists'
+ )
+ column_set: IntProperty(
+ name="Number of Columns",
+ description="Number of columns used for the brushes menu",
+ default=2,
+ min=1,
+ max=10
+ )
+
+ def draw(self, context):
+ layout = self.layout
+
+ col = layout.column(align=True)
+ row = col.row(align=True)
+ row.prop(self, "use_brushes_menu_type", expand=True)
+ col.prop(self, "column_set", slider=True)
+
+
+# New hotkeys and registration
+
+addon_keymaps = []
+
+
+def register():
+ # register all blender classes
+ bpy.utils.register_module(__name__)
+
+ # set the add-on name variable to access the preferences
+ utils_core.get_addon_name = __name__
+
+ # register hotkeys
+ wm = bpy.context.window_manager
+ modes = ('Sculpt', 'Vertex Paint', 'Weight Paint', 'Image Paint', 'Particle')
+
+ for mode in modes:
+ km = wm.keyconfigs.addon.keymaps.new(name=mode)
+ kmi = km.keymap_items.new('wm.call_menu', 'V', 'PRESS', alt=True)
+ kmi.properties.name = "VIEW3D_MT_sv3_brush_options"
+ addon_keymaps.append((km, kmi))
+
+
+def unregister():
+ for km, kmi in addon_keymaps:
+ km.keymap_items.remove(kmi)
+ addon_keymaps.clear()
+
+ # unregister all blender classes
+ bpy.utils.unregister_module(__name__)
+
+
+if __name__ == "__main__":
+ register()
diff --git a/space_view3d_brush_menus/brush_menu.py b/space_view3d_brush_menus/brush_menu.py
new file mode 100644
index 00000000..d4c6863f
--- /dev/null
+++ b/space_view3d_brush_menus/brush_menu.py
@@ -0,0 +1,625 @@
+# gpl author: Ryan Inch (Imaginer)
+
+import bpy
+from bpy.types import (
+ Operator,
+ Menu,
+ )
+from bpy.props import BoolProperty
+from . import utils_core
+from . import brushes
+from bl_ui.properties_paint_common import UnifiedPaintPanel
+
+class BrushOptionsMenu(Menu):
+ bl_label = "Brush Options"
+ bl_idname = "VIEW3D_MT_sv3_brush_options"
+
+ @classmethod
+ def poll(self, context):
+ return utils_core.get_mode() in (
+ 'SCULPT', 'VERTEX_PAINT',
+ 'WEIGHT_PAINT', 'TEXTURE_PAINT',
+ 'PARTICLE_EDIT'
+ )
+
+ def draw_brushes(self, layout, h_brush, ico, context):
+ if utils_core.addon_settings(lists=True) == 'popup' or not h_brush:
+ layout.row().operator(
+ "view3d.sv3_brush_menu_popup", text="Brush",
+ icon=ico
+ )
+ else:
+ layout.row().menu(
+ "VIEW3D_MT_sv3_brushes_menu", text="Brush",
+ icon=ico
+ )
+
+ def draw(self, context):
+ mode = utils_core.get_mode()
+ layout = self.layout
+
+ if mode == 'SCULPT':
+ self.sculpt(mode, layout, context)
+
+ elif mode in ('VERTEX_PAINT', 'WEIGHT_PAINT'):
+ self.vw_paint(mode, layout, context)
+
+ elif mode == 'TEXTURE_PAINT':
+ self.texpaint(mode, layout, context)
+
+ else:
+ self.particle(layout, context)
+
+ def sculpt(self, mode, layout, context):
+ has_brush = utils_core.get_brush_link(context, types="brush")
+ icons = brushes.brush_icon[mode][has_brush.sculpt_tool] if \
+ has_brush else "BRUSH_DATA"
+
+ self.draw_brushes(layout, has_brush, icons, context)
+
+ layout.row().menu(BrushRadiusMenu.bl_idname)
+
+ if has_brush:
+ # if the active brush is unlinked these menus don't do anything
+ layout.row().menu(BrushStrengthMenu.bl_idname)
+ layout.row().menu(BrushAutosmoothMenu.bl_idname)
+ layout.row().menu(BrushModeMenu.bl_idname)
+ layout.row().menu("VIEW3D_MT_sv3_texture_menu")
+ layout.row().menu("VIEW3D_MT_sv3_stroke_options")
+ layout.row().menu("VIEW3D_MT_sv3_brush_curve_menu")
+
+ layout.row().menu("VIEW3D_MT_sv3_dyntopo")
+ layout.row().menu("VIEW3D_MT_sv3_master_symmetry_menu")
+
+ def vw_paint(self, mode, layout, context):
+ has_brush = utils_core.get_brush_link(context, types="brush")
+ icons = brushes.brush_icon[mode][has_brush.vertex_tool] if \
+ has_brush else "BRUSH_DATA"
+
+ if mode == 'VERTEX_PAINT':
+ layout.row().operator(ColorPickerPopup.bl_idname, icon="COLOR")
+ layout.row().separator()
+
+ self.draw_brushes(layout, has_brush, icons, context)
+
+ if mode == 'VERTEX_PAINT':
+ layout.row().menu(BrushRadiusMenu.bl_idname)
+
+ if has_brush:
+ # if the active brush is unlinked these menus don't do anything
+ layout.row().menu(BrushStrengthMenu.bl_idname)
+ layout.row().menu(BrushModeMenu.bl_idname)
+ layout.row().menu("VIEW3D_MT_sv3_texture_menu")
+ layout.row().menu("VIEW3D_MT_sv3_stroke_options")
+ layout.row().menu("VIEW3D_MT_sv3_brush_curve_menu")
+
+ if mode == 'WEIGHT_PAINT':
+ layout.row().menu(BrushWeightMenu.bl_idname)
+ layout.row().menu(BrushRadiusMenu.bl_idname)
+
+ if has_brush:
+ # if the active brush is unlinked these menus don't do anything
+ layout.row().menu(BrushStrengthMenu.bl_idname)
+ layout.row().menu(BrushModeMenu.bl_idname)
+ layout.row().menu("VIEW3D_MT_sv3_stroke_options")
+ layout.row().menu("VIEW3D_MT_sv3_brush_curve_menu")
+
+ def texpaint(self, mode, layout, context):
+ toolsettings = context.tool_settings.image_paint
+
+ if context.image_paint_object and not toolsettings.detect_data():
+ layout.row().label(text="Missing Data", icon="INFO")
+ layout.row().label(text="See Tool Shelf", icon="BACK")
+ else:
+ has_brush = utils_core.get_brush_link(context, types="brush")
+ if has_brush and has_brush.image_tool in {'DRAW', 'FILL'} and \
+ has_brush.blend not in {'ERASE_ALPHA', 'ADD_ALPHA'}:
+ layout.row().operator(ColorPickerPopup.bl_idname, icon="COLOR")
+ layout.row().separator()
+
+ icons = brushes.brush_icon[mode][has_brush.image_tool] if \
+ has_brush else "BRUSH_DATA"
+
+ self.draw_brushes(layout, has_brush, icons, context)
+
+ if has_brush:
+ # if the active brush is unlinked these menus don't do anything
+ if has_brush and has_brush.image_tool in {'MASK'}:
+ layout.row().menu(BrushWeightMenu.bl_idname, text="Mask Value")
+
+ if has_brush and has_brush.image_tool not in {'FILL'}:
+ layout.row().menu(BrushRadiusMenu.bl_idname)
+
+ layout.row().menu(BrushStrengthMenu.bl_idname)
+
+ if has_brush and has_brush.image_tool in {'DRAW'}:
+ layout.row().menu(BrushModeMenu.bl_idname)
+
+ layout.row().menu("VIEW3D_MT_sv3_texture_menu")
+ layout.row().menu("VIEW3D_MT_sv3_stroke_options")
+ layout.row().menu("VIEW3D_MT_sv3_brush_curve_menu")
+
+ layout.row().menu("VIEW3D_
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list