[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26104] trunk/blender: Motion Paths - ( Part 3) Operators, Drawing, and Fixes

Joshua Leung aligorith at gmail.com
Tue Jan 19 12:31:50 CET 2010


Revision: 26104
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26104
Author:   aligorith
Date:     2010-01-19 12:31:49 +0100 (Tue, 19 Jan 2010)

Log Message:
-----------
Motion Paths - (Part 3) Operators, Drawing, and Fixes

This commit makes the new-style Motion Paths work for Objects and Bones. Motion Paths can either be added for Objects (Object buttons) or for Selected Bones in PoseMode (Armature Buttons), and/or removed from these panels too.

Changes:
* Changed the way the baking code worked, since it was better to be able to bake a bunch of objects at once, instead of doing it per object
* Fixed a variety of bugs regarding initialising defaults and reading old files
* Added operators for Objects (like for bones), and replaced the existing code for bones.
* Fixed bug with baking code that was causing it to bake the wrong ranges

Todos:
* Frame number drawing is currently messed up, since the "cached" text drawing takes into account the object transforms.
* The new MotionPath panels currently appear as the first panels in the respective contexts, probably due to the order in which the files are included. This needs some fixing, though not sure what the best way is yet.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/properties_data_armature.py
    trunk/blender/source/blender/blenkernel/BKE_anim.h
    trunk/blender/source/blender/blenkernel/intern/anim.c
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/armature/poseobject.c
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/object/object_edit.c
    trunk/blender/source/blender/editors/object/object_intern.h
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/space_view3d/drawanimviz.c
    trunk/blender/source/blender/editors/space_view3d/drawarmature.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c

Added Paths:
-----------
    trunk/blender/release/scripts/ui/properties_animviz.py

Added: trunk/blender/release/scripts/ui/properties_animviz.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_animviz.py	                        (rev 0)
+++ trunk/blender/release/scripts/ui/properties_animviz.py	2010-01-19 11:31:49 UTC (rev 26104)
@@ -0,0 +1,160 @@
+# ##### 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+import bpy
+
+narrowui = 180
+
+################################################
+# Generic Panels (Independent of DataType)
+
+class MotionPathButtonsPanel(bpy.types.Panel):
+    bl_space_type = 'PROPERTIES'
+    bl_region_type = 'WINDOW'
+    bl_label = "Motion Paths"
+
+    def draw_settings(self, context, avs, wide_ui, bones=False):
+        layout = self.layout
+        
+        mps = avs.motion_paths
+        
+        if wide_ui:
+            layout.prop(mps, "type", expand=True)
+        else:
+            layout.prop(mps, "type", text="")
+
+        split = layout.split()
+
+        col = split.column()
+        sub = col.column(align=True)
+        if (mps.type == 'CURRENT_FRAME'):
+            sub.prop(mps, "before_current", text="Before")
+            sub.prop(mps, "after_current", text="After")
+        elif (mps.type == 'RANGE'):
+            sub.prop(mps, "start_frame", text="Start")
+            sub.prop(mps, "end_frame", text="End")
+
+        sub.prop(mps, "frame_step", text="Step")
+        if bones:
+            col.row().prop(mps, "bake_location", expand=True)
+
+        if wide_ui:
+            col = split.column()
+        col.label(text="Display:")
+        col.prop(mps, "show_frame_numbers", text="Frame Numbers")
+        col.prop(mps, "highlight_keyframes", text="Keyframes")
+        col.prop(mps, "show_keyframe_numbers", text="Keyframe Numbers")
+
+# FIXME: this panel still needs to be ported so that it will work correctly with animviz
+class OnionSkinButtonsPanel(bpy.types.Panel):
+    bl_space_type = 'PROPERTIES'
+    bl_region_type = 'WINDOW'
+    bl_label = "Onion Skinning"
+
+    def draw(self, context):
+        layout = self.layout
+
+        arm = context.armature
+        wide_ui = context.region.width > narrowui
+
+        if wide_ui:
+            layout.prop(arm, "ghost_type", expand=True)
+        else:
+            layout.prop(arm, "ghost_type", text="")
+
+        split = layout.split()
+
+        col = split.column()
+
+        sub = col.column(align=True)
+        if arm.ghost_type == 'RANGE':
+            sub.prop(arm, "ghost_start_frame", text="Start")
+            sub.prop(arm, "ghost_end_frame", text="End")
+            sub.prop(arm, "ghost_size", text="Step")
+        elif arm.ghost_type == 'CURRENT_FRAME':
+            sub.prop(arm, "ghost_step", text="Range")
+            sub.prop(arm, "ghost_size", text="Step")
+
+        if wide_ui:
+            col = split.column()
+        col.label(text="Display:")
+        col.prop(arm, "ghost_only_selected", text="Selected Only")
+
+################################################
+# Specific Panels for DataTypes
+
+class OBJECT_PT_motion_paths(MotionPathButtonsPanel):
+    #bl_label = "Object Motion Paths"
+    bl_context = "object"
+
+    def poll(self, context):
+        return (context.object)
+        
+    def draw(self, context):
+        layout = self.layout
+        
+        ob = context.object 
+        wide_ui = context.region.width > narrowui
+        
+        self.draw_settings(context, ob.animation_visualisation, wide_ui)
+        
+        layout.separator()
+
+        split = layout.split()
+
+        col = split.column()
+        col.operator("object.paths_calculate", text="Calculate Paths")
+
+        if wide_ui:
+            col = split.column()
+        col.operator("object.paths_clear", text="Clear Paths")
+        
+class DATA_PT_motion_paths(MotionPathButtonsPanel):
+    #bl_label = "Bone Motion Paths"
+    bl_context = "data"
+
+    def poll(self, context):
+        # XXX: include posemode check?
+        return (context.object) and (context.armature)
+        
+    def draw(self, context):
+        layout = self.layout
+        
+        ob = context.object 
+        wide_ui = context.region.width > narrowui
+        
+        self.draw_settings(context, ob.pose.animation_visualisation, wide_ui, bones=True)
+        
+        layout.separator()
+
+        split = layout.split()
+
+        col = split.column()
+        col.operator("pose.paths_calculate", text="Calculate Paths")
+
+        if wide_ui:
+            col = split.column()
+        col.operator("pose.paths_clear", text="Clear Paths")
+
+
+
+#bpy.types.register(OBJECT_PT_onion_skinning)
+#bpy.types.register(DATA_PT_onion_skinning)
+bpy.types.register(OBJECT_PT_motion_paths)
+bpy.types.register(DATA_PT_motion_paths)


Property changes on: trunk/blender/release/scripts/ui/properties_animviz.py
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/blender/release/scripts/ui/properties_data_armature.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_data_armature.py	2010-01-19 11:24:42 UTC (rev 26103)
+++ trunk/blender/release/scripts/ui/properties_data_armature.py	2010-01-19 11:31:49 UTC (rev 26104)
@@ -162,54 +162,7 @@
         #row.operator("object.bone_group_select", text="Select")
         #row.operator("object.bone_group_deselect", text="Deselect")
 
-
-class DATA_PT_paths(DataButtonsPanel):
-    bl_label = "Paths"
-
-    def draw(self, context):
-        layout = self.layout
-
-        arm = context.armature
-        wide_ui = context.region.width > narrowui
-
-        if wide_ui:
-            layout.prop(arm, "paths_type", expand=True)
-        else:
-            layout.prop(arm, "paths_type", text="")
-
-        split = layout.split()
-
-        col = split.column()
-        sub = col.column(align=True)
-        if (arm.paths_type == 'CURRENT_FRAME'):
-            sub.prop(arm, "path_before_current", text="Before")
-            sub.prop(arm, "path_after_current", text="After")
-        elif (arm.paths_type == 'RANGE'):
-            sub.prop(arm, "path_start_frame", text="Start")
-            sub.prop(arm, "path_end_frame", text="End")
-
-        sub.prop(arm, "path_size", text="Step")
-        col.row().prop(arm, "paths_location", expand=True)
-
-        if wide_ui:
-            col = split.column()
-        col.label(text="Display:")
-        col.prop(arm, "paths_show_frame_numbers", text="Frame Numbers")
-        col.prop(arm, "paths_highlight_keyframes", text="Keyframes")
-        col.prop(arm, "paths_show_keyframe_numbers", text="Keyframe Numbers")
-
-        layout.separator()
-
-        split = layout.split()
-
-        col = split.column()
-        col.operator("pose.paths_calculate", text="Calculate Paths")
-
-        if wide_ui:
-            col = split.column()
-        col.operator("pose.paths_clear", text="Clear Paths")
-
-
+# TODO: this panel will soon be depreceated too
 class DATA_PT_ghost(DataButtonsPanel):
     bl_label = "Ghost"
 
@@ -302,7 +255,6 @@
 bpy.types.register(DATA_PT_skeleton)
 bpy.types.register(DATA_PT_display)
 bpy.types.register(DATA_PT_bone_groups)
-bpy.types.register(DATA_PT_paths)
 bpy.types.register(DATA_PT_ghost)
 bpy.types.register(DATA_PT_iksolver_itasc)
 

Modified: trunk/blender/source/blender/blenkernel/BKE_anim.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_anim.h	2010-01-19 11:24:42 UTC (rev 26103)
+++ trunk/blender/source/blender/blenkernel/BKE_anim.h	2010-01-19 11:31:49 UTC (rev 26104)
@@ -53,8 +53,10 @@
 void animviz_free_motionpath(struct bMotionPath *mpath);
 
 struct bMotionPath *animviz_verify_motionpaths(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan);
-void animviz_calc_motionpaths(struct Scene *scene, struct Object *ob);
 
+void animviz_get_object_motionpaths(Object *ob, ListBase *targets);
+void animviz_calc_motionpaths(struct Scene *scene, ListBase *targets);
+
 /* ---------------------------------------------------- */
 /* Curve Paths */
 

Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c	2010-01-19 11:24:42 UTC (rev 26103)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c	2010-01-19 11:31:49 UTC (rev 26104)
@@ -154,7 +154,7 @@
 
 /* ------------------- */
 
-/* Setup motion paths for the given data 
+/* Setup motion paths for the given data
  *	- scene: current scene (for frame ranges, etc.)
  *	- ob: object to add paths for (must be provided)
  *	- pchan: posechannel to add paths for (optional; if not provided, object-paths are assumed)
@@ -226,8 +226,10 @@
 
 /* ........ */
 
-/* get list of motion paths to be baked (assumes the list is ready to be used) */
-static void motionpaths_get_bake_targets(Object *ob, ListBase *targets)
+/* get list of motion paths to be baked for the given object
+ * 	- assumes the given list is ready to be used
+ */
+void animviz_get_object_motionpaths(Object *ob, ListBase *targets)
 {
 	MPathTarget *mpt;
 	
@@ -260,6 +262,8 @@
 	}
 }
 
+/* ........ */
+
 /* perform baking for the targets on the current frame */
 static void motionpaths_calc_bake_targets(Scene *scene, ListBase *targets)
 {
@@ -270,8 +274,10 @@
 		bMotionPath *mpath= mpt->mpath;
 		bMotionPathVert *mpv;
 		
-		/* current frame must be within the range the cache works for */
-		if (IN_RANGE(CFRA, mpath->start_frame, mpath->end_frame) == 0)
+		/* current frame must be within the range the cache works for 
+		 *	- is inclusive of the first frame, but not the last otherwise we get buffer overruns

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list