[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53048] trunk/blender/source/blender/ python/mathutils/mathutils_Matrix.c: add Matrix.normalized(), handy for transforming normals.

Campbell Barton ideasman42 at gmail.com
Sun Dec 16 05:05:24 CET 2012


Revision: 53048
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53048
Author:   campbellbarton
Date:     2012-12-16 04:05:16 +0000 (Sun, 16 Dec 2012)
Log Message:
-----------
add Matrix.normalized(), handy for transforming normals.

Modified Paths:
--------------
    trunk/blender/source/blender/python/mathutils/mathutils_Matrix.c

Modified: trunk/blender/source/blender/python/mathutils/mathutils_Matrix.c
===================================================================
--- trunk/blender/source/blender/python/mathutils/mathutils_Matrix.c	2012-12-16 02:53:28 UTC (rev 53047)
+++ trunk/blender/source/blender/python/mathutils/mathutils_Matrix.c	2012-12-16 04:05:16 UTC (rev 53048)
@@ -1533,6 +1533,53 @@
 	return matrix__apply_to_copy((PyNoArgsFunction)Matrix_transpose, self);
 }
 
+/*---------------------------matrix.normalize() ------------------*/
+PyDoc_STRVAR(Matrix_normalize_doc,
+".. method:: normalize()\n"
+"\n"
+"   Normalize each of the columns of the matrix (useful for transforming unit length normals).\n"
+);
+static PyObject *Matrix_normalize(MatrixObject *self)
+{
+	if (BaseMath_ReadCallback(self) == -1)
+		return NULL;
+
+	if (self->num_col != self->num_row) {
+		PyErr_SetString(PyExc_ValueError,
+		                "Matrix.normalize(): "
+		                "only square matrices are supported");
+		return NULL;
+	}
+
+	if (self->num_col == 3) {
+		normalize_m3((float (*)[3])self->matrix);
+	}
+	else if (self->num_col == 4) {
+		normalize_m4((float (*)[4])self->matrix);
+	}
+	else {
+		PyErr_SetString(PyExc_ValueError,
+		                "Matrix.normalize(): "
+		                "can only use a 3x3 or 4x4 matrix");
+	}
+
+	(void)BaseMath_WriteCallback(self);
+	Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(Matrix_normalized_doc,
+".. method:: normalized()\n"
+"\n"
+"   Return a row normalized matrix\n"
+"\n"
+"   :return: a row normalized matrix\n"
+"   :rtype: :class:`Matrix`\n"
+);
+static PyObject *Matrix_normalized(MatrixObject *self)
+{
+	return matrix__apply_to_copy((PyNoArgsFunction)Matrix_normalize, self);
+}
+
 /*---------------------------matrix.zero() -----------------------*/
 PyDoc_STRVAR(Matrix_zero_doc,
 ".. method:: zero()\n"
@@ -2371,6 +2418,8 @@
 	/* operate on original or copy */
 	{"transpose", (PyCFunction) Matrix_transpose, METH_NOARGS, Matrix_transpose_doc},
 	{"transposed", (PyCFunction) Matrix_transposed, METH_NOARGS, Matrix_transposed_doc},
+	{"normalize", (PyCFunction) Matrix_normalize, METH_NOARGS, Matrix_normalize_doc},
+	{"normalized", (PyCFunction) Matrix_normalized, METH_NOARGS, Matrix_normalized_doc},
 	{"invert", (PyCFunction) Matrix_invert, METH_NOARGS, Matrix_invert_doc},
 	{"inverted", (PyCFunction) Matrix_inverted, METH_NOARGS, Matrix_inverted_doc},
 	{"adjugate", (PyCFunction) Matrix_adjugate, METH_NOARGS, Matrix_adjugate_doc},




More information about the Bf-blender-cvs mailing list