[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11958] trunk/blender/source/blender/ python/api2_2x: matrix to scale fixes from stable

Campbell Barton cbarton at metavr.com
Fri Sep 7 09:55:36 CEST 2007


Revision: 11958
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11958
Author:   campbellbarton
Date:     2007-09-07 09:55:36 +0200 (Fri, 07 Sep 2007)

Log Message:
-----------
matrix to scale fixes from stable

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/Object.c
    trunk/blender/source/blender/python/api2_2x/matrix.c

Modified: trunk/blender/source/blender/python/api2_2x/Object.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Object.c	2007-09-07 07:45:07 UTC (rev 11957)
+++ trunk/blender/source/blender/python/api2_2x/Object.c	2007-09-07 07:55:36 UTC (rev 11958)
@@ -1374,14 +1374,23 @@
 					"expected a string or nothing" );
 
 	if( BLI_streq( space, "worldspace" ) ) {	/* Worldspace matrix */
-		float scale[3];
+		float rot[3];
+		float mat[3][3], imat[3][3], tmat[3][3];
 		disable_where_script( 1 );
 		where_is_object( self->object );
-		Mat4ToSize(self->object->obmat, scale);
-		return Py_BuildValue( "fff",
-					self->object->size[0],
-					self->object->size[1],
-					self->object->size[2] );
+		
+		Mat3CpyMat4(mat, self->object->obmat);
+		
+		/* functionality copied from editobject.c apply_obmat */
+		Mat3ToEul(mat, rot);
+		EulToMat3(rot, tmat);
+		Mat3Inv(imat, tmat);
+		Mat3MulMat3(tmat, imat, mat);
+		
+		attr = Py_BuildValue( "fff",
+					tmat[0][0],
+					tmat[1][1],
+					tmat[2][2] );
 		disable_where_script( 0 );
 	} else if( BLI_streq( space, "localspace" ) ) {	/* Localspace matrix */
 		return Py_BuildValue( "fff",

Modified: trunk/blender/source/blender/python/api2_2x/matrix.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/matrix.c	2007-09-07 07:45:07 UTC (rev 11957)
+++ trunk/blender/source/blender/python/api2_2x/matrix.c	2007-09-07 07:55:36 UTC (rev 11958)
@@ -202,16 +202,27 @@
 /*---------------------------Matrix.scalePart() --------------------*/
 PyObject *Matrix_scalePart(MatrixObject * self)
 {
-	float scale[3];
-	
+	float scale[3], rot[3];
+	float mat[3][3], imat[3][3], tmat[3][3];
+
 	/*must be 3-4 cols, 3-4 rows, square matrix*/
 	if(self->colSize == 4 && self->rowSize == 4)
-		Mat4ToSize((float (*)[4])*self->matrix, scale);
+		Mat3CpyMat4(mat, (float (*)[4])*self->matrix);
 	else if(self->colSize == 3 && self->rowSize == 3)
-		Mat3ToSize((float (*)[3])*self->matrix, scale);
+		Mat3CpyMat3(mat, (float (*)[3])*self->matrix);
 	else
 		return EXPP_ReturnPyObjError(PyExc_AttributeError,
 			"Matrix.scalePart(): inappropriate matrix size - expects 3x3 or 4x4 matrix\n");
+	
+	/* functionality copied from editobject.c apply_obmat */
+	Mat3ToEul(mat, rot);
+	EulToMat3(rot, tmat);
+	Mat3Inv(imat, tmat);
+	Mat3MulMat3(tmat, imat, mat);
+	
+	scale[0]= tmat[0][0];
+	scale[1]= tmat[1][1];
+	scale[2]= tmat[2][2];
 	return newVectorObject(scale, 3, Py_NEW);
 }
 /*---------------------------Matrix.invert() ---------------------*/





More information about the Bf-blender-cvs mailing list