[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25671] trunk/blender: editbone.transform( matrix) function, requested by Cessen.

Campbell Barton ideasman42 at gmail.com
Sat Jan 2 23:47:57 CET 2010


Revision: 25671
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25671
Author:   campbellbarton
Date:     2010-01-02 23:47:56 +0100 (Sat, 02 Jan 2010)

Log Message:
-----------
editbone.transform(matrix) function, requested by Cessen.
Also added matrix.median_scale attribute to get the average scale from the matrix, use for scaling bone envalopes.

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/bpy_types.py
    trunk/blender/source/blender/makesrna/intern/rna_armature_api.c
    trunk/blender/source/blender/python/generic/euler.c
    trunk/blender/source/blender/python/generic/matrix.c
    trunk/blender/source/blender/python/generic/quat.c
    trunk/blender/source/blender/python/generic/vector.c

Modified: trunk/blender/release/scripts/modules/bpy_types.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_types.py	2010-01-02 19:01:19 UTC (rev 25670)
+++ trunk/blender/release/scripts/modules/bpy_types.py	2010-01-02 22:47:56 UTC (rev 25671)
@@ -198,6 +198,19 @@
         self.tail = self.head + vec
         self.roll = other.roll
 
+    def transform(self, matrix):
+        """
+        Transform the the bones head, tail, roll and envalope (when the matrix has a scale component).
+        Expects a 4x4 or 3x3 matrix.
+        """
+        from Mathutils import Vector
+        z_vec = self.matrix.rotationPart() * Vector(0.0, 0.0, 1.0)
+        self.tail = matrix * self.tail
+        self.head = matrix * self.head
+        scalar = matrix.median_scale
+        self.head_radius *= scalar
+        self.tail_radius *= scalar
+        self.align_roll(matrix * z_vec)
 
 def ord_ind(i1, i2):
     if i1 < i2:

Modified: trunk/blender/source/blender/makesrna/intern/rna_armature_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_armature_api.c	2010-01-02 19:01:19 UTC (rev 25670)
+++ trunk/blender/source/blender/makesrna/intern/rna_armature_api.c	2010-01-02 22:47:56 UTC (rev 25671)
@@ -58,7 +58,7 @@
 	PropertyRNA *parm;
 
 	func= RNA_def_function(srna, "align_roll", "rna_EditBone_align_roll");
-	RNA_def_function_ui_description(func, "Align the bone to a localspace vector.");
+	RNA_def_function_ui_description(func, "Align the bone to a localspace roll so the Z axis points in the direction of the vector given.");
 	parm= RNA_def_float_vector(func, "vector", 3, NULL, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
 	RNA_def_property_flag(parm, PROP_REQUIRED);
 }

Modified: trunk/blender/source/blender/python/generic/euler.c
===================================================================
--- trunk/blender/source/blender/python/generic/euler.c	2010-01-02 19:01:19 UTC (rev 25670)
+++ trunk/blender/source/blender/python/generic/euler.c	2010-01-02 22:47:56 UTC (rev 25671)
@@ -541,7 +541,7 @@
 	{"z", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Z axis", (void *)2},
 
 	{"wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, "True when this wraps blenders internal data", NULL},
-	{"__owner__", (getter)BaseMathObject_getOwner, (setter)NULL, "Read only owner for vectors that depend on another object", NULL},
+	{"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, "Read only owner for vectors that depend on another object", NULL},
 	{NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
 };
 

Modified: trunk/blender/source/blender/python/generic/matrix.c
===================================================================
--- trunk/blender/source/blender/python/generic/matrix.c	2010-01-02 19:01:19 UTC (rev 25670)
+++ trunk/blender/source/blender/python/generic/matrix.c	2010-01-02 22:47:56 UTC (rev 25671)
@@ -1129,12 +1129,33 @@
 	return PyLong_FromLong((long) self->colSize);
 }
 
+static PyObject *Matrix_getMedianScale( MatrixObject * self, void *type )
+{
+	float mat[3][3];
+
+	if(!BaseMath_ReadCallback(self))
+		return NULL;
+
+	/*must be 3-4 cols, 3-4 rows, square matrix*/
+	if(self->colSize == 4 && self->rowSize == 4)
+		copy_m3_m4(mat, (float (*)[4])*self->matrix);
+	else if(self->colSize == 3 && self->rowSize == 3)
+		copy_m3_m3(mat, (float (*)[3])*self->matrix);
+	else {
+		PyErr_SetString(PyExc_AttributeError, "Matrix.median_scale: inappropriate matrix size - expects 3x3 or 4x4 matrix\n");
+		return NULL;
+	}
+    
+	return PyFloat_FromDouble(mat3_to_scale(mat));
+}
+
 /*****************************************************************************/
 /* Python attributes get/set structure:                                      */
 /*****************************************************************************/
 static PyGetSetDef Matrix_getseters[] = {
-	{"rowSize", (getter)Matrix_getRowSize, (setter)NULL, "", NULL},
-	{"colSize", (getter)Matrix_getColSize, (setter)NULL, "", NULL},
+	{"row_size", (getter)Matrix_getRowSize, (setter)NULL, "", NULL},
+	{"col_size", (getter)Matrix_getColSize, (setter)NULL, "", NULL},
+    {"median_scale", (getter)Matrix_getMedianScale, (setter)NULL, "", NULL},
 	{"wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, "", NULL},
 	{"_owner",(getter)BaseMathObject_getOwner, (setter)NULL, "",
 	 NULL},

Modified: trunk/blender/source/blender/python/generic/quat.c
===================================================================
--- trunk/blender/source/blender/python/generic/quat.c	2010-01-02 19:01:19 UTC (rev 25670)
+++ trunk/blender/source/blender/python/generic/quat.c	2010-01-02 22:47:56 UTC (rev 25671)
@@ -739,7 +739,7 @@
 	 (getter)BaseMathObject_getWrapped, (setter)NULL,
 	 "True when this wraps blenders internal data",
 	 NULL},
-	{"__owner__",
+	{"_owner",
 	 (getter)BaseMathObject_getOwner, (setter)NULL,
 	 "Read only owner for vectors that depend on another object",
 	 NULL},

Modified: trunk/blender/source/blender/python/generic/vector.c
===================================================================
--- trunk/blender/source/blender/python/generic/vector.c	2010-01-02 19:01:19 UTC (rev 25670)
+++ trunk/blender/source/blender/python/generic/vector.c	2010-01-02 22:47:56 UTC (rev 25671)
@@ -1421,7 +1421,7 @@
 	 (getter)BaseMathObject_getWrapped, (setter)NULL,
 	 "True when this wraps blenders internal data",
 	 NULL},
-	{"__owner__",
+	{"_owner",
 	 (getter)BaseMathObject_getOwner, (setter)NULL,
 	 "Read only owner for vectors that depend on another object",
 	 NULL},





More information about the Bf-blender-cvs mailing list