[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26430] trunk/blender: utility functions is_negative_m3 & is_negative_m4, added python Mathutils access Matrix.is_negative

Campbell Barton ideasman42 at gmail.com
Sat Jan 30 14:15:39 CET 2010


Revision: 26430
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26430
Author:   campbellbarton
Date:     2010-01-30 14:15:39 +0100 (Sat, 30 Jan 2010)

Log Message:
-----------
utility functions is_negative_m3 & is_negative_m4, added python Mathutils access Matrix.is_negative
renamed Mathutils attribute wrapped -> is_wrapped

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/bpy/app.py
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenlib/BLI_math_matrix.h
    trunk/blender/source/blender/blenlib/intern/math_matrix.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
    trunk/blender/source/blender/python/intern/bpy_interface.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/release/scripts/modules/bpy/app.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy/app.py	2010-01-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/release/scripts/modules/bpy/app.py	2010-01-30 13:15:39 UTC (rev 26430)
@@ -45,9 +45,8 @@
 """
 # constants
 import _bpy
-import sys as _sys
 version = _bpy._VERSION
 version_string = _bpy._VERSION_STR
 home = _bpy._HOME
 binary_path = _bpy._BINPATH
-debug = ("-d" in _sys.argv)
+debug = _bpy._DEBUG

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2010-01-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2010-01-30 13:15:39 UTC (rev 26430)
@@ -1980,7 +1980,7 @@
 void where_is_object_time(Scene *scene, Object *ob, float ctime)
 {
 	float *fp1, *fp2, slowmat[4][4] = MAT4_UNITY;
-	float stime=ctime, fac1, fac2, vec[3];
+	float stime=ctime, fac1, fac2;
 	int a;
 	
 	/* new version: correct parent+vertexparent and track+parent */
@@ -2050,9 +2050,8 @@
 	}
 	
 	/* set negative scale flag in object */
-	cross_v3_v3v3(vec, ob->obmat[0], ob->obmat[1]);
-	if( dot_v3v3(vec, ob->obmat[2]) < 0.0 ) ob->transflag |= OB_NEG_SCALE;
-	else ob->transflag &= ~OB_NEG_SCALE;
+	if(is_negative_m4(ob->obmat))	ob->transflag |= OB_NEG_SCALE;
+	else							ob->transflag &= ~OB_NEG_SCALE;
 }
 
 static void solve_parenting (Scene *scene, Object *ob, Object *par, float obmat[][4], float slowmat[][4], int simul)

Modified: trunk/blender/source/blender/blenlib/BLI_math_matrix.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_math_matrix.h	2010-01-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/source/blender/blenlib/BLI_math_matrix.h	2010-01-30 13:15:39 UTC (rev 26430)
@@ -148,6 +148,9 @@
 void blend_m3_m3m3(float R[3][3], float A[3][3], float B[3][3], float t);
 void blend_m4_m4m4(float R[4][4], float A[4][4], float B[4][4], float t);
 
+int is_negative_m3(float mat[3][3]);
+int is_negative_m4(float mat[4][4]);
+
 /*********************************** Other ***********************************/
 
 void print_m3(char *str, float M[3][3]);

Modified: trunk/blender/source/blender/blenlib/intern/math_matrix.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/math_matrix.c	2010-01-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/source/blender/blenlib/intern/math_matrix.c	2010-01-30 13:15:39 UTC (rev 26430)
@@ -1037,6 +1037,21 @@
 	loc_quat_size_to_mat4(out, floc, fquat, fsize);
 }
 
+
+int is_negative_m3(float mat[][3])
+{
+	float vec[3];
+	cross_v3_v3v3(vec, mat[0], mat[1]);
+	return (dot_v3v3(vec, mat[2]) < 0.0f);
+}
+
+int is_negative_m4(float mat[][4])
+{
+	float vec[3];
+	cross_v3_v3v3(vec, mat[0], mat[1]);
+	return (dot_v3v3(vec, mat[2]) < 0.0f);
+}
+
 /* make a 4x4 matrix out of 3 transform components */
 /* matrices are made in the order: scale * rot * loc */
 // TODO: need to have a version that allows for rotation order...
@@ -1128,4 +1143,3 @@
 	printf("%f %f %f %f\n",m[0][3],m[1][3],m[2][3],m[3][3]);
 	printf("\n");
 }
-

Modified: trunk/blender/source/blender/python/generic/euler.c
===================================================================
--- trunk/blender/source/blender/python/generic/euler.c	2010-01-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/source/blender/python/generic/euler.c	2010-01-30 13:15:39 UTC (rev 26430)
@@ -571,7 +571,7 @@
 	{"y", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Y axis in radians. **type** float", (void *)1},
 	{"z", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Z axis in radians. **type** float", (void *)2},
 
-	{"wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
+	{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
 	{"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, 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-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/source/blender/python/generic/matrix.c	2010-01-30 13:15:39 UTC (rev 26430)
@@ -1231,14 +1231,34 @@
 	return PyFloat_FromDouble(mat3_to_scale(mat));
 }
 
+static PyObject *Matrix_getIsNegative( MatrixObject * self, void *type )
+{
+	float vec[3];
+
+	if(!BaseMath_ReadCallback(self))
+		return NULL;
+
+	/*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));
+	else if(self->colSize == 3 && self->rowSize == 3)
+		return PyBool_FromLong(is_negative_m3((float (*)[3])*self->matrix));
+	else {
+		PyErr_SetString(PyExc_AttributeError, "Matrix.is_negative: inappropriate matrix size - expects 3x3 or 4x4 matrix\n");
+		return NULL;
+	}
+}
+
+
 /*****************************************************************************/
 /* Python attributes get/set structure:                                      */
 /*****************************************************************************/
 static PyGetSetDef Matrix_getseters[] = {
 	{"row_size", (getter)Matrix_getRowSize, (setter)NULL, "The row size of the matrix (readonly). **type** int", NULL},
 	{"col_size", (getter)Matrix_getColSize, (setter)NULL, "The column size of the matrix (readonly). **type** int", NULL},
-    {"median_scale", (getter)Matrix_getMedianScale, (setter)NULL, "The average scale applied to each axis (readonly). **type** float", NULL},
-	{"wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
+	{"median_scale", (getter)Matrix_getMedianScale, (setter)NULL, "The average scale applied to each axis (readonly). **type** float", NULL},
+	{"is_negative", (getter)Matrix_getIsNegative, (setter)NULL, "True if this matrix results in a negative scale, (3x3, 4x4 only) (readonly). **type** bool", NULL},
+	{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
 	{"_owner",(getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
 	{NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
 };

Modified: trunk/blender/source/blender/python/generic/quat.c
===================================================================
--- trunk/blender/source/blender/python/generic/quat.c	2010-01-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/source/blender/python/generic/quat.c	2010-01-30 13:15:39 UTC (rev 26430)
@@ -854,7 +854,7 @@
 	{"magnitude", (getter)Quaternion_getMagnitude, (setter)NULL, "Size of the quaternion (readonly). **type** float", NULL},
 	{"angle", (getter)Quaternion_getAngle, (setter)NULL, "angle of the quaternion (readonly). **type** float", NULL},
 	{"axis",(getter)Quaternion_getAxisVec, (setter)NULL, "quaternion axis as a vector (readonly). **type** :class:`Vector`", NULL},
-	{"wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
+	{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
 	{"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
 	{NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
 };

Modified: trunk/blender/source/blender/python/generic/vector.c
===================================================================
--- trunk/blender/source/blender/python/generic/vector.c	2010-01-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/source/blender/python/generic/vector.c	2010-01-30 13:15:39 UTC (rev 26430)
@@ -1635,7 +1635,7 @@
 	{"w", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector W axis (4D Vectors only). **type** float", (void *)3},
 	{"length", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length. **type** float", NULL},
 	{"magnitude", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length. **type** float", NULL},
-	{"wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
+	{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
 	{"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
 	
 	/* autogenerated swizzle attrs, see python script below */

Modified: trunk/blender/source/blender/python/intern/bpy_interface.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_interface.c	2010-01-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/source/blender/python/intern/bpy_interface.c	2010-01-30 13:15:39 UTC (rev 26430)
@@ -235,6 +235,7 @@
 		sprintf(tmpstr, "%d.%02d (sub %d)", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
 		PyModule_AddStringConstant(mod, "_VERSION_STR",  tmpstr);
 		PyModule_AddStringConstant(mod, "_BINPATH",  bprogname);
+		PyModule_AddIntConstant(mod, "_DEBUG",  G.f & G_DEBUG ? 1:0);
 	}
 
 	/* add our own modules dir, this is a python package */

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2010-01-30 12:01:44 UTC (rev 26429)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2010-01-30 13:15:39 UTC (rev 26430)
@@ -3575,11 +3575,12 @@
 	}
 	
 	self= (BPy_BaseTypeRNA *)PyObject_NEW( BPy_BaseTypeRNA, &pyrna_basetype_Type );
-	
+	self->arraydim = self->arrayoffset = 0; /* unused but better set */
+
 	/* avoid doing this lookup for every getattr */
 	RNA_blender_rna_pointer_create(&self->ptr);
 	self->prop = RNA_struct_find_property(&self->ptr, "structs");
-	
+
 	return (PyObject *)self;
 }
 





More information about the Bf-blender-cvs mailing list