Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Marmont <Kdaf>2022-02-28 14:23:56 +0300
committerSybren A. Stüvel <sybren@blender.org>2022-02-28 14:28:19 +0300
commit1558b270e9fcbc2e23fa248b0e7e770dddae155c (patch)
tree1377db616df34efcb147664788808d85338ba19d /release/scripts/startup/bl_ui
parent6f23401e984ee5bad621109ff78eeb6850044fee (diff)
Animation: Sensible frame range for motion paths
Motion paths can now be initialised to more sensible frame ranges, rather than simply 1-250: - Scene Frame Range - Selected Keyframes - All Keyframes The Motion Paths operators are now also added to the Object context menu and the Dopesheet context menu. The scene range operator was removed, because the operators now automatically find the range when baking the motion paths. The clear operator now appears separated in "Selected Only" and "All", because it was not clear for the user what the button was doing. Reviewed By: sybren, looch Maniphest Tasks: T93047 Differential Revision: https://developer.blender.org/D13687
Diffstat (limited to 'release/scripts/startup/bl_ui')
-rw-r--r--release/scripts/startup/bl_ui/properties_animviz.py68
-rw-r--r--release/scripts/startup/bl_ui/space_dopesheet.py4
-rw-r--r--release/scripts/startup/bl_ui/space_graph.py3
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py29
4 files changed, 66 insertions, 38 deletions
diff --git a/release/scripts/startup/bl_ui/properties_animviz.py b/release/scripts/startup/bl_ui/properties_animviz.py
index 548ce72c429..629399084ba 100644
--- a/release/scripts/startup/bl_ui/properties_animviz.py
+++ b/release/scripts/startup/bl_ui/properties_animviz.py
@@ -24,55 +24,55 @@ class MotionPathButtonsPanel:
layout.use_property_split = True
layout.use_property_decorate = False
- row = layout.row(align=True)
- row.prop(mps, "type")
- if mps.type == 'RANGE':
- if bones:
- row.operator("pose.paths_range_update", text="", icon='TIME')
- else:
- row.operator("object.paths_range_update", text="", icon='TIME')
-
+ # Display Range
+ col = layout.column(align=True)
+ col.prop(mps, "type")
+ col = layout.column(align=True)
if mps.type == 'CURRENT_FRAME':
- col = layout.column(align=True)
col.prop(mps, "frame_before", text="Frame Range Before")
col.prop(mps, "frame_after", text="After")
- col.prop(mps, "frame_step", text="Step")
- elif mps.type == 'RANGE':
- col = layout.column(align=True)
- col.prop(mps, "frame_start", text="Frame Range Start")
- col.prop(mps, "frame_end", text="End")
- col.prop(mps, "frame_step", text="Step")
+ col.prop(mps, "frame_step", text="Step")
+
+ # Calculation Range
+ col = layout.column(align=True)
+ row = col.row(align=True)
+ row.prop(mps, "range", text="Calculation Range")
if mpath:
col = layout.column(align=True)
- col.enabled = False
- if bones:
- col.prop(mpath, "frame_start", text="Bone Cache From")
- else:
- col.prop(mpath, "frame_start", text="Cache From")
- col.prop(mpath, "frame_end", text="To")
+ row = col.row(align=True)
+ row.enabled = False
+ row.prop(mpath, "frame_start", text="Cached Range")
+ row.prop(mpath, "frame_end", text="")
col = layout.column(align=True)
-
+ row = col.row(align=True)
if bones:
- col.operator("pose.paths_update", text="Update Paths", icon='BONE_DATA')
+ row.operator("pose.paths_update", text="Update Paths", icon='BONE_DATA')
+ row.operator("pose.paths_clear", text="", icon='X').only_selected = True
+ row = col.row(align=True)
+ row.operator("object.paths_update_visible", text="Update All Paths", icon='WORLD')
+ row.operator("pose.paths_clear", text="", icon='X').only_selected = False
else:
- col.operator("object.paths_update", text="Update Paths", icon='OBJECT_DATA')
+ row.operator("object.paths_update", text="Update Paths", icon='OBJECT_DATA')
+ row.operator("object.paths_clear", text="", icon='X').only_selected = True
+ row = col.row(align=True)
+ row.operator("object.paths_update_visible", text="Update All Paths", icon='WORLD')
+ row.operator("object.paths_clear", text="", icon='X').only_selected = False
else:
col = layout.column(align=True)
- col.label(text="Nothing to show yet...", icon='ERROR')
+ col.label(text="No Motion Path generated yet", icon='ERROR')
+ # Don't invoke settings popup because settings are right above
+ col.operator_context = 'EXEC_REGION_WIN'
if bones:
- col.operator("pose.paths_calculate", text="Calculate...", icon='BONE_DATA')
+ col.operator(
+ "pose.paths_calculate", text="Generate for selected bones", icon='BONE_DATA')
else:
- col.operator("object.paths_calculate", text="Calculate...", icon='OBJECT_DATA')
-
- row = col.row(align=True)
- row.operator("object.paths_update_visible", text="Update All Paths", icon='WORLD')
- if bones:
- row.operator("pose.paths_clear", text="", icon='X')
- else:
- row.operator("object.paths_clear", text="", icon='X')
+ col.operator("object.paths_calculate", text="Generate", icon='OBJECT_DATA')
+ row = col.row(align=True)
+ row.operator("object.paths_update_visible", text="Update All Paths", icon='WORLD')
+ row.operator("object.paths_clear", text="", icon='X').only_selected = False
class MotionPathButtonsPanel_display:
diff --git a/release/scripts/startup/bl_ui/space_dopesheet.py b/release/scripts/startup/bl_ui/space_dopesheet.py
index 8e328e7cf2b..7b7fc9dcf77 100644
--- a/release/scripts/startup/bl_ui/space_dopesheet.py
+++ b/release/scripts/startup/bl_ui/space_dopesheet.py
@@ -663,6 +663,10 @@ class DOPESHEET_MT_context_menu(Menu):
layout.operator_menu_enum("action.mirror", "type", text="Mirror")
layout.operator_menu_enum("action.snap", "type", text="Snap")
+ if st.mode == 'DOPESHEET':
+ layout.separator()
+ layout.menu("VIEW3D_MT_motion_path")
+
class DOPESHEET_MT_channel_context_menu(Menu):
bl_label = "Dope Sheet Channel Context Menu"
diff --git a/release/scripts/startup/bl_ui/space_graph.py b/release/scripts/startup/bl_ui/space_graph.py
index 6f9ef12c3b7..6bc11d51ca0 100644
--- a/release/scripts/startup/bl_ui/space_graph.py
+++ b/release/scripts/startup/bl_ui/space_graph.py
@@ -390,6 +390,9 @@ class GRAPH_MT_context_menu(Menu):
layout.operator_menu_enum("graph.mirror", "type", text="Mirror")
layout.operator_menu_enum("graph.snap", "type", text="Snap")
+ layout.separator()
+ layout.menu("VIEW3D_MT_motion_path")
+
class GRAPH_MT_pivot_pie(Menu):
bl_label = "Pivot Point"
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 2ac6358bd9c..5dedb3c4029 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -2383,6 +2383,25 @@ class VIEW3D_MT_object_clear(Menu):
layout.operator("object.origin_clear", text="Origin")
+class VIEW3D_MT_motion_path(Menu):
+ bl_label = "Motion Paths"
+
+ def draw(self, _context):
+ layout = self.layout
+ ob = _context.object
+ if ob.mode == 'OBJECT':
+ layout.operator("object.paths_calculate")
+ layout.operator("object.paths_update")
+ layout.operator("object.paths_update_visible")
+ layout.operator("object.paths_clear", text="Clear all").only_selected = False
+ layout.operator("object.paths_clear", text="Clear selected").only_selected = True
+ elif ob.mode == 'POSE':
+ layout.operator("pose.paths_calculate")
+ layout.operator("pose.paths_update")
+ layout.operator("pose.paths_clear", text="Clear all").only_selected = False
+ layout.operator("pose.paths_clear", text="Clear selected").only_selected = True
+
+
class VIEW3D_MT_object_context_menu(Menu):
bl_label = "Object Context Menu"
@@ -2584,6 +2603,7 @@ class VIEW3D_MT_object_context_menu(Menu):
layout.menu("VIEW3D_MT_mirror")
layout.menu("VIEW3D_MT_snap")
layout.menu("VIEW3D_MT_object_parent")
+ layout.menu("VIEW3D_MT_motion_path")
layout.operator_context = 'INVOKE_REGION_WIN'
if view and view.local_view:
@@ -3631,10 +3651,10 @@ class VIEW3D_MT_pose_context_menu(Menu):
layout.separator()
- layout.operator("pose.paths_calculate", text="Calculate Motion Paths")
- layout.operator("pose.paths_clear", text="Clear Motion Paths")
- layout.operator("pose.paths_update", text="Update Armature Motion Paths")
- layout.operator("object.paths_update_visible", text="Update All Motion Paths")
+ layout.operator("pose.paths_calculate")
+ layout.operator("pose.paths_update")
+ layout.operator("pose.paths_clear", text="Clear all").only_selected = False
+ layout.operator("pose.paths_clear", text="Clear selected").only_selected = True
layout.separator()
@@ -7623,6 +7643,7 @@ classes = (
VIEW3D_MT_object_quick_effects,
VIEW3D_MT_object_showhide,
VIEW3D_MT_object_cleanup,
+ VIEW3D_MT_motion_path,
VIEW3D_MT_make_single_user,
VIEW3D_MT_make_links,
VIEW3D_MT_brush_paint_modes,