[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27101] trunk/blender/source: matrix functions, to_3x3, to_4x4

Campbell Barton ideasman42 at gmail.com
Tue Feb 23 10:39:48 CET 2010


Revision: 27101
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27101
Author:   campbellbarton
Date:     2010-02-23 10:39:47 +0100 (Tue, 23 Feb 2010)

Log Message:
-----------
matrix functions, to_3x3, to_4x4
force fixed time when recording in the BGE.

Modified Paths:
--------------
    trunk/blender/source/blender/python/generic/matrix.c
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp

Modified: trunk/blender/source/blender/python/generic/matrix.c
===================================================================
--- trunk/blender/source/blender/python/generic/matrix.c	2010-02-23 05:02:00 UTC (rev 27100)
+++ trunk/blender/source/blender/python/generic/matrix.c	2010-02-23 09:39:47 UTC (rev 27101)
@@ -194,7 +194,7 @@
 					 self->matrix[2][0], self->matrix[2][1],
 					 self->matrix[2][2]);
 	} else {
-		return determinant_m4((float (*)[4]) *self->matrix);
+		return determinant_m4((float (*)[4])self->contigPtr);
 	}
 }
 
@@ -221,9 +221,9 @@
 		return NULL;
 	} 
 	if(self->colSize == 3){
-        mat3_to_quat( quat,(float (*)[3])*self->matrix);
+        mat3_to_quat( quat,(float (*)[3])self->contigPtr);
 	}else{
-		mat4_to_quat( quat,(float (*)[4])*self->matrix);
+		mat4_to_quat( quat,(float (*)[4])self->contigPtr);
 	}
 	
 	return newQuaternionObject(quat, Py_NEW, NULL);
@@ -267,9 +267,9 @@
 	
 	/*must be 3-4 cols, 3-4 rows, square matrix*/
 	if(self->colSize ==3 && self->rowSize ==3) {
-		mat= (float (*)[3]) *self->matrix;
+		mat= (float (*)[3])self->contigPtr;
 	}else if (self->colSize ==4 && self->rowSize ==4) {
-		copy_m3_m4(tmat, (float (*)[4]) *self->matrix);
+		copy_m3_m4(tmat, (float (*)[4])self->contigPtr);
 		mat= tmat;
 	}else {
 		PyErr_SetString(PyExc_AttributeError, "Matrix.to_euler(): inappropriate matrix size - expects 3x3 or 4x4 matrix\n");
@@ -301,7 +301,7 @@
 "   Resize the matrix to 4x4.\n"
 "\n"
 "   :return: an instance of itself.\n"
-"   :rtype: :class:`Vector`\n";
+"   :rtype: :class:`Matrix`\n";
 
 PyObject *Matrix_Resize4x4(MatrixObject * self)
 {
@@ -359,6 +359,59 @@
 	Py_INCREF(self);
 	return (PyObject *)self;
 }
+
+static char Matrix_to_4x4_doc[] =
+".. method:: to_4x4()\n"
+"\n"
+"   Return a 4x4 copy of this matrix.\n"
+"\n"
+"   :return: a new matrix.\n"
+"   :rtype: :class:`Matrix`\n";
+PyObject *Matrix_to_4x4(MatrixObject * self)
+{
+	if(!BaseMath_ReadCallback(self))
+		return NULL;
+
+	if(self->colSize==4 && self->rowSize==4) {
+		return (PyObject *)newMatrixObject(self->contigPtr, 4, 4, Py_NEW, Py_TYPE(self));
+	}
+	else if(self->colSize==3 && self->rowSize==3) {
+		float mat[4][4];
+		copy_m4_m3(mat, (float (*)[3])self->contigPtr);
+		return (PyObject *)newMatrixObject((float *)mat, 4, 4, Py_NEW, Py_TYPE(self));
+	}
+	/* TODO, 2x2 matrix */
+
+	PyErr_SetString(PyExc_TypeError, "Matrix.to_4x4(): inappropriate matrix size");
+	return NULL;
+}
+
+static char Matrix_to_3x3_doc[] =
+".. method:: to_3x3()\n"
+"\n"
+"   Return a 3x3 copy of this matrix.\n"
+"\n"
+"   :return: a new matrix.\n"
+"   :rtype: :class:`Matrix`\n";
+PyObject *Matrix_to_3x3(MatrixObject * self)
+{
+	if(!BaseMath_ReadCallback(self))
+		return NULL;
+
+	if(self->colSize==3 && self->rowSize==3) {
+		return (PyObject *)newMatrixObject(self->contigPtr, 3, 3, Py_NEW, Py_TYPE(self));
+	}
+	else if(self->colSize==4 && self->rowSize==4) {
+		float mat[3][3];
+		copy_m3_m4(mat, (float (*)[4])self->contigPtr);
+		return (PyObject *)newMatrixObject((float *)mat, 3, 3, Py_NEW, Py_TYPE(self));
+	}
+	/* TODO, 2x2 matrix */
+
+	PyErr_SetString(PyExc_TypeError, "Matrix.to_3x3(): inappropriate matrix size");
+	return NULL;
+}
+
 /*---------------------------Matrix.translationPart() ------------*/
 static char Matrix_TranslationPart_doc[] =
 ".. method:: translation_part()\n"
@@ -439,9 +492,9 @@
 	
 	/*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);
+		copy_m3_m4(mat, (float (*)[4])self->contigPtr);
 	else if(self->colSize == 3 && self->rowSize == 3)
-		copy_m3_m3(mat, (float (*)[3])*self->matrix);
+		copy_m3_m3(mat, (float (*)[3])self->contigPtr);
 	else {
 		PyErr_SetString(PyExc_AttributeError, "Matrix.scale_part(): inappropriate matrix size - expects 3x3 or 4x4 matrix\n");
 		return NULL;
@@ -497,9 +550,9 @@
 			mat[2] = -self->matrix[1][0];
 			mat[3] = self->matrix[0][0];
 		} else if(self->rowSize == 3) {
-			adjoint_m3_m3((float (*)[3]) mat,(float (*)[3]) *self->matrix);
+			adjoint_m3_m3((float (*)[3]) mat,(float (*)[3])self->contigPtr);
 		} else if(self->rowSize == 4) {
-			adjoint_m4_m4((float (*)[4]) mat, (float (*)[4]) *self->matrix);
+			adjoint_m4_m4((float (*)[4]) mat, (float (*)[4])self->contigPtr);
 		}
 		/*divide by determinate*/
 		for(x = 0; x < (self->rowSize * self->colSize); x++) {
@@ -576,9 +629,9 @@
 		self->matrix[1][0] = self->matrix[0][1];
 		self->matrix[0][1] = t;
 	} else if(self->rowSize == 3) {
-		transpose_m3((float (*)[3])*self->matrix);
+		transpose_m3((float (*)[3])self->contigPtr);
 	} else {
-		transpose_m4((float (*)[4])*self->matrix);
+		transpose_m4((float (*)[4])self->contigPtr);
 	}
 
 	BaseMath_WriteCallback(self);
@@ -641,9 +694,9 @@
 		self->matrix[1][0] = 0.0f;
 		self->matrix[1][1] = 1.0f;
 	} else if(self->rowSize == 3) {
-		unit_m3((float (*)[3]) *self->matrix);
+		unit_m3((float (*)[3])self->contigPtr);
 	} else {
-		unit_m4((float (*)[4]) *self->matrix);
+		unit_m4((float (*)[4])self->contigPtr);
 	}
 
 	if(!BaseMath_WriteCallback(self))
@@ -667,7 +720,7 @@
 	if(!BaseMath_ReadCallback(self))
 		return NULL;
 	
-	return (PyObject*)newMatrixObject((float (*))*self->matrix, self->rowSize, self->colSize, Py_NEW, Py_TYPE(self));
+	return (PyObject*)newMatrixObject((float (*))self->contigPtr, self->rowSize, self->colSize, Py_NEW, Py_TYPE(self));
 }
 
 /*----------------------------print object (internal)-------------*/
@@ -1219,9 +1272,9 @@
 
 	/*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);
+		copy_m3_m4(mat, (float (*)[4])self->contigPtr);
 	else if(self->colSize == 3 && self->rowSize == 3)
-		copy_m3_m3(mat, (float (*)[3])*self->matrix);
+		copy_m3_m3(mat, (float (*)[3])self->contigPtr);
 	else {
 		PyErr_SetString(PyExc_AttributeError, "Matrix.median_scale: inappropriate matrix size - expects 3x3 or 4x4 matrix\n");
 		return NULL;
@@ -1237,9 +1290,9 @@
 
 	/*must be 3-4 cols, 3-4 rows, square matrix*/
 	if(self->colSize == 4 && self->rowSize == 4)
-		return PyBool_FromLong(is_negative_m4((float (*)[4])*self->matrix));
+		return PyBool_FromLong(is_negative_m4((float (*)[4])self->contigPtr));
 	else if(self->colSize == 3 && self->rowSize == 3)
-		return PyBool_FromLong(is_negative_m3((float (*)[3])*self->matrix));
+		return PyBool_FromLong(is_negative_m3((float (*)[3])self->contigPtr));
 	else {
 		PyErr_SetString(PyExc_AttributeError, "Matrix.is_negative: inappropriate matrix size - expects 3x3 or 4x4 matrix\n");
 		return NULL;
@@ -1271,6 +1324,8 @@
 	{"rotation_part", (PyCFunction) Matrix_RotationPart, METH_NOARGS, Matrix_RotationPart_doc},
 	{"scale_part", (PyCFunction) Matrix_scalePart, METH_NOARGS, Matrix_scalePart_doc},
 	{"resize4x4", (PyCFunction) Matrix_Resize4x4, METH_NOARGS, Matrix_Resize4x4_doc},
+	{"to_4x4", (PyCFunction) Matrix_to_4x4, METH_NOARGS, Matrix_to_4x4_doc},
+	{"to_3x3", (PyCFunction) Matrix_to_3x3, METH_NOARGS, Matrix_to_3x3_doc},
 	{"to_euler", (PyCFunction) Matrix_toEuler, METH_VARARGS, Matrix_toEuler_doc},
 	{"to_quat", (PyCFunction) Matrix_toQuat, METH_NOARGS, Matrix_toQuat_doc},
 	{"copy", (PyCFunction) Matrix_copy, METH_NOARGS, Matrix_copy_doc},

Modified: trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2010-02-23 05:02:00 UTC (rev 27100)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2010-02-23 09:39:47 UTC (rev 27101)
@@ -172,6 +172,8 @@
 		bool displaylists = (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0);
 		bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 0) != 0);
 		bool novertexarrays = (SYS_GetCommandLineInt(syshandle, "novertexarrays", 0) != 0);
+		if(animation_record) usefixed= true; /* override since you's always want fixed time for sim recording */
+
 		// create the canvas, rasterizer and rendertools
 		RAS_ICanvas* canvas = new KX_BlenderCanvas(win, area_rect);
 		canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE);





More information about the Bf-blender-cvs mailing list