Merging r46725 through r46963 from trunk into soc-2011-tomato
This commit is contained in:
@@ -24,7 +24,9 @@ from bpy.props import StringProperty
|
||||
|
||||
|
||||
def _lang_module_get(sc):
|
||||
return __import__("console_" + sc.language)
|
||||
return __import__("console_" + sc.language,
|
||||
# for python 3.3, maybe a bug???
|
||||
level=0)
|
||||
|
||||
|
||||
class ConsoleExec(Operator):
|
||||
|
||||
@@ -35,7 +35,7 @@ class SelectPattern(Operator):
|
||||
pattern = StringProperty(
|
||||
name="Pattern",
|
||||
description="Name filter using '*' and '?' wildcard chars",
|
||||
maxlen=32,
|
||||
maxlen=64,
|
||||
default="*",
|
||||
)
|
||||
case_sensitive = BoolProperty(
|
||||
|
||||
@@ -452,6 +452,24 @@ class AddPresetTrackingSettings(AddPresetBase, Operator):
|
||||
preset_subdir = "tracking_settings"
|
||||
|
||||
|
||||
class AddPresetNodeColor(AddPresetBase, Operator):
|
||||
'''Add a Node Color Preset'''
|
||||
bl_idname = "node.node_color_preset_add"
|
||||
bl_label = "Add Node Color Preset"
|
||||
preset_menu = "NODE_MT_node_color_presets"
|
||||
|
||||
preset_defines = [
|
||||
"node = bpy.context.active_node"
|
||||
]
|
||||
|
||||
preset_values = [
|
||||
"node.color",
|
||||
"node.use_custom_color"
|
||||
]
|
||||
|
||||
preset_subdir = "node_color"
|
||||
|
||||
|
||||
class AddPresetInterfaceTheme(AddPresetBase, Operator):
|
||||
'''Add a theme preset'''
|
||||
bl_idname = "wm.interface_theme_preset_add"
|
||||
|
||||
@@ -1077,7 +1077,7 @@ class WM_OT_properties_context_change(Operator):
|
||||
|
||||
context = StringProperty(
|
||||
name="Context",
|
||||
maxlen=32,
|
||||
maxlen=64,
|
||||
)
|
||||
|
||||
def execute(self, context):
|
||||
@@ -1545,6 +1545,65 @@ class WM_OT_addon_disable(Operator):
|
||||
addon_utils.disable(self.module)
|
||||
return {'FINISHED'}
|
||||
|
||||
class WM_OT_theme_install(Operator):
|
||||
"Install a theme"
|
||||
bl_idname = "wm.theme_install"
|
||||
bl_label = "Install Theme..."
|
||||
|
||||
overwrite = BoolProperty(
|
||||
name="Overwrite",
|
||||
description="Remove existing theme file if exists",
|
||||
default=True,
|
||||
)
|
||||
filepath = StringProperty(
|
||||
subtype='FILE_PATH',
|
||||
)
|
||||
filter_folder = BoolProperty(
|
||||
name="Filter folders",
|
||||
default=True,
|
||||
options={'HIDDEN'},
|
||||
)
|
||||
filter_glob = StringProperty(
|
||||
default="*.xml",
|
||||
options={'HIDDEN'},
|
||||
)
|
||||
|
||||
def execute(self, context):
|
||||
import os
|
||||
import shutil
|
||||
import traceback
|
||||
|
||||
xmlfile = self.filepath
|
||||
|
||||
path_themes = bpy.utils.user_resource('SCRIPTS','presets/interface_theme',create=True)
|
||||
|
||||
if not path_themes:
|
||||
self.report({'ERROR'}, "Failed to get themes path")
|
||||
return {'CANCELLED'}
|
||||
|
||||
path_dest = os.path.join(path_themes, os.path.basename(xmlfile))
|
||||
|
||||
if not self.overwrite:
|
||||
if os.path.exists(path_dest):
|
||||
self.report({'WARNING'}, "File already installed to %r\n" % path_dest)
|
||||
return {'CANCELLED'}
|
||||
|
||||
try:
|
||||
shutil.copyfile(xmlfile, path_dest)
|
||||
bpy.ops.script.execute_preset(filepath=path_dest,menu_idname="USERPREF_MT_interface_theme_presets")
|
||||
|
||||
except:
|
||||
traceback.print_exc()
|
||||
return {'CANCELLED'}
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
def invoke(self, context, event):
|
||||
wm = context.window_manager
|
||||
wm.fileselect_add(self)
|
||||
return {'RUNNING_MODAL'}
|
||||
|
||||
|
||||
class WM_OT_addon_install(Operator):
|
||||
"Install an addon"
|
||||
|
||||
@@ -70,8 +70,12 @@ class MotionPathButtonsPanel():
|
||||
else:
|
||||
col.operator("object.paths_update", text="Update Paths", icon='OBJECT_DATA')
|
||||
else:
|
||||
col.label(text="Not available yet...", icon='ERROR')
|
||||
col.label(text="Calculate Paths first", icon='INFO')
|
||||
sub = col.column(align=True)
|
||||
sub.label(text="Nothing to show yet...", icon='ERROR')
|
||||
if bones:
|
||||
sub.operator("pose.paths_calculate", text="Calculate...", icon='BONE_DATA')
|
||||
else:
|
||||
sub.operator("object.paths_calculate", text="Calculate...", icon='OBJECT_DATA')
|
||||
|
||||
# Display Settings
|
||||
split = layout.split()
|
||||
|
||||
@@ -262,6 +262,7 @@ class DATA_PT_shape_keys(MeshButtonsPanel, Panel):
|
||||
col.prop_search(kb, "relative_key", key, "key_blocks", text="")
|
||||
|
||||
else:
|
||||
layout.prop(kb, "interpolation")
|
||||
row = layout.column()
|
||||
row.active = enable_edit_value
|
||||
row.prop(key, "eval_time")
|
||||
|
||||
@@ -547,6 +547,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
||||
col.prop(md, "angle")
|
||||
col.prop(md, "steps")
|
||||
col.prop(md, "render_steps")
|
||||
col.prop(md, "use_smooth_shade")
|
||||
|
||||
col = split.column()
|
||||
row = col.row()
|
||||
@@ -838,6 +839,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
||||
if md.mode == 'SHARP':
|
||||
layout.prop(md, "sharpness")
|
||||
|
||||
layout.prop(md, "use_smooth_shade")
|
||||
layout.prop(md, "remove_disconnected_pieces")
|
||||
row = layout.row()
|
||||
row.active = md.remove_disconnected_pieces
|
||||
@@ -957,5 +959,29 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
||||
layout.separator()
|
||||
self.vertex_weight_mask(layout, ob, md)
|
||||
|
||||
def SKIN(self, layout, ob, md):
|
||||
layout.operator("object.skin_armature_create", text="Create Armature")
|
||||
|
||||
layout.separator()
|
||||
layout.prop(md, "branch_smoothing")
|
||||
layout.prop(md, "use_smooth_shade")
|
||||
|
||||
layout.label(text="Selected Vertices:")
|
||||
split = layout.split()
|
||||
|
||||
col = split.column(align=True)
|
||||
col.operator("object.skin_loose_mark_clear", text="Mark Loose").action = "MARK"
|
||||
col.operator("object.skin_loose_mark_clear", text="Clear Loose").action = "CLEAR"
|
||||
|
||||
col = split.column()
|
||||
col.operator("object.skin_root_mark", text="Mark Root")
|
||||
col.operator("object.skin_radii_equalize", text="Equalize Radii")
|
||||
|
||||
layout.label(text="Symmetry Axes:")
|
||||
col = layout.column()
|
||||
col.prop(md, "use_x_symmetry")
|
||||
col.prop(md, "use_y_symmetry")
|
||||
col.prop(md, "use_z_symmetry")
|
||||
|
||||
if __name__ == "__main__": # only for live edit.
|
||||
bpy.utils.register_module(__name__)
|
||||
|
||||
@@ -149,6 +149,7 @@ class DOPESHEET_MT_view(Menu):
|
||||
layout.prop(st, "use_realtime_update")
|
||||
layout.prop(st, "show_frame_indicator")
|
||||
layout.prop(st, "show_sliders")
|
||||
layout.prop(st, "show_group_colors")
|
||||
layout.prop(st, "use_auto_merge_keyframes")
|
||||
layout.prop(st, "use_marker_sync")
|
||||
|
||||
|
||||
@@ -75,6 +75,7 @@ class GRAPH_MT_view(Menu):
|
||||
layout.prop(st, "show_frame_indicator")
|
||||
layout.prop(st, "show_cursor")
|
||||
layout.prop(st, "show_sliders")
|
||||
layout.prop(st, "show_group_colors")
|
||||
layout.prop(st, "use_auto_merge_keyframes")
|
||||
|
||||
layout.separator()
|
||||
|
||||
@@ -156,7 +156,7 @@ class INFO_MT_file_import(Menu):
|
||||
|
||||
def draw(self, context):
|
||||
if hasattr(bpy.types, "WM_OT_collada_import"):
|
||||
self.layout.operator("wm.collada_import", text="COLLADA (.dae)")
|
||||
self.layout.operator("wm.collada_import", text="Collada (Default) (.dae)")
|
||||
|
||||
|
||||
class INFO_MT_file_export(Menu):
|
||||
@@ -165,7 +165,7 @@ class INFO_MT_file_export(Menu):
|
||||
|
||||
def draw(self, context):
|
||||
if hasattr(bpy.types, "WM_OT_collada_export"):
|
||||
self.layout.operator("wm.collada_export", text="COLLADA (.dae)")
|
||||
self.layout.operator("wm.collada_export", text="Collada (Default) (.dae)")
|
||||
|
||||
|
||||
class INFO_MT_file_external_data(Menu):
|
||||
|
||||
@@ -205,5 +205,43 @@ class NODE_PT_properties(Panel):
|
||||
col.prop(snode, "backdrop_y", text="Y")
|
||||
col.operator("node.backimage_move", text="Move")
|
||||
|
||||
class NODE_PT_quality(bpy.types.Panel):
|
||||
bl_space_type = 'NODE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_label = "Quality"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
snode = context.space_data
|
||||
return snode.tree_type == 'COMPOSITING' and snode.node_tree is not None
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
snode = context.space_data
|
||||
tree = snode.node_tree
|
||||
|
||||
layout.prop(tree, "render_quality", text="Render")
|
||||
layout.prop(tree, "edit_quality", text="Edit")
|
||||
layout.prop(tree, "chunksize")
|
||||
layout.prop(tree, "use_opencl")
|
||||
|
||||
|
||||
class NODE_MT_node_color_presets(Menu):
|
||||
"""Predefined node color"""
|
||||
bl_label = "Color Presets"
|
||||
preset_subdir = "node_color"
|
||||
preset_operator = "script.execute_preset"
|
||||
draw = Menu.draw_preset
|
||||
|
||||
|
||||
class NODE_MT_node_color_specials(Menu):
|
||||
bl_label = "Node Color Specials"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator('node.node_copy_color', icon='COPY_ID')
|
||||
|
||||
|
||||
if __name__ == "__main__": # only for live edit.
|
||||
bpy.utils.register_module(__name__)
|
||||
|
||||
@@ -153,7 +153,7 @@ class SEQUENCER_MT_select(Menu):
|
||||
layout.operator_menu_enum("sequencer.select_grouped", "type", text="Grouped")
|
||||
layout.operator("sequencer.select_linked")
|
||||
layout.operator("sequencer.select_all").action = 'TOGGLE'
|
||||
layout.operator("sequencer.select_all").action = 'INVERT'
|
||||
layout.operator("sequencer.select_all", text="Inverse").action = 'INVERT'
|
||||
|
||||
|
||||
class SEQUENCER_MT_marker(Menu):
|
||||
@@ -346,6 +346,7 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, Panel):
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
scene = context.scene
|
||||
frame_current = scene.frame_current
|
||||
strip = act_strip(context)
|
||||
@@ -394,9 +395,9 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, Panel):
|
||||
elem = strip.elements[0]
|
||||
|
||||
if elem and elem.orig_width > 0 and elem.orig_height > 0:
|
||||
col.label(text="Orig Dim" + ": %dx%d" % (elem.orig_width, elem.orig_height))
|
||||
col.label(text="Original Dimension" + ": %dx%d" % (elem.orig_width, elem.orig_height))
|
||||
else:
|
||||
col.label(text="Orig Dim: None")
|
||||
col.label(text="Original Dimension: None")
|
||||
|
||||
|
||||
class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
|
||||
@@ -413,7 +414,6 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
|
||||
|
||||
return strip.type in {'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER',
|
||||
'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP',
|
||||
'PLUGIN',
|
||||
'WIPE', 'GLOW', 'TRANSFORM', 'COLOR', 'SPEED',
|
||||
'MULTICAM', 'ADJUSTMENT'}
|
||||
|
||||
@@ -426,14 +426,11 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
|
||||
col.prop(strip, "input_1")
|
||||
if strip.input_count > 1:
|
||||
col.prop(strip, "input_2")
|
||||
if strip.input_count > 2:
|
||||
col.prop(strip, "input_3")
|
||||
|
||||
if strip.type == 'COLOR':
|
||||
layout.prop(strip, "color")
|
||||
|
||||
elif strip.type == 'WIPE':
|
||||
|
||||
col = layout.column()
|
||||
col.prop(strip, "transition_type")
|
||||
col.label(text="Direction:")
|
||||
@@ -469,7 +466,34 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
|
||||
#layout.prop(strip, "use_frame_blend")
|
||||
|
||||
elif strip.type == 'TRANSFORM':
|
||||
self.draw_panel_transform(strip)
|
||||
layout = self.layout
|
||||
col = layout.column()
|
||||
|
||||
col.prop(strip, "interpolation")
|
||||
col.prop(strip, "translation_unit")
|
||||
col = layout.column(align=True)
|
||||
col.label(text="Position:")
|
||||
col.prop(strip, "translate_start_x", text="X")
|
||||
col.prop(strip, "translate_start_y", text="Y")
|
||||
|
||||
layout.separator()
|
||||
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip, "use_uniform_scale")
|
||||
if (strip.use_uniform_scale):
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip, "scale_start_x", text="Scale")
|
||||
else:
|
||||
col = layout.column(align=True)
|
||||
col.label(text="Scale:")
|
||||
col.prop(strip, "scale_start_x", text="X")
|
||||
col.prop(strip, "scale_start_y", text="Y")
|
||||
|
||||
layout.separator()
|
||||
|
||||
col = layout.column(align=True)
|
||||
col.label(text="Rotation:")
|
||||
col.prop(strip, "rotation_start", text="Rotation")
|
||||
|
||||
elif strip.type == 'MULTICAM':
|
||||
layout.prop(strip, "multicam_source")
|
||||
@@ -492,50 +516,6 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
|
||||
if not strip.use_default_fade:
|
||||
col.prop(strip, "effect_fader", text="Effect fader")
|
||||
|
||||
layout.prop(strip, "use_translation", text="Image Offset:")
|
||||
if strip.use_translation:
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip.transform, "offset_x", text="X")
|
||||
col.prop(strip.transform, "offset_y", text="Y")
|
||||
|
||||
layout.prop(strip, "use_crop", text="Image Crop:")
|
||||
if strip.use_crop:
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip.crop, "max_y")
|
||||
col.prop(strip.crop, "min_x")
|
||||
col.prop(strip.crop, "min_y")
|
||||
col.prop(strip.crop, "max_x")
|
||||
|
||||
def draw_panel_transform(self, strip):
|
||||
layout = self.layout
|
||||
col = layout.column()
|
||||
|
||||
col.prop(strip, "interpolation")
|
||||
col.prop(strip, "translation_unit")
|
||||
col = layout.column(align=True)
|
||||
col.label(text="Position:")
|
||||
col.prop(strip, "translate_start_x", text="X")
|
||||
col.prop(strip, "translate_start_y", text="Y")
|
||||
|
||||
layout.separator()
|
||||
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip, "use_uniform_scale")
|
||||
if (strip.use_uniform_scale):
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip, "scale_start_x", text="Scale")
|
||||
else:
|
||||
col = layout.column(align=True)
|
||||
col.label(text="Scale:")
|
||||
col.prop(strip, "scale_start_x", text="X")
|
||||
col.prop(strip, "scale_start_y", text="Y")
|
||||
|
||||
layout.separator()
|
||||
|
||||
col = layout.column(align=True)
|
||||
col.label(text="Rotation:")
|
||||
col.prop(strip, "rotation_start", text="Rotation")
|
||||
|
||||
|
||||
class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
|
||||
bl_label = "Strip Input"
|
||||
@@ -552,7 +532,7 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
|
||||
return strip.type in {'MOVIE', 'IMAGE', 'SCENE', 'MOVIECLIP', 'META',
|
||||
'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER',
|
||||
'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP',
|
||||
'WIPE', 'GLOW', 'TRANSFORM',
|
||||
'WIPE', 'GLOW', 'TRANSFORM', 'COLOR',
|
||||
'MULTICAM', 'SPEED', 'ADJUSTMENT'}
|
||||
|
||||
def draw(self, context):
|
||||
@@ -565,43 +545,34 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
|
||||
# draw a filename if we have one
|
||||
if seq_type == 'IMAGE':
|
||||
split = layout.split(percentage=0.2)
|
||||
col = split.column()
|
||||
col.label(text="Path:")
|
||||
col = split.column()
|
||||
col.prop(strip, "directory", text="")
|
||||
split.label(text="Path:")
|
||||
split.prop(strip, "directory", text="")
|
||||
|
||||
# Current element for the filename
|
||||
|
||||
elem = strip.getStripElem(context.scene.frame_current)
|
||||
if elem:
|
||||
split = layout.split(percentage=0.2)
|
||||
col = split.column()
|
||||
col.label(text="File:")
|
||||
col = split.column()
|
||||
col.prop(elem, "filename", text="") # strip.elements[0] could be a fallback
|
||||
split.label(text="File:")
|
||||
split.prop(elem, "filename", text="") # strip.elements[0] could be a fallback
|
||||
|
||||
# also accessible from the menu
|
||||
layout.operator("sequencer.change_path")
|
||||
|
||||
elif seq_type == 'MOVIE':
|
||||
split = layout.split(percentage=0.2)
|
||||
col = split.column()
|
||||
col.label(text="Path:")
|
||||
col = split.column()
|
||||
col.prop(strip, "filepath", text="")
|
||||
col.prop(strip, "mpeg_preseek", text="MPEG Preseek")
|
||||
col.prop(strip, "stream_index", text="Stream Index")
|
||||
|
||||
# TODO, sound???
|
||||
# end drawing filename
|
||||
|
||||
layout.prop(strip, "use_translation", text="Image Offset:")
|
||||
split.label(text="Path:")
|
||||
split.prop(strip, "filepath", text="")
|
||||
|
||||
layout.prop(strip, "mpeg_preseek")
|
||||
layout.prop(strip, "stream_index")
|
||||
|
||||
layout.prop(strip, "use_translation", text="Image Offset")
|
||||
if strip.use_translation:
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip.transform, "offset_x", text="X")
|
||||
col.prop(strip.transform, "offset_y", text="Y")
|
||||
|
||||
layout.prop(strip, "use_crop", text="Image Crop:")
|
||||
layout.prop(strip, "use_crop", text="Image Crop")
|
||||
if strip.use_crop:
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip.crop, "max_y")
|
||||
@@ -734,15 +705,17 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel, Panel):
|
||||
col = layout.column()
|
||||
col.label(text="Distortion:")
|
||||
col.prop(strip, "undistort")
|
||||
|
||||
split = layout.split(percentage=0.65)
|
||||
|
||||
row = layout.row()
|
||||
row.label(text="Flip:")
|
||||
row.prop(strip, "use_flip_x", text="X")
|
||||
row.prop(strip, "use_flip_y", text="Y")
|
||||
|
||||
col = layout.column()
|
||||
col = split.column()
|
||||
col.prop(strip, "use_reverse_frames", text="Backwards")
|
||||
col.prop(strip, "use_deinterlace")
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Flip:")
|
||||
col.prop(strip, "use_flip_x", text="X")
|
||||
col.prop(strip, "use_flip_y", text="Y")
|
||||
|
||||
col = layout.column()
|
||||
col.label(text="Colors:")
|
||||
@@ -835,14 +808,6 @@ class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, Panel):
|
||||
#col.active = render.use_sequencer_gl_preview
|
||||
col.prop(render, "sequencer_gl_preview", text="")
|
||||
|
||||
'''
|
||||
col = layout.column()
|
||||
col.prop(render, "use_sequencer_gl_render", text="Open GL Render")
|
||||
col = layout.column()
|
||||
col.active = render.use_sequencer_gl_render
|
||||
col.prop(render, "sequencer_gl_render", text="")
|
||||
'''
|
||||
|
||||
|
||||
class SEQUENCER_PT_view(SequencerButtonsPanel_Output, Panel):
|
||||
bl_label = "View Settings"
|
||||
@@ -854,9 +819,9 @@ class SEQUENCER_PT_view(SequencerButtonsPanel_Output, Panel):
|
||||
|
||||
col = layout.column()
|
||||
if st.display_mode == 'IMAGE':
|
||||
col.prop(st, "draw_overexposed") # text="Zebra"
|
||||
col.prop(st, "draw_overexposed")
|
||||
col.prop(st, "show_safe_margin")
|
||||
if st.display_mode == 'WAVEFORM':
|
||||
elif st.display_mode == 'WAVEFORM':
|
||||
col.prop(st, "show_separate_color")
|
||||
col.prop(st, "proxy_render_size")
|
||||
|
||||
|
||||
@@ -96,6 +96,7 @@ class USERPREF_HT_header(Header):
|
||||
layout.menu("USERPREF_MT_addons_dev_guides")
|
||||
elif userpref.active_section == 'THEMES':
|
||||
layout.operator("ui.reset_default_theme")
|
||||
layout.operator("wm.theme_install")
|
||||
|
||||
|
||||
class USERPREF_PT_tabs(Panel):
|
||||
|
||||
@@ -1906,7 +1906,7 @@ class VIEW3D_MT_edit_mesh_delete(Menu):
|
||||
|
||||
layout.operator("mesh.dissolve")
|
||||
layout.operator("mesh.edge_collapse")
|
||||
layout.operator("mesh.delete_edgeloop")
|
||||
layout.operator("mesh.delete_edgeloop", text="Edge Loop")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_dissolve(Menu):
|
||||
|
||||
@@ -873,6 +873,8 @@ class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel):
|
||||
layout.prop(sculpt, "show_brush")
|
||||
layout.prop(sculpt, "use_deform_only")
|
||||
|
||||
layout.prop(sculpt, "input_samples")
|
||||
|
||||
self.unified_paint_settings(layout, context)
|
||||
|
||||
|
||||
@@ -984,6 +986,8 @@ class VIEW3D_PT_tools_weightpaint_options(Panel, View3DPaintPanel):
|
||||
col.prop(mesh, "use_mirror_x")
|
||||
col.prop(mesh, "use_mirror_topology")
|
||||
|
||||
col.prop(wpaint, "input_samples")
|
||||
|
||||
self.unified_paint_settings(col, context)
|
||||
|
||||
# Commented out because the Apply button isn't an operator yet, making these settings useless
|
||||
@@ -1014,6 +1018,8 @@ class VIEW3D_PT_tools_vertexpaint(Panel, View3DPaintPanel):
|
||||
col.prop(vpaint, "use_normal")
|
||||
col.prop(vpaint, "use_spray")
|
||||
|
||||
col.prop(vpaint, "input_samples")
|
||||
|
||||
self.unified_paint_settings(col, context)
|
||||
|
||||
# Commented out because the Apply button isn't an operator yet, making these settings useless
|
||||
|
||||
Reference in New Issue
Block a user