diff options
Diffstat (limited to 'release/scripts/startup/bl_ui/space_view3d_toolbar.py')
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d_toolbar.py | 1014 |
1 files changed, 304 insertions, 710 deletions
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index 718365ec99d..6ace1466883 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -19,26 +19,30 @@ # <pep8 compliant> from bpy.types import Menu, Panel, UIList from bl_ui.properties_grease_pencil_common import ( - GreasePencilStrokeEditPanel, - GreasePencilStrokeSculptPanel, GreasePencilSculptOptionsPanel, - GreasePencilAppearancePanel, + GreasePencilDisplayPanel, ) from bl_ui.properties_paint_common import ( UnifiedPaintPanel, - brush_mask_texture_settings, - brush_texpaint_common, - brush_texpaint_common_color, - brush_texpaint_common_gradient, - brush_texpaint_common_clone, - brush_texpaint_common_options, + BrushSelectPanel, + ClonePanel, + TextureMaskPanel, + ColorPalettePanel, + StrokePanel, + SmoothStrokePanel, + FalloffPanel, + DisplayPanel, brush_texture_settings, + brush_mask_texture_settings, + brush_settings, + brush_settings_advanced, + draw_color_settings, ) from bl_ui.utils import PresetPanel class VIEW3D_MT_brush_context_menu(Menu): - bl_label = "Material Specials" + bl_label = "Brush Specials" def draw(self, context): layout = self.layout @@ -110,9 +114,8 @@ def draw_vpaint_symmetry(layout, vpaint): col.use_property_decorate = False col.prop(vpaint, "radial_symmetry", text="Radial") -# Most of these panels should not be visible in GP edit modes - +# Most of these panels should not be visible in GP edit modes def is_not_gpencil_edit_mode(context): is_gpmode = ( context.active_object and @@ -318,27 +321,41 @@ class VIEW3D_PT_tools_posemode_options(View3DPanel, Panel): # ********** default tools for paint modes **************** +class TEXTURE_UL_texpaintslots(UIList): + def draw_item(self, _context, layout, _data, item, icon, _active_data, _active_propname, _index): + # mat = data -class View3DPaintPanel(UnifiedPaintPanel): - bl_space_type = 'VIEW_3D' - bl_region_type = 'UI' + if self.layout_type in {'DEFAULT', 'COMPACT'}: + layout.prop(item, "name", text="", emboss=False, icon_value=icon) + elif self.layout_type == 'GRID': + layout.alignment = 'CENTER' + layout.label(text="") + +class View3DPaintPanel(View3DPanel, UnifiedPaintPanel): bl_category = "Tool" +class View3DPaintBrushPanel(View3DPaintPanel): + @classmethod + def poll(cls, context): + mode = cls.get_brush_mode(context) + return mode is not None + + class VIEW3D_PT_tools_particlemode(Panel, View3DPaintPanel): bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_label = "Particle tools" + bl_label = "Particle Tool" bl_options = {'HIDE_HEADER'} @classmethod def poll(cls, context): - settings = cls.paint_settings(context) + settings = context.tool_settings.particle_edit return (settings and settings.brush and context.particle_edit_object) def draw(self, context): layout = self.layout - settings = self.paint_settings(context) + settings = context.tool_settings.particle_edit brush = settings.brush tool = settings.tool @@ -371,19 +388,15 @@ class VIEW3D_PT_tools_particlemode(Panel, View3DPaintPanel): # TODO, move to space_view3d.py -class VIEW3D_PT_tools_brush(Panel, View3DPaintPanel): - bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_label = "Brush" +class VIEW3D_PT_tools_brush_select(Panel, View3DPaintBrushPanel, BrushSelectPanel): + bl_context = ".paint_common" + bl_label = "Brushes" - @classmethod - def poll(cls, context): - settings = cls.paint_settings(context) - return (settings and - settings.brush and - (context.sculpt_object or - context.vertex_paint_object or - context.weight_paint_object or - context.image_paint_object)) + +# TODO, move to space_view3d.py +class VIEW3D_PT_tools_brush_settings(Panel, View3DPaintBrushPanel): + bl_context = ".paint_common" + bl_label = "Brush Settings" def draw(self, context): layout = self.layout @@ -394,158 +407,29 @@ class VIEW3D_PT_tools_brush(Panel, View3DPaintPanel): settings = self.paint_settings(context) brush = settings.brush - if not self.is_popover: - row = layout.row() - row.column().template_ID_preview(settings, "brush", new="brush.add", rows=3, cols=8) - row.menu("VIEW3D_MT_brush_context_menu", icon='DOWNARROW_HLT', text="") - - # Sculpt Mode # - if context.sculpt_object and brush: - from bl_ui.properties_paint_common import ( - brush_basic_sculpt_settings, - ) - - capabilities = brush.sculpt_capabilities - - col = layout.column() - - if not self.is_popover: - brush_basic_sculpt_settings(col, context, brush) - - # normal_radius_factor - col.separator() - row = col.row() - row.prop(brush, "normal_radius_factor", slider=True) - - if brush.sculpt_tool == 'ELASTIC_DEFORM': - col.separator() - row = col.row() - row.prop(brush, "elastic_deform_type") - row = col.row() - row.prop(brush, "elastic_deform_volume_preservation", slider=True) - elif brush.sculpt_tool == 'POSE': - row = col.row() - row.prop(brush, "pose_offset") - row = col.row() - row.prop(brush, "pose_smooth_iterations") - elif brush.sculpt_tool == 'SCRAPE': - row = col.row() - row.prop(brush, "invert_to_scrape_fill", text = "Invert to Fill") - elif brush.sculpt_tool == 'FILL': - row = col.row() - row.prop(brush, "invert_to_scrape_fill", text = "Invert to Scrape") - elif brush.sculpt_tool == 'GRAB': - col.separator() - row = col.row() - row.prop(brush, "use_grab_active_vertex") - elif brush.sculpt_tool == 'MULTIPLANE_SCRAPE': - row = col.row() - row.prop(brush, "multiplane_scrape_angle") - row = col.row() - row.prop(brush, "use_multiplane_scrape_dynamic") - row = col.row() - row.prop(brush, "show_multiplane_scrape_planes_preview") - - # topology_rake_factor - if ( - capabilities.has_topology_rake and - context.sculpt_object.use_dynamic_topology_sculpting - ): - row = col.row() - row.prop(brush, "topology_rake_factor", slider=True) - - # auto_smooth_factor and use_inverse_smooth_pressure - if capabilities.has_auto_smooth: - row = col.row(align=True) - row.prop(brush, "auto_smooth_factor", slider=True) - row.prop(brush, "use_inverse_smooth_pressure", toggle=True, text="") - - # normal_weight - if capabilities.has_normal_weight: - row = col.row(align=True) - row.prop(brush, "normal_weight", slider=True) - - # crease_pinch_factor - if capabilities.has_pinch_factor: - row = col.row(align=True) - if brush.sculpt_tool in {'BLOB', 'SNAKE_HOOK'}: - row.prop(brush, "crease_pinch_factor", slider=True, text="Magnify") - else: - row.prop(brush, "crease_pinch_factor", slider=True, text="Pinch") + brush_settings(layout.column(), context, brush, popover=self.is_popover) - # rake_factor - if capabilities.has_rake_factor: - row = col.row(align=True) - row.prop(brush, "rake_factor", slider=True) - - if brush.sculpt_tool == 'MASK': - col.prop(brush, "mask_tool") - - # plane_offset, use_offset_pressure, use_plane_trim, plane_trim - if capabilities.has_plane_offset: - row = col.row(align=True) - row.prop(brush, "plane_offset", slider=True) - row.prop(brush, "use_offset_pressure", text="") - - col.separator() - - row = col.row() - row.prop(brush, "use_plane_trim", text="Plane Trim") - row = col.row() - row.active = brush.use_plane_trim - row.prop(brush, "plane_trim", slider=True, text="Distance") - - # height - if capabilities.has_height: - row = col.row() - row.prop(brush, "height", slider=True, text="Height") - - # use_persistent, set_persistent_base - if capabilities.has_persistence: - ob = context.sculpt_object - do_persistent = True - - # not supported yet for this case - for md in ob.modifiers: - if md.type == 'MULTIRES': - do_persistent = False - break - - if do_persistent: - col.prop(brush, "use_persistent") - col.operator("sculpt.set_persistent_base") - - # Texture Paint Mode # - - elif context.image_paint_object and brush: - brush_texpaint_common(self, context, layout, brush, settings, projpaint=True) - - # Weight Paint Mode # - elif context.weight_paint_object and brush: - from bl_ui.properties_paint_common import ( - brush_basic_wpaint_settings, - ) - - col = layout.column() +class VIEW3D_PT_tools_brush_settings_advanced(Panel, View3DPaintBrushPanel): + bl_context = ".paint_common" + bl_parent_id = "VIEW3D_PT_tools_brush_settings" + bl_label = "Advanced" + bl_options = {'DEFAULT_CLOSED'} - if not self.is_popover: - brush_basic_wpaint_settings(col, context, brush) + def draw(self, context): + layout = self.layout - # Vertex Paint Mode # - elif context.vertex_paint_object and brush: - from bl_ui.properties_paint_common import ( - brush_basic_vpaint_settings, - ) + layout.use_property_split = True + layout.use_property_decorate = False # No animation. - col = layout.column() + settings = UnifiedPaintPanel.paint_settings(context) + brush = settings.brush - if not self.is_popover: - brush_basic_vpaint_settings(col, context, brush) + brush_settings_advanced(layout.column(), context, brush, self.is_popover) class VIEW3D_PT_tools_brush_color(Panel, View3DPaintPanel): bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_parent_id = "VIEW3D_PT_tools_brush" + bl_parent_id = "VIEW3D_PT_tools_brush_settings" bl_label = "Color Picker" @classmethod @@ -565,138 +449,22 @@ class VIEW3D_PT_tools_brush_color(Panel, View3DPaintPanel): settings = self.paint_settings(context) brush = settings.brush - if context.vertex_paint_object: - brush_texpaint_common_color(self, context, layout, brush, settings, projpaint=True) + draw_color_settings(context, layout, brush, color_type = not context.vertex_paint_object) - else: - layout.prop(brush, "color_type", expand=True) - if brush.color_type == 'COLOR': - brush_texpaint_common_color(self, context, layout, brush, settings, projpaint=True) - elif brush.color_type == 'GRADIENT': - brush_texpaint_common_gradient(self, context, layout, brush, settings, projpaint=True) - - -class VIEW3D_PT_tools_brush_swatches(Panel, View3DPaintPanel): - bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_parent_id = "VIEW3D_PT_tools_brush" +class VIEW3D_PT_tools_brush_swatches(Panel, View3DPaintPanel, ColorPalettePanel): + bl_context = ".paint_common" + bl_parent_id = "VIEW3D_PT_tools_brush_settings" bl_label = "Color Palette" bl_options = {'DEFAULT_CLOSED'} - @classmethod - def poll(cls, context): - settings = cls.paint_settings(context) - brush = settings.brush - if context.image_paint_object: - capabilities = brush.image_paint_capabilities - return capabilities.has_color - - elif context.vertex_paint_object: - capabilities = brush.vertex_paint_capabilities - return capabilities.has_color - def draw(self, context): - layout = self.layout - settings = self.paint_settings(context) - - layout.template_ID(settings, "palette", new="palette.new") - if settings.palette: - layout.template_palette(settings, "palette", color=True) - - -class VIEW3D_PT_tools_brush_clone(Panel, View3DPaintPanel): - bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_parent_id = "VIEW3D_PT_tools_brush" +class VIEW3D_PT_tools_brush_clone(Panel, View3DPaintPanel, ClonePanel): + bl_context = ".paint_common" + bl_parent_id = "VIEW3D_PT_tools_brush_settings" bl_label = "Clone from Paint Slot" bl_options = {'DEFAULT_CLOSED'} - @classmethod - def poll(cls, context): - settings = cls.paint_settings(context) - brush = settings.brush - - return brush.image_tool == 'CLONE' - - def draw_header(self, context): - settings = self.paint_settings(context) - self.layout.prop(settings, "use_clone_layer", text="") - - def draw(self, context): - layout = self.layout - settings = self.paint_settings(context) - brush = settings.brush - - layout.active = settings.use_clone_layer - - brush_texpaint_common_clone(self, context, layout, brush, settings, projpaint=True) - - -class VIEW3D_PT_tools_brush_options(Panel, View3DPaintPanel): - bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_parent_id = "VIEW3D_PT_tools_brush" - bl_label = "Options" - bl_options = {'DEFAULT_CLOSED'} - - def draw(self, context): - layout = self.layout - tool_settings = context.tool_settings - settings = self.paint_settings(context) - brush = settings.brush - capabilities = brush.sculpt_capabilities - - layout.use_property_split = True - layout.use_property_decorate = False # No animation. - - col = layout.column() - - if context.image_paint_object and brush: - brush_texpaint_common_options(self, context, layout, brush, settings, projpaint=True) - - elif context.sculpt_object and brush: - col.prop(brush, "use_automasking_topology") - if capabilities.has_accumulate: - col.prop(brush, "use_accumulate") - - UnifiedPaintPanel.prop_unified_size(col, context, brush, "use_locked_size") - - if capabilities.has_sculpt_plane: - col.prop(brush, "sculpt_plane") - col.prop(brush, "use_original_normal") - col.prop(brush, "use_original_plane") - - col.prop(brush, "use_frontface", text="Front Faces Only") - col.prop(brush, "use_projected") - - elif context.weight_paint_object and brush: - - if brush.weight_tool != 'SMEAR': - col.prop(brush, "use_accumulate") - - col.prop(brush, "use_frontface", text="Front Faces Only") - col.prop(brush, "use_projected") - col.prop(tool_settings, "use_auto_normalize", text="Auto Normalize") - col.prop(tool_settings, "use_multipaint", text="Multi-Paint") - - elif context.vertex_paint_object and brush: - - if brush.vertex_tool != 'SMEAR': - col.prop(brush, "use_accumulate") - - col.prop(brush, "use_alpha") - col.prop(brush, "use_frontface", text="Front Faces Only") - col.prop(brush, "use_projected") - - -class TEXTURE_UL_texpaintslots(UIList): - def draw_item(self, _context, layout, _data, item, icon, _active_data, _active_propname, _index): - # mat = data - - if self.layout_type in {'DEFAULT', 'COMPACT'}: - layout.prop(item, "name", text="", emboss=False, icon_value=icon) - elif self.layout_type == 'GRID': - layout.alignment = 'CENTER' - layout.label(text="") - class VIEW3D_MT_tools_projectpaint_uvlayer(Menu): bl_label = "Clone Layer" @@ -782,9 +550,8 @@ class VIEW3D_PT_slots_projectpaint(View3DPanel, Panel): layout.separator() layout.operator("image.save_all_modified", text="Save All Images", icon='FILE_TICK') -# TODO, move to space_view3d.py - +# TODO, move to space_view3d.py class VIEW3D_PT_stencil_projectpaint(View3DPanel, Panel): bl_category = "Tool" bl_context = ".imagepaint" # dot on purpose (access from topbar) @@ -836,73 +603,17 @@ class VIEW3D_PT_stencil_projectpaint(View3DPanel, Panel): # TODO, move to space_view3d.py -class VIEW3D_PT_tools_brush_display(Panel, View3DPaintPanel): - bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_label = "Display" +class VIEW3D_PT_tools_brush_display(Panel, View3DPaintBrushPanel, DisplayPanel): + bl_context = ".paint_common" + bl_parent_id = "VIEW3D_PT_tools_brush_settings" + bl_label = "Cursor" bl_options = {'DEFAULT_CLOSED'} - @classmethod - def poll(cls, context): - settings = cls.paint_settings(context) - return (settings and - settings.brush and - (context.sculpt_object or - context.vertex_paint_object or - context.weight_paint_object or - context.image_paint_object)) - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - layout.use_property_decorate = False - - settings = self.paint_settings(context) - brush = settings.brush - tex_slot = brush.texture_slot - tex_slot_mask = brush.mask_texture_slot - - col = layout.column() - - row = col.row(align=True) - - sub = row.row(align=True) - sub.prop(brush, "cursor_overlay_alpha", text="Curve Alpha") - sub.prop(brush, "use_cursor_overlay_override", toggle=True, text="", icon='BRUSH_DATA') - row.prop( - brush, "use_cursor_overlay", text="", toggle=True, - icon='HIDE_OFF' if brush.use_cursor_overlay else 'HIDE_ON', - ) - - col.active = brush.brush_capabilities.has_overlay - - if context.image_paint_object or context.sculpt_object or context.vertex_paint_object: - row = col.row(align=True) - - sub = row.row(align=True) - sub.prop(brush, "texture_overlay_alpha", text="Texture Alpha") - sub.prop(brush, "use_primary_overlay_override", toggle=True, text="", icon='BRUSH_DATA') - if tex_slot.map_mode != 'STENCIL': - row.prop( - brush, "use_primary_overlay", text="", toggle=True, - icon='HIDE_OFF' if brush.use_primary_overlay else 'HIDE_ON', - ) - - if context.image_paint_object: - row = col.row(align=True) - - sub = row.row(align=True) - sub.prop(brush, "mask_overlay_alpha", text="Mask Texture Alpha") - sub.prop(brush, "use_secondary_overlay_override", toggle=True, text="", icon='BRUSH_DATA') - if tex_slot_mask.map_mode != 'STENCIL': - row.prop( - brush, "use_secondary_overlay", text="", toggle=True, - icon='HIDE_OFF' if brush.use_secondary_overlay else 'HIDE_ON', - ) - # TODO, move to space_view3d.py class VIEW3D_PT_tools_brush_texture(Panel, View3DPaintPanel): - bl_context = ".paint_common" # dot on purpose (access from topbar) + bl_context = ".paint_common" + bl_parent_id = "VIEW3D_PT_tools_brush_settings" bl_label = "Texture" bl_options = {'DEFAULT_CLOSED'} @@ -926,9 +637,10 @@ class VIEW3D_PT_tools_brush_texture(Panel, View3DPaintPanel): # TODO, move to space_view3d.py -class VIEW3D_PT_tools_mask_texture(Panel, View3DPaintPanel): +class VIEW3D_PT_tools_mask_texture(Panel, View3DPaintPanel, TextureMaskPanel): bl_category = "Tool" bl_context = ".imagepaint" # dot on purpose (access from topbar) + bl_parent_id = "VIEW3D_PT_tools_brush_settings" bl_label = "Texture Mask" bl_options = {'DEFAULT_CLOSED'} @@ -950,151 +662,27 @@ class VIEW3D_PT_tools_mask_texture(Panel, View3DPaintPanel): # TODO, move to space_view3d.py -class VIEW3D_PT_tools_brush_stroke(Panel, View3DPaintPanel): +class VIEW3D_PT_tools_brush_stroke(Panel, View3DPaintPanel, StrokePanel): bl_context = ".paint_common" # dot on purpose (access from topbar) bl_label = "Stroke" + bl_parent_id = "VIEW3D_PT_tools_brush_settings" bl_options = {'DEFAULT_CLOSED'} - @classmethod - def poll(cls, context): - settings = cls.paint_settings(context) - return (settings and - settings.brush and - (context.sculpt_object or - context.vertex_paint_object or - context.weight_paint_object or - context.image_paint_object)) - def draw(self, context): - layout = self.layout - - settings = self.paint_settings(context) - brush = settings.brush - layout.use_property_split = True - layout.use_property_decorate = False - - col = layout.column() - - col.prop(brush, "stroke_method") - - if brush.use_anchor: - col.prop(brush, "use_edge_to_edge", text="Edge To Edge") - - if brush.use_airbrush: - col.prop(brush, "rate", text="Rate", slider=True) - - if brush.use_space: - row = col.row(align=True) - row.prop(brush, "spacing", text="Spacing") - row.prop(brush, "use_pressure_spacing", toggle=True, text="") - col.prop(brush, "dash_ratio") - col.prop(brush, "dash_samples") - - if brush.use_line or brush.use_curve: - row = col.row(align=True) - row.prop(brush, "spacing", text="Spacing") - col.prop(brush, "dash_ratio") - col.prop(brush, "dash_samples") - - if brush.use_curve: - col.template_ID(brush, "paint_curve", new="paintcurve.new") - col.operator("paintcurve.draw") - - if context.sculpt_object: - - if brush.sculpt_capabilities.has_space_attenuation: - col.prop(brush, "use_space_attenuation") - - col.prop(brush, "use_scene_spacing") - - if brush.sculpt_capabilities.has_jitter: - - row = col.row(align=True) - if brush.use_relative_jitter: - row.prop(brush, "jitter", slider=True) - else: - row.prop(brush, "jitter_absolute") - row.prop(brush, "use_relative_jitter", icon_only=True) - row.prop(brush, "use_pressure_jitter", toggle=True, text="") - - else: - - row = col.row(align=True) - if brush.use_relative_jitter: - row.prop(brush, "jitter", slider=True) - else: - row.prop(brush, "jitter_absolute") - row.prop(brush, "use_relative_jitter", icon_only=True) - row.prop(brush, "use_pressure_jitter", toggle=True, text="") - - col.prop(settings, "input_samples") - - -class VIEW3D_PT_tools_brush_stroke_smooth_stroke(Panel, View3DPaintPanel): +class VIEW3D_PT_tools_brush_stroke_smooth_stroke(Panel, View3DPaintPanel, SmoothStrokePanel): bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_label = "Smooth Stroke" + bl_label = "Stabilize Stroke" bl_parent_id = "VIEW3D_PT_tools_brush_stroke" bl_options = {'DEFAULT_CLOSED'} - @classmethod - def poll(cls, context): - settings = cls.paint_settings(context) - brush = settings.brush - if brush.brush_capabilities.has_smooth_stroke: - return True - - def draw_header(self, context): - settings = self.paint_settings(context) - brush = settings.brush - - self.layout.prop(brush, "use_smooth_stroke", text="") - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - layout.use_property_decorate = False - - settings = self.paint_settings(context) - brush = settings.brush - - col = layout.column() - col.active = brush.use_smooth_stroke - col.prop(brush, "smooth_stroke_radius", text="Radius", slider=True) - col.prop(brush, "smooth_stroke_factor", text="Factor", slider=True) - # TODO, move to space_view3d.py -class VIEW3D_PT_tools_brush_falloff(Panel, View3DPaintPanel): +class VIEW3D_PT_tools_brush_falloff(Panel, View3DPaintPanel, FalloffPanel): bl_context = ".paint_common" # dot on purpose (access from topbar) + bl_parent_id = "VIEW3D_PT_tools_brush_settings" bl_label = "Falloff" bl_options = {'DEFAULT_CLOSED'} - @classmethod - def poll(cls, context): - settings = cls.paint_settings(context) - return (settings and settings.brush and settings.brush.curve) - - def draw(self, context): - layout = self.layout - settings = self.paint_settings(context) - brush = settings.brush - - col = layout.column(align=True) - row = col.row(align=True) - row.prop(brush, "curve_preset", text="") - - if brush.curve_preset == 'CUSTOM': - layout.template_curve_mapping(brush, "curve", brush=True) - - col = layout.column(align=True) - row = col.row(align=True) - row.operator("brush.curve_preset", icon='SMOOTHCURVE', text="").shape = 'SMOOTH' - row.operator("brush.curve_preset", icon='SPHERECURVE', text="").shape = 'ROUND' - row.operator("brush.curve_preset", icon='ROOTCURVE', text="").shape = 'ROOT' - row.operator("brush.curve_preset", icon='SHARPCURVE', text="").shape = 'SHARP' - row.operator("brush.curve_preset", icon='LINCURVE', text="").shape = 'LINE' - row.operator("brush.curve_preset", icon='NOCURVE', text="").shape = 'MAX' - class VIEW3D_PT_tools_brush_falloff_frontface(View3DPaintPanel, Panel): bl_context = ".imagepaint" # dot on purpose (access from topbar) @@ -1265,8 +853,6 @@ class VIEW3D_PT_sculpt_voxel_remesh(Panel, View3DPaintPanel): col.operator("object.voxel_remesh", text="Remesh") # TODO, move to space_view3d.py - - class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel): bl_context = ".sculpt_mode" # dot on purpose (access from topbar) bl_label = "Options" @@ -1293,24 +879,6 @@ class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel): col = flow.column() col.prop(sculpt, "use_deform_only") - -class VIEW3D_PT_sculpt_options_unified(Panel, View3DPaintPanel): - bl_context = ".sculpt_mode" # dot on purpose (access from topbar) - bl_parent_id = "VIEW3D_PT_sculpt_options" - bl_label = "Unified Brush" - - @classmethod - def poll(cls, context): - return (context.sculpt_object and context.tool_settings.sculpt) - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - layout.use_property_decorate = False - - self.unified_paint_settings(layout, context) - - class VIEW3D_PT_sculpt_options_gravity(Panel, View3DPaintPanel): bl_context = ".sculpt_mode" # dot on purpose (access from topbar) bl_parent_id = "VIEW3D_PT_sculpt_options" @@ -1409,64 +977,6 @@ class VIEW3D_PT_sculpt_symmetry_for_topbar(Panel): draw = VIEW3D_PT_sculpt_symmetry.draw -class VIEW3D_PT_tools_brush_display_show_brush(Panel, View3DPaintPanel): - bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_label = "Show Brush" - bl_parent_id = "VIEW3D_PT_tools_brush_display" - bl_options = {'DEFAULT_CLOSED'} - - def draw_header(self, context): - settings = self.paint_settings(context) - - self.layout.prop(settings, "show_brush", text="") - - def draw(self, context): - layout = self.layout - - layout.use_property_split = True - layout.use_property_decorate = False - - settings = self.paint_settings(context) - brush = settings.brush - - col = layout.column() - col.active = settings.show_brush - - if context.sculpt_object and context.tool_settings.sculpt: - if brush.sculpt_capabilities.has_secondary_color: - col.prop(brush, "cursor_color_add", text="Add") - col.prop(brush, "cursor_color_subtract", text="Subtract") - else: - col.prop(brush, "cursor_color_add", text="Color") - else: - col.prop(brush, "cursor_color_add", text="Color") - - -class VIEW3D_PT_tools_brush_display_custom_icon(Panel, View3DPaintPanel): - bl_context = ".paint_common" # dot on purpose (access from topbar) - bl_label = "Custom Icon" - bl_parent_id = "VIEW3D_PT_tools_brush_display" - bl_options = {'DEFAULT_CLOSED'} - - def draw_header(self, context): - settings = self.paint_settings(context) - brush = settings.brush - - self.layout.prop(brush, "use_custom_icon", text="") - - def draw(self, context): - layout = self.layout - - layout.use_property_split = True - layout.use_property_decorate = False - - settings = self.paint_settings(context) - brush = settings.brush - - col = layout.column() - col.active = brush.use_custom_icon - col.prop(brush, "icon_filepath", text="") - # ********** default tools for weight-paint **************** @@ -1512,6 +1022,10 @@ class VIEW3D_PT_tools_weightpaint_options(Panel, View3DPaintPanel): wpaint = tool_settings.weight_paint col = layout.column() + + col.prop(tool_settings, "use_auto_normalize", text="Auto Normalize") + col.prop(tool_settings, "use_multipaint", text="Multi-Paint") + col.prop(wpaint, "use_group_restrict") obj = context.weight_paint_object @@ -1523,19 +1037,6 @@ class VIEW3D_PT_tools_weightpaint_options(Panel, View3DPaintPanel): row.prop(mesh, "use_mirror_topology") -class VIEW3D_PT_tools_weightpaint_options_unified(Panel, View3DPaintPanel): - bl_context = ".weightpaint" - bl_label = "Unified Brush" - bl_parent_id = "VIEW3D_PT_tools_weightpaint_options" - - def draw(self, context): - layout = self.layout - - layout.use_property_split = True - layout.use_property_decorate = False - - self.unified_paint_settings(layout, context) - # ********** default tools for vertex-paint **************** @@ -1545,16 +1046,16 @@ class VIEW3D_PT_tools_vertexpaint_options(Panel, View3DPaintPanel): bl_label = "Options" bl_options = {'DEFAULT_CLOSED'} + @classmethod + def poll(self, context): + # This is currently unused, since there aren't any Vertex Paint mode specific options. + return False + def draw(self, context): layout = self.layout - - layout.label(text="Unified Brush") - layout.use_property_split = True layout.use_property_decorate = False - self.unified_paint_settings(layout, context) - # TODO, move to space_view3d.py class VIEW3D_PT_tools_vertexpaint_symmetry(Panel, View3DPaintPanel): @@ -1676,19 +1177,6 @@ class VIEW3D_PT_tools_imagepaint_options(View3DPaintPanel, Panel): col.prop(ipaint, "use_backface_culling", text="Backface Culling") -class VIEW3D_PT_tools_imagepaint_options_unified(Panel, View3DPaintPanel): - bl_context = ".imagepaint" # dot on purpose (access from topbar) - bl_parent_id = "VIEW3D_PT_tools_imagepaint_options" - bl_label = "Unified Brush" - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - layout.use_property_decorate = False - - self.unified_paint_settings(layout, context) - - class VIEW3D_PT_tools_imagepaint_options_cavity(View3DPaintPanel, Panel): bl_context = ".imagepaint" # dot on purpose (access from topbar) bl_label = "Cavity Mask" @@ -1719,13 +1207,14 @@ class VIEW3D_PT_imagepaint_options(View3DPaintPanel): @classmethod def poll(cls, context): + # This is currently unused, since there aren't any Vertex Paint mode specific options. + return False return (context.image_paint_object and context.tool_settings.image_paint) def draw(self, context): layout = self.layout - - col = layout.column() - self.unified_paint_settings(col, context) + layout.use_property_split = True + layout.use_property_decorate = False class VIEW3D_MT_tools_projectpaint_stencil(Menu): @@ -1842,15 +1331,13 @@ class VIEW3D_PT_tools_particlemode_options_display(View3DPanel, Panel): # Grease Pencil drawing brushes -class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, Panel): +class GreasePencilPanel: bl_context = ".greasepencil_paint" - bl_label = "Brush" bl_category = "Tool" @classmethod def poll(cls, context): - is_3d_view = context.space_data.type == 'VIEW_3D' - if is_3d_view: + if context.space_data.type in ('VIEW_3D', 'PROPERTIES'): if context.gpencil_data is None: return False @@ -1859,6 +1346,10 @@ class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, Panel): else: return True + +class VIEW3D_PT_tools_grease_pencil_brush_select(Panel, View3DPanel, GreasePencilPanel): + bl_label = "Brushes" + def draw(self, context): layout = self.layout layout.use_property_split = True @@ -1868,14 +1359,39 @@ class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, Panel): gpencil_paint = tool_settings.gpencil_paint row = layout.row() - col = row.column() - col.template_ID_preview(gpencil_paint, "brush", new="brush.add_gpencil", rows=3, cols=8) + row.column().template_ID_preview(gpencil_paint, "brush", new="brush.add_gpencil", rows=3, cols=8) col = row.column() - brush = gpencil_paint.brush + col.operator("gpencil.brush_presets_create", icon='PRESET_NEW', text="") + + if context.mode == 'PAINT_GPENCIL': + brush = tool_settings.gpencil_paint.brush + gp_settings = brush.gpencil_settings + + col.prop(brush, "use_custom_icon", toggle=True, icon='FILE_IMAGE', text="") + + if(brush.use_custom_icon): + layout.row().prop(brush, "icon_filepath", text="") + else: + layout.row().prop(gp_settings, "gp_icon", text="Icon") + + +class VIEW3D_PT_tools_grease_pencil_brush_settings(Panel, View3DPanel, GreasePencilPanel): + bl_label = "Brush Settings" - sub = col.column(align=True) - sub.operator("gpencil.brush_presets_create", icon='PRESET_NEW', text="") + # What is the point of brush presets? Seems to serve the exact same purpose as brushes themselves?? + def draw_header_preset(self, _context): + VIEW3D_PT_gpencil_brush_presets.draw_panel_header(self.layout) + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + tool_settings = context.scene.tool_settings + gpencil_paint = tool_settings.gpencil_paint + + brush = gpencil_paint.brush if brush is not None: gp_settings = brush.gpencil_settings @@ -1895,63 +1411,68 @@ class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, Panel): from bl_ui.properties_paint_common import ( brush_basic_gpencil_paint_settings, ) - tool = context.workspace.tools.from_space_view3d_mode(context.mode, create=False) - brush_basic_gpencil_paint_settings(layout, context, brush, tool, compact=True, is_toolbar=False) + brush_basic_gpencil_paint_settings(layout, context, brush, compact=False) -# Grease Pencil drawing brushes options -class VIEW3D_PT_tools_grease_pencil_brush_option(View3DPanel, Panel): +class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel): bl_context = ".greasepencil_paint" - bl_label = "Options" + bl_label = "Advanced" + bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings' bl_category = "Tool" + bl_options = {'DEFAULT_CLOSED'} @classmethod def poll(cls, context): brush = context.tool_settings.gpencil_paint.brush - return brush is not None and brush.gpencil_tool not in {'ERASE', 'FILL'} - - def draw_header_preset(self, _context): - VIEW3D_PT_gpencil_brush_presets.draw_panel_header(self.layout) + return brush is not None and brush.gpencil_tool != 'ERASE' def draw(self, context): layout = self.layout layout.use_property_split = True layout.use_property_decorate = False - brush = context.tool_settings.gpencil_paint.brush + tool_settings = context.scene.tool_settings + gpencil_paint = tool_settings.gpencil_paint + brush = gpencil_paint.brush + gp_settings = brush.gpencil_settings + col = layout.column(align=True) if brush is not None: - gp_settings = brush.gpencil_settings - col = layout.column(align=True) - col.prop(gp_settings, "input_samples") - col.separator() + if brush.gpencil_tool != 'FILL': + col.prop(gp_settings, "input_samples") + col.separator() - col.prop(gp_settings, "active_smooth_factor") - col.separator() + col.prop(gp_settings, "active_smooth_factor") + col.separator() - col.prop(gp_settings, "angle", slider=True) - col.prop(gp_settings, "angle_factor", text="Factor", slider=True) + col.prop(gp_settings, "angle", slider=True) + col.prop(gp_settings, "angle_factor", text="Factor", slider=True) - ob = context.object - if ob and brush.gpencil_settings.use_material_pin is False: - ma = ob.active_material - elif brush.gpencil_settings.material: - ma = brush.gpencil_settings.material - else: + ob = context.object ma = None + if ob and brush.gpencil_settings.use_material_pin is False: + ma = ob.active_material + elif brush.gpencil_settings.material: + ma = brush.gpencil_settings.material - col.separator() - subcol = col.column(align=True) - if ma and ma.grease_pencil.mode == 'LINE': - subcol.enabled = False - subcol.prop(gp_settings, "gradient_factor", slider=True) - subcol.prop(gp_settings, "gradient_shape") + col.separator() + subcol = col.column(align=True) + if ma and ma.grease_pencil.mode == 'LINE': + subcol.enabled = False + subcol.prop(gp_settings, "gradient_factor", slider=True) + subcol.prop(gp_settings, "gradient_shape") + + elif brush.gpencil_tool == 'FILL': + col.prop(gp_settings, "fill_factor", text="Resolution") + if gp_settings.fill_draw_mode != 'STROKE': + col.prop(gp_settings, "show_fill", text="Ignore Transparent Strokes") + col.prop(gp_settings, "fill_threshold", text="Threshold") -class VIEW3D_PT_tools_grease_pencil_brush_stabilizer(View3DPanel, Panel): +class VIEW3D_PT_tools_grease_pencil_brush_stabilizer(Panel, View3DPanel): bl_context = ".greasepencil_paint" - bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_option' - bl_label = "Stabilize" + bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings' + bl_label = "Stabilize Stroke" bl_category = "Tool" bl_options = {'DEFAULT_CLOSED'} @@ -1961,6 +1482,8 @@ class VIEW3D_PT_tools_grease_pencil_brush_stabilizer(View3DPanel, Panel): return brush is not None and brush.gpencil_tool == 'DRAW' def draw_header(self, context): + if self.is_popover: return + brush = context.tool_settings.gpencil_paint.brush gp_settings = brush.gpencil_settings self.layout.prop(gp_settings, "use_settings_stabilizer", text="") @@ -1972,24 +1495,34 @@ class VIEW3D_PT_tools_grease_pencil_brush_stabilizer(View3DPanel, Panel): brush = context.tool_settings.gpencil_paint.brush gp_settings = brush.gpencil_settings - layout.active = gp_settings.use_settings_stabilizer - layout.prop(brush, "smooth_stroke_radius", text="Radius", slider=True) - layout.prop(brush, "smooth_stroke_factor", text="Factor", slider=True) + if self.is_popover: + row = layout.row() + row.prop(gp_settings, "use_settings_stabilizer", text="") + row.label(text=self.bl_label) + + col = layout.column() + col.active = gp_settings.use_settings_stabilizer + col.prop(brush, "smooth_stroke_radius", text="Radius", slider=True) + col.prop(brush, "smooth_stroke_factor", text="Factor", slider=True) -class VIEW3D_PT_tools_grease_pencil_brush_settings(View3DPanel, Panel): + +class VIEW3D_PT_tools_grease_pencil_brush_post_processing(View3DPanel, Panel): bl_context = ".greasepencil_paint" - bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_option' + bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings' bl_label = "Post-Processing" bl_category = "Tool" + bl_options = {'DEFAULT_CLOSED'} @classmethod def poll(cls, context): brush = context.tool_settings.gpencil_paint.brush - return brush is not None and brush.gpencil_tool != 'ERASE' + return brush is not None and brush.gpencil_tool not in ('ERASE', 'FILL') def draw_header(self, context): + if self.is_popover: return + brush = context.tool_settings.gpencil_paint.brush gp_settings = brush.gpencil_settings self.layout.prop(gp_settings, "use_settings_postprocess", text="") @@ -2001,30 +1534,37 @@ class VIEW3D_PT_tools_grease_pencil_brush_settings(View3DPanel, Panel): brush = context.tool_settings.gpencil_paint.brush gp_settings = brush.gpencil_settings - layout.active = gp_settings.use_settings_postprocess - col = layout.column(align=True) - col.prop(gp_settings, "pen_smooth_factor") - col.prop(gp_settings, "pen_smooth_steps") + if self.is_popover: + row = layout.row() + row.prop(gp_settings, "use_settings_postprocess", text="") + row.label(text=self.bl_label) - col = layout.column(align=True) - col.prop(gp_settings, "pen_thick_smooth_factor") - col.prop(gp_settings, "pen_thick_smooth_steps", text="Iterations") + col = layout.column() + col.active = gp_settings.use_settings_postprocess - col = layout.column(align=True) - col.prop(gp_settings, "pen_subdivision_steps") - col.prop(gp_settings, "random_subdiv", text="Randomness", slider=True) + col1 = col.column(align=True) + col1.prop(gp_settings, "pen_smooth_factor") + col1.prop(gp_settings, "pen_smooth_steps") - col = layout.column(align=True) - col.prop(gp_settings, "simplify_factor") + col1 = col.column(align=True) + col1.prop(gp_settings, "pen_thick_smooth_factor") + col1.prop(gp_settings, "pen_thick_smooth_steps", text="Iterations") - col = layout.column(align=True) - col.prop(gp_settings, "trim") + col1 = col.column(align=True) + col1.prop(gp_settings, "pen_subdivision_steps") + col1.prop(gp_settings, "random_subdiv", text="Randomness", slider=True) + + col1 = col.column(align=True) + col1.prop(gp_settings, "simplify_factor") + + col1 = col.column(align=True) + col1.prop(gp_settings, "trim") class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel): bl_context = ".greasepencil_paint" - bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_option' + bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings' bl_label = "Randomize" bl_category = "Tool" bl_options = {'DEFAULT_CLOSED'} @@ -2032,9 +1572,11 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel): @classmethod def poll(cls, context): brush = context.tool_settings.gpencil_paint.brush - return brush is not None and brush.gpencil_tool != 'ERASE' + return brush is not None and brush.gpencil_tool not in ('ERASE', 'FILL') def draw_header(self, context): + if self.is_popover: return + brush = context.tool_settings.gpencil_paint.brush gp_settings = brush.gpencil_settings self.layout.prop(gp_settings, "use_settings_random", text="") @@ -2046,13 +1588,20 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel): brush = context.tool_settings.gpencil_paint.brush gp_settings = brush.gpencil_settings - layout.active = gp_settings.use_settings_random - layout.prop(gp_settings, "random_pressure", text="Pressure", slider=True) - layout.prop(gp_settings, "random_strength", text="Strength", slider=True) - layout.prop(gp_settings, "uv_random", text="UV", slider=True) + if self.is_popover: + row = layout.row() + row.prop(gp_settings, "use_settings_random", text="") + row.label(text=self.bl_label) - row = layout.row(align=True) + col = layout.column() + col.active = gp_settings.use_settings_random + + col.prop(gp_settings, "random_pressure", text="Pressure", slider=True) + col.prop(gp_settings, "random_strength", text="Strength", slider=True) + col.prop(gp_settings, "uv_random", text="UV", slider=True) + + row = col.row(align=True) row.prop(gp_settings, "pen_jitter", slider=True) row.prop(gp_settings, "use_jitter_pressure", text="", icon='STYLUS_PRESSURE') @@ -2060,6 +1609,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel): # Grease Pencil drawingcurves class VIEW3D_PT_tools_grease_pencil_brushcurves(View3DPanel, Panel): bl_context = ".greasepencil_paint" + bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings' bl_label = "Curves" bl_category = "Tool" bl_options = {'DEFAULT_CLOSED'} @@ -2124,12 +1674,6 @@ class VIEW3D_PT_tools_grease_pencil_brushcurves_jitter(View3DPanel, Panel): use_negative_slope=True) -# Grease Pencil stroke editing tools -class VIEW3D_PT_tools_grease_pencil_edit(GreasePencilStrokeEditPanel, Panel): - bl_space_type = 'VIEW_3D' - bl_category = "Tool" - - # Grease Pencil stroke interpolation tools class VIEW3D_PT_tools_grease_pencil_interpolate(Panel): bl_space_type = 'VIEW_3D' @@ -2178,18 +1722,47 @@ class VIEW3D_PT_tools_grease_pencil_interpolate(Panel): # Grease Pencil stroke sculpting tools -class VIEW3D_PT_tools_grease_pencil_sculpt(GreasePencilStrokeSculptPanel, View3DPanel, Panel): + +class VIEW3D_PT_tools_grease_pencil_sculpt_select(Panel, View3DPanel): bl_context = ".greasepencil_sculpt" - bl_category = "Tools" - bl_label = "Brush" + bl_label = "Brushes" bl_category = "Tool" + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + settings = context.tool_settings.gpencil_sculpt + brush = settings.brush + + layout.template_icon_view(settings, "sculpt_tool", show_labels=True) + + +class VIEW3D_PT_tools_grease_pencil_sculpt_settings(Panel, View3DPanel): + bl_context = ".greasepencil_sculpt" + bl_category = "Tool" + bl_label = "Brush Settings" + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + settings = context.tool_settings.gpencil_sculpt + brush = settings.brush + + if not self.is_popover: + from bl_ui.properties_paint_common import ( + brush_basic_gpencil_sculpt_settings, + ) + brush_basic_gpencil_sculpt_settings(layout, context, brush) # Grease Pencil weight painting tools -class VIEW3D_PT_tools_grease_pencil_weight_paint(View3DPanel, Panel): + +class VIEW3D_PT_tools_grease_pencil_weight_paint_select(View3DPanel, Panel): bl_context = ".greasepencil_weight" - bl_category = "Tools" - bl_label = "Brush" + bl_label = "Brushes" bl_category = "Tool" def draw(self, context): @@ -2202,42 +1775,58 @@ class VIEW3D_PT_tools_grease_pencil_weight_paint(View3DPanel, Panel): layout.template_icon_view(settings, "weight_tool", show_labels=True) - col = layout.column() + +class VIEW3D_PT_tools_grease_pencil_weight_paint_settings(Panel, View3DPanel): + bl_context = ".greasepencil_weight" + bl_category = "Tool" + bl_label = "Brush Settings" + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False + + settings = context.tool_settings.gpencil_sculpt + brush = settings.brush + if not self.is_popover: from bl_ui.properties_paint_common import ( brush_basic_gpencil_weight_settings, ) - brush_basic_gpencil_weight_settings(col, context, brush) + brush_basic_gpencil_weight_settings(layout, context, brush) -# Grease Pencil Brush Appearance (one for each mode) -class VIEW3D_PT_tools_grease_pencil_paint_appearance(GreasePencilAppearancePanel, View3DPanel, Panel): - bl_context = ".greasepencil_paint" - bl_label = "Display" +class VIEW3D_PT_tools_grease_pencil_sculpt_options(GreasePencilSculptOptionsPanel, Panel, View3DPanel): + bl_context = ".greasepencil_sculpt" + bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_sculpt_settings' bl_category = "Tool" + bl_label = "Sculpt Strokes" -class VIEW3D_PT_tools_grease_pencil_sculpt_appearance(GreasePencilAppearancePanel, View3DPanel, Panel): - bl_context = ".greasepencil_sculpt" - bl_label = "Display" +# Grease Pencil Brush Appearance (one for each mode) +class VIEW3D_PT_tools_grease_pencil_paint_appearance(GreasePencilDisplayPanel, Panel, View3DPanel): + bl_context = ".greasepencil_paint" + bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings' + bl_label = "Cursor" bl_category = "Tool" -class VIEW3D_PT_tools_grease_pencil_sculpt_options(GreasePencilSculptOptionsPanel, View3DPanel, Panel): +class VIEW3D_PT_tools_grease_pencil_sculpt_appearance(GreasePencilDisplayPanel, Panel, View3DPanel): bl_context = ".greasepencil_sculpt" - bl_label = "Sculpt Strokes" - bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_sculpt' + bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_sculpt_settings' + bl_label = "Cursor" bl_category = "Tool" -class VIEW3D_PT_tools_grease_pencil_weight_appearance(GreasePencilAppearancePanel, View3DPanel, Panel): +class VIEW3D_PT_tools_grease_pencil_weight_appearance(GreasePencilDisplayPanel, Panel, View3DPanel): bl_context = ".greasepencil_weight" - bl_label = "Display" + bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_weight_paint_settings' bl_category = "Tool" + bl_label = "Cursor" -class VIEW3D_PT_gpencil_brush_presets(PresetPanel, Panel): +class VIEW3D_PT_gpencil_brush_presets(Panel, PresetPanel): """Brush settings""" bl_label = "Brush Presets" preset_subdir = "gpencil_brush" @@ -2255,12 +1844,14 @@ classes = ( VIEW3D_PT_tools_curveedit_options_stroke, VIEW3D_PT_tools_armatureedit_options, VIEW3D_PT_tools_posemode_options, + VIEW3D_PT_slots_projectpaint, - VIEW3D_PT_tools_brush, + VIEW3D_PT_tools_brush_select, + VIEW3D_PT_tools_brush_settings, VIEW3D_PT_tools_brush_color, VIEW3D_PT_tools_brush_swatches, + VIEW3D_PT_tools_brush_settings_advanced, VIEW3D_PT_tools_brush_clone, - VIEW3D_PT_tools_brush_options, TEXTURE_UL_texpaintslots, VIEW3D_MT_tools_projectpaint_uvlayer, VIEW3D_PT_stencil_projectpaint, @@ -2272,49 +1863,52 @@ classes = ( VIEW3D_PT_tools_brush_falloff_frontface, VIEW3D_PT_tools_brush_falloff_normal, VIEW3D_PT_tools_brush_display, - VIEW3D_PT_tools_brush_display_show_brush, - VIEW3D_PT_tools_brush_display_custom_icon, + VIEW3D_PT_sculpt_dyntopo, VIEW3D_PT_sculpt_dyntopo_remesh, VIEW3D_PT_sculpt_voxel_remesh, VIEW3D_PT_sculpt_symmetry, VIEW3D_PT_sculpt_symmetry_for_topbar, VIEW3D_PT_sculpt_options, - VIEW3D_PT_sculpt_options_unified, VIEW3D_PT_sculpt_options_gravity, + VIEW3D_PT_tools_weightpaint_symmetry, VIEW3D_PT_tools_weightpaint_symmetry_for_topbar, VIEW3D_PT_tools_weightpaint_options, - VIEW3D_PT_tools_weightpaint_options_unified, + VIEW3D_PT_tools_vertexpaint_symmetry, VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar, VIEW3D_PT_tools_vertexpaint_options, + VIEW3D_PT_tools_imagepaint_symmetry, VIEW3D_PT_tools_imagepaint_options, VIEW3D_PT_tools_imagepaint_options_cavity, - VIEW3D_PT_tools_imagepaint_options_unified, VIEW3D_PT_tools_imagepaint_options_external, VIEW3D_MT_tools_projectpaint_stencil, + VIEW3D_PT_tools_particlemode, VIEW3D_PT_tools_particlemode_options, VIEW3D_PT_tools_particlemode_options_shapecut, VIEW3D_PT_tools_particlemode_options_display, VIEW3D_PT_gpencil_brush_presets, - VIEW3D_PT_tools_grease_pencil_brush, - VIEW3D_PT_tools_grease_pencil_brush_option, + VIEW3D_PT_tools_grease_pencil_brush_select, VIEW3D_PT_tools_grease_pencil_brush_settings, + VIEW3D_PT_tools_grease_pencil_brush_advanced, + VIEW3D_PT_tools_grease_pencil_brush_post_processing, VIEW3D_PT_tools_grease_pencil_brush_stabilizer, VIEW3D_PT_tools_grease_pencil_brush_random, VIEW3D_PT_tools_grease_pencil_brushcurves, VIEW3D_PT_tools_grease_pencil_brushcurves_sensitivity, VIEW3D_PT_tools_grease_pencil_brushcurves_strength, VIEW3D_PT_tools_grease_pencil_brushcurves_jitter, - VIEW3D_PT_tools_grease_pencil_sculpt, - VIEW3D_PT_tools_grease_pencil_weight_paint, VIEW3D_PT_tools_grease_pencil_paint_appearance, + VIEW3D_PT_tools_grease_pencil_sculpt_select, + VIEW3D_PT_tools_grease_pencil_sculpt_settings, VIEW3D_PT_tools_grease_pencil_sculpt_options, VIEW3D_PT_tools_grease_pencil_sculpt_appearance, + VIEW3D_PT_tools_grease_pencil_weight_paint_select, + VIEW3D_PT_tools_grease_pencil_weight_paint_settings, VIEW3D_PT_tools_grease_pencil_weight_appearance, VIEW3D_PT_tools_grease_pencil_interpolate, ) |