svn merge -r 39975:40061 https://svn.blender.org/svnroot/bf-blender/trunk/blender
This commit is contained in:
@@ -685,7 +685,6 @@ data_path_update = [
|
||||
]
|
||||
|
||||
|
||||
import bpy
|
||||
from bpy.types import Operator
|
||||
|
||||
|
||||
|
||||
@@ -271,7 +271,8 @@ class BakeAction(Operator):
|
||||
|
||||
|
||||
class ClearUselessActions(Operator):
|
||||
'''Mark actions with no F-Curves for deletion after save+reload of file preserving "action libraries"'''
|
||||
'''Mark actions with no F-Curves for deletion after save+reload of ''' \
|
||||
'''file preserving "action libraries"'''
|
||||
bl_idname = "anim.clear_useless_actions"
|
||||
bl_label = "Clear Useless Actions"
|
||||
bl_options = {'REGISTER', 'UNDO'}
|
||||
@@ -292,12 +293,14 @@ class ClearUselessActions(Operator):
|
||||
if ((self.only_unused is False) or
|
||||
(action.use_fake_user and action.users == 1)):
|
||||
|
||||
# if it has F-Curves, then it's a "action library" (i.e. walk, wave, jump, etc.)
|
||||
# if it has F-Curves, then it's a "action library"
|
||||
# (i.e. walk, wave, jump, etc.)
|
||||
# and should be left alone as that's what fake users are for!
|
||||
if not action.fcurves:
|
||||
# mark action for deletion
|
||||
action.user_clear()
|
||||
removed += 1
|
||||
|
||||
self.report({'INFO'}, "Removed %d empty and/or fake-user only Actions" % (removed))
|
||||
self.report({'INFO'}, "Removed %d empty and/or fake-user only Actions"
|
||||
% removed)
|
||||
return {'FINISHED'}
|
||||
|
||||
@@ -74,6 +74,7 @@ class DATA_PT_skeleton(ArmatureButtonsPanel, Panel):
|
||||
if context.scene.render.engine == "BLENDER_GAME":
|
||||
layout.row().prop(arm, "vert_deformer", expand=True)
|
||||
|
||||
|
||||
class DATA_PT_display(ArmatureButtonsPanel, Panel):
|
||||
bl_label = "Display"
|
||||
|
||||
@@ -185,11 +186,10 @@ class DATA_PT_pose_library(ArmatureButtonsPanel, Panel):
|
||||
layout.template_ID(ob, "pose_library", new="poselib.new", unlink="poselib.unlink")
|
||||
|
||||
if poselib:
|
||||
|
||||
# list of poses in pose library
|
||||
# list of poses in pose library
|
||||
row = layout.row()
|
||||
row.template_list(poselib, "pose_markers", poselib.pose_markers, "active_index", rows=5)
|
||||
|
||||
|
||||
# column of operators for active pose
|
||||
# - goes beside list
|
||||
col = row.column(align=True)
|
||||
@@ -206,9 +206,9 @@ class DATA_PT_pose_library(ArmatureButtonsPanel, Panel):
|
||||
if pose_marker_active is not None:
|
||||
col.operator("poselib.pose_remove", icon='ZOOMOUT', text="").pose = pose_marker_active.name
|
||||
col.operator("poselib.apply_pose", icon='ZOOM_SELECTED', text="").pose_index = poselib.pose_markers.active_index
|
||||
|
||||
col.operator("poselib.action_sanitise", icon='HELP', text="") # XXX: put in menu?
|
||||
|
||||
|
||||
col.operator("poselib.action_sanitise", icon='HELP', text="") # XXX: put in menu?
|
||||
|
||||
# properties for active marker
|
||||
if pose_marker_active is not None:
|
||||
layout.prop(pose_marker_active, "name")
|
||||
|
||||
@@ -616,32 +616,31 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
||||
layout.label(text="Settings can be found inside the Physics context")
|
||||
|
||||
def UV_PROJECT(self, layout, ob, md):
|
||||
if ob.type == 'MESH':
|
||||
split = layout.split()
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Image:")
|
||||
col.prop(md, "image", text="")
|
||||
col = split.column()
|
||||
col.label(text="Image:")
|
||||
col.prop(md, "image", text="")
|
||||
|
||||
col = split.column()
|
||||
col.label(text="UV Layer:")
|
||||
col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
|
||||
col = split.column()
|
||||
col.label(text="UV Layer:")
|
||||
col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
|
||||
|
||||
split = layout.split()
|
||||
col = split.column()
|
||||
col.prop(md, "use_image_override")
|
||||
col.prop(md, "projector_count", text="Projectors")
|
||||
for proj in md.projectors:
|
||||
col.prop(proj, "object", text="")
|
||||
split = layout.split()
|
||||
col = split.column()
|
||||
col.prop(md, "use_image_override")
|
||||
col.prop(md, "projector_count", text="Projectors")
|
||||
for proj in md.projectors:
|
||||
col.prop(proj, "object", text="")
|
||||
|
||||
col = split.column()
|
||||
sub = col.column(align=True)
|
||||
sub.prop(md, "aspect_x", text="Aspect X")
|
||||
sub.prop(md, "aspect_y", text="Aspect Y")
|
||||
col = split.column()
|
||||
sub = col.column(align=True)
|
||||
sub.prop(md, "aspect_x", text="Aspect X")
|
||||
sub.prop(md, "aspect_y", text="Aspect Y")
|
||||
|
||||
sub = col.column(align=True)
|
||||
sub.prop(md, "scale_x", text="Scale X")
|
||||
sub.prop(md, "scale_y", text="Scale Y")
|
||||
sub = col.column(align=True)
|
||||
sub.prop(md, "scale_x", text="Scale X")
|
||||
sub.prop(md, "scale_y", text="Scale Y")
|
||||
|
||||
def WARP(self, layout, ob, md):
|
||||
use_falloff = (md.falloff_type != 'NONE')
|
||||
@@ -745,5 +744,119 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
||||
col.prop(md, "width", slider=True)
|
||||
col.prop(md, "narrowness", slider=True)
|
||||
|
||||
@staticmethod
|
||||
def vertex_weight_mask(layout, ob, md):
|
||||
layout.label(text="Influence/Mask Options:")
|
||||
|
||||
split = layout.split(percentage=0.4)
|
||||
split.label(text="Global Influence:")
|
||||
split.prop(md, "mask_constant", text="")
|
||||
|
||||
if not md.mask_texture:
|
||||
split = layout.split(percentage=0.4)
|
||||
split.label(text="Vertex Group Mask:")
|
||||
split.prop_search(md, "mask_vertex_group", ob, "vertex_groups", text="")
|
||||
|
||||
if not md.mask_vertex_group:
|
||||
split = layout.split(percentage=0.4)
|
||||
split.label(text="Texture Mask:")
|
||||
split.template_ID(md, "mask_texture", new="texture.new")
|
||||
if md.mask_texture:
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Texture Coordinates:")
|
||||
col.prop(md, "mask_tex_mapping", text="")
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Use Channel:")
|
||||
col.prop(md, "mask_tex_use_channel", text="")
|
||||
|
||||
if md.mask_tex_mapping == 'OBJECT':
|
||||
layout.prop(md, "mask_tex_map_object", text="Object")
|
||||
elif md.mask_tex_mapping == 'UV' and ob.type == 'MESH':
|
||||
layout.prop_search(md, "mask_tex_uv_layer", ob.data, "uv_textures")
|
||||
|
||||
def VERTEX_WEIGHT_EDIT(self, layout, ob, md):
|
||||
split = layout.split()
|
||||
col = split.column()
|
||||
col.label(text="Vertex Group:")
|
||||
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Default Weight:")
|
||||
col.prop(md, "default_weight", text="")
|
||||
|
||||
layout.prop(md, "falloff_type")
|
||||
if md.falloff_type == 'CURVE':
|
||||
col = layout.column()
|
||||
col.template_curve_mapping(md, "map_curve")
|
||||
|
||||
split = layout.split(percentage=0.4)
|
||||
split.prop(md, "use_add")
|
||||
row = split.row()
|
||||
row.active = md.use_add
|
||||
row.prop(md, "add_threshold")
|
||||
|
||||
split = layout.split(percentage=0.4)
|
||||
split.prop(md, "use_remove")
|
||||
row = split.row()
|
||||
row.active = md.use_remove
|
||||
row.prop(md, "remove_threshold")
|
||||
|
||||
# Common mask options
|
||||
layout.separator()
|
||||
self.vertex_weight_mask(layout, ob, md)
|
||||
|
||||
def VERTEX_WEIGHT_MIX(self, layout, ob, md):
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Vertex Group A:")
|
||||
col.prop_search(md, "vertex_group_a", ob, "vertex_groups", text="")
|
||||
col.label(text="Default Weight A:")
|
||||
col.prop(md, "default_weight_a", text="")
|
||||
|
||||
col.label(text="Mix Mode:")
|
||||
col.prop(md, "mix_mode", text="")
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Vertex Group B:")
|
||||
col.prop_search(md, "vertex_group_b", ob, "vertex_groups", text="")
|
||||
col.label(text="Default Weight B:")
|
||||
col.prop(md, "default_weight_b", text="")
|
||||
|
||||
col.label(text="Mix Set:")
|
||||
col.prop(md, "mix_set", text="")
|
||||
|
||||
# Common mask options
|
||||
layout.separator()
|
||||
self.vertex_weight_mask(layout, ob, md)
|
||||
|
||||
def VERTEX_WEIGHT_PROXIMITY(self, layout, ob, md):
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Vertex Group:")
|
||||
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Target Object:")
|
||||
col.prop(md, "target", text="")
|
||||
|
||||
layout.row().prop(md, "proximity_mode", expand=True)
|
||||
if md.proximity_mode == 'GEOMETRY':
|
||||
layout.row().prop(md, "proximity_geometry", expand=True)
|
||||
|
||||
row = layout.row()
|
||||
row.prop(md, "min_dist")
|
||||
row.prop(md, "max_dist")
|
||||
|
||||
layout.prop(md, "falloff_type")
|
||||
|
||||
# Common mask options
|
||||
layout.separator()
|
||||
self.vertex_weight_mask(layout, ob, md)
|
||||
|
||||
if __name__ == "__main__": # only for live edit.
|
||||
bpy.utils.register_module(__name__)
|
||||
|
||||
@@ -81,7 +81,7 @@ class DATA_PT_distance(DataButtonsPanel, bpy.types.Panel):
|
||||
speaker = context.speaker
|
||||
|
||||
split = layout.split()
|
||||
|
||||
|
||||
col = split.column()
|
||||
col.label("Volume:")
|
||||
col.prop(speaker, "volume_min", text="Minimum")
|
||||
|
||||
@@ -369,7 +369,7 @@ class RENDER_PT_game_performance(RenderButtonsPanel, Panel):
|
||||
row = col.row()
|
||||
row.prop(gs, "use_frame_rate")
|
||||
row.prop(gs, "use_display_lists")
|
||||
|
||||
|
||||
col.prop(gs, "restrict_animation_updates")
|
||||
|
||||
|
||||
|
||||
@@ -773,7 +773,18 @@ class USERPREF_MT_ndof_settings(Menu):
|
||||
|
||||
layout.separator()
|
||||
layout.label(text="orbit options")
|
||||
layout.prop(input_prefs, "ndof_orbit_invert_axes")
|
||||
if input_prefs.view_rotate_method == 'TRACKBALL':
|
||||
layout.prop(input_prefs, "ndof_roll_invert_axis")
|
||||
layout.prop(input_prefs, "ndof_tilt_invert_axis")
|
||||
layout.prop(input_prefs, "ndof_rotate_invert_axis")
|
||||
else:
|
||||
layout.prop(input_prefs, "ndof_orbit_invert_axes")
|
||||
|
||||
layout.separator()
|
||||
layout.label(text="pan options")
|
||||
layout.prop(input_prefs, "ndof_panx_invert_axis")
|
||||
layout.prop(input_prefs, "ndof_pany_invert_axis")
|
||||
layout.prop(input_prefs, "ndof_panz_invert_axis")
|
||||
|
||||
layout.separator()
|
||||
layout.label(text="fly options")
|
||||
|
||||
Reference in New Issue
Block a user