[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24860] trunk/blender: - use a generic bone class so all 3 bone types (Edit/Pose/Armature) - can have the same utility functions, length, parent_recursive, parent_index(), etc
Campbell Barton
ideasman42 at gmail.com
Tue Nov 24 12:58:49 CET 2009
Revision: 24860
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24860
Author: campbellbarton
Date: 2009-11-24 12:58:49 +0100 (Tue, 24 Nov 2009)
Log Message:
-----------
- use a generic bone class so all 3 bone types (Edit/Pose/Armature) - can have the same utility functions, length, parent_recursive, parent_index(), etc
- change the wiki url to avoid redirects (from Luka)
- removed pose prefix from pose_head/pose_tail/pose_matrix
Modified Paths:
--------------
trunk/blender/release/scripts/modules/bpy_types.py
trunk/blender/release/scripts/ui/space_info.py
trunk/blender/source/blender/editors/space_view3d/drawobject.c
trunk/blender/source/blender/makesrna/intern/rna_pose.c
Modified: trunk/blender/release/scripts/modules/bpy_types.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_types.py 2009-11-24 11:48:16 UTC (rev 24859)
+++ trunk/blender/release/scripts/modules/bpy_types.py 2009-11-24 11:58:49 UTC (rev 24860)
@@ -41,16 +41,22 @@
return [child for child in bpy.data.objects if child.parent == self]
-class PoseBone(StructRNA):
-
+class _GenericBone:
+ '''
+ functions for bones, common between Armature/Pose/Edit bones.
+ internal subclassing use only.
+ '''
def parent_index(self, parent_test):
'''
The same as 'bone in other_bone.parent_recursive' but saved generating a list.
'''
+ # use the name so different types can be tested.
+ name = parent_test.name
+
parent = self.parent
i = 1
while parent:
- if parent == parent_test:
+ if parent.name == name:
return i
parent = parent.parent
i += 1
@@ -58,12 +64,6 @@
return 0
@property
- def children(self):
- import bpy
- obj = self.id_data
- return [child for child in obj.pose.bones if child.parent == self]
-
- @property
def parent_recursive(self):
parent_list = []
parent = self.parent
@@ -75,12 +75,19 @@
parent = parent.parent
return parent_list
-
+
@property
+ def length(self):
+ return (self.head - self.tail).length
+
+ @property
+ def children(self):
+ return [child for child in self._other_bones if child.parent == self]
+
+ @property
def children_recursive(self):
- obj = self.id_data
bones_children = []
- for bone in obj.pose.bones:
+ for bone in self._other_bones:
index = bone.parent_index(self)
if index:
bones_children.append((index, bone))
@@ -89,13 +96,33 @@
bones_children.sort(key=lambda bone_pair: bone_pair[0])
return [bone for index, bone in bones_children]
-
-class Bone(StructRNA):
@property
- def length(self):
- return (self.head - self.tail).length
+ def _other_bones(self):
+ id_data = self.id_data
+ id_data_type = type(id_data)
+
+ if id_data_type == bpy_types.Object:
+ bones = id_data.pose.bones
+ elif id_data_type == bpy_types.Armature:
+ bones = id_data.edit_bones
+ if not bones: # not in editmode
+ bones = id_data.bones
+
+ return bones
+class PoseBone(StructRNA, _GenericBone):
+ pass
+
+
+class Bone(StructRNA, _GenericBone):
+ pass
+
+
+class EditBone(StructRNA, _GenericBone):
+ pass
+
+
def ord_ind(i1,i2):
if i1<i2: return i1,i2
return i2,i1
Modified: trunk/blender/release/scripts/ui/space_info.py
===================================================================
--- trunk/blender/release/scripts/ui/space_info.py 2009-11-24 11:48:16 UTC (rev 24859)
+++ trunk/blender/release/scripts/ui/space_info.py 2009-11-24 11:58:49 UTC (rev 24860)
@@ -298,7 +298,7 @@
'''The Blender Wiki manual'''
bl_idname = "help.manual"
bl_label = "Manual"
- _url = 'http://wiki.blender.org/index.php/Manual'
+ _url = 'http://wiki.blender.org/index.php/Doc:Manual'
class HELP_OT_release_logs(HelpOperator):
Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c 2009-11-24 11:48:16 UTC (rev 24859)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c 2009-11-24 11:58:49 UTC (rev 24860)
@@ -4329,7 +4329,7 @@
static void draw_sb_motion(Scene *scene, Object *ob)
{
SoftBody *sb = 0;
- if (sb= ob->soft){
+ if ((sb= ob->soft)){
if(sb->solverflags & SBSO_MONITOR ||sb->solverflags & SBSO_ESTIMATEIPO){
/* draw com */
float rt[3][3],sc[3][3],tr[3][3];
Modified: trunk/blender/source/blender/makesrna/intern/rna_pose.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_pose.c 2009-11-24 11:48:16 UTC (rev 24859)
+++ trunk/blender/source/blender/makesrna/intern/rna_pose.c 2009-11-24 11:58:49 UTC (rev 24860)
@@ -675,7 +675,7 @@
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Channel Matrix", "4x4 matrix, before constraints.");
- prop= RNA_def_property(srna, "pose_matrix", PROP_FLOAT, PROP_MATRIX);
+ prop= RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "pose_mat");
RNA_def_property_array(prop, 16);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -689,11 +689,13 @@
*/
/* Head/Tail Coordinates (in Pose Space) - Automatically calculated... */
- prop= RNA_def_property(srna, "pose_head", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "head", PROP_FLOAT, PROP_TRANSLATION);
+ RNA_def_property_float_sdna(prop, NULL, "pose_head");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Pose Head Position", "Location of head of the channel's bone.");
- prop= RNA_def_property(srna, "pose_tail", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "tail", PROP_FLOAT, PROP_TRANSLATION);
+ RNA_def_property_float_sdna(prop, NULL, "pose_tail");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Pose Tail Position", "Location of tail of the channel's bone.");
More information about the Bf-blender-cvs
mailing list