[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37088] trunk/blender/source/blender/ python: mathutils support for color arithmetic, also some minor whitespace edits.

Campbell Barton ideasman42 at gmail.com
Thu Jun 2 10:29:16 CEST 2011


Revision: 37088
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37088
Author:   campbellbarton
Date:     2011-06-02 08:29:16 +0000 (Thu, 02 Jun 2011)
Log Message:
-----------
mathutils support for color arithmetic, also some minor whitespace edits. 

Modified Paths:
--------------
    trunk/blender/source/blender/python/BPY_extern.h
    trunk/blender/source/blender/python/generic/bgl.c
    trunk/blender/source/blender/python/generic/bgl.h
    trunk/blender/source/blender/python/generic/bpy_internal_import.c
    trunk/blender/source/blender/python/generic/mathutils_Color.c
    trunk/blender/source/blender/python/generic/mathutils_Euler.c
    trunk/blender/source/blender/python/generic/mathutils_Matrix.c
    trunk/blender/source/blender/python/generic/mathutils_Vector.c
    trunk/blender/source/blender/python/generic/mathutils_geometry.c
    trunk/blender/source/blender/python/intern/bpy.c
    trunk/blender/source/blender/python/intern/bpy.h
    trunk/blender/source/blender/python/intern/bpy_app.h
    trunk/blender/source/blender/python/intern/bpy_driver.c
    trunk/blender/source/blender/python/intern/bpy_interface.c
    trunk/blender/source/blender/python/intern/bpy_library.c
    trunk/blender/source/blender/python/intern/bpy_props.c
    trunk/blender/source/blender/python/intern/bpy_props.h
    trunk/blender/source/blender/python/intern/bpy_rna.c
    trunk/blender/source/blender/python/intern/bpy_rna.h

Modified: trunk/blender/source/blender/python/BPY_extern.h
===================================================================
--- trunk/blender/source/blender/python/BPY_extern.h	2011-06-02 04:58:27 UTC (rev 37087)
+++ trunk/blender/source/blender/python/BPY_extern.h	2011-06-02 08:29:16 UTC (rev 37088)
@@ -67,14 +67,14 @@
 //	void BPY_free_pyconstraint_links(struct Text *text);
 //
 void BPY_python_start(int argc, const char **argv);
-void BPY_python_end( void );
-//	void init_syspath( int first_time );
-//	void syspath_append( char *dir );
-//	void BPY_rebuild_syspath( void );
-//	int BPY_path_update( void );
+void BPY_python_end(void);
+//	void init_syspath(int first_time);
+//	void syspath_append(char *dir);
+//	void BPY_rebuild_syspath(void);
+//	int BPY_path_update(void);
 //
-//	int BPY_Err_getLinenumber( void );
-//	const char *BPY_Err_getFilename( void );
+//	int BPY_Err_getLinenumber(void);
+//	const char *BPY_Err_getFilename(void);
 
 /* 2.5 UI Scripts */
 int		BPY_filepath_exec(struct bContext *C, const char *filepath, struct ReportList *reports);

Modified: trunk/blender/source/blender/python/generic/bgl.c
===================================================================
--- trunk/blender/source/blender/python/generic/bgl.c	2011-06-02 04:58:27 UTC (rev 37087)
+++ trunk/blender/source/blender/python/generic/bgl.c	2011-06-02 08:29:16 UTC (rev 37088)
@@ -62,16 +62,16 @@
 buffer which is twice as deep as it is wide or high."
 );
 
-static PyObject *Method_Buffer( PyObject * self, PyObject *args );
+static PyObject *Method_Buffer(PyObject *self, PyObject *args);
 
 /* Buffer sequence methods */
 
-static int Buffer_len( PyObject * self );
-static PyObject *Buffer_item( PyObject * self, int i );
-static PyObject *Buffer_slice( PyObject * self, int begin, int end );
-static int Buffer_ass_item( PyObject * self, int i, PyObject * v );
-static int Buffer_ass_slice( PyObject * self, int begin, int end,
-				 PyObject * seq );
+static int Buffer_len(PyObject *self);
+static PyObject *Buffer_item(PyObject *self, int i);
+static PyObject *Buffer_slice(PyObject *self, int begin, int end);
+static int Buffer_ass_item(PyObject *self, int i, PyObject *v);
+static int Buffer_ass_slice(PyObject *self, int begin, int end,
+				 PyObject *seq);
 
 static PySequenceMethods Buffer_SeqMethods = {
 	( lenfunc ) Buffer_len,						/*sq_length */
@@ -86,11 +86,11 @@
 	(ssizeargfunc) NULL,						/* sq_inplace_repeat */
 };
 
-static void Buffer_dealloc( PyObject * self );
-static PyObject *Buffer_tolist( PyObject * self );
-static PyObject *Buffer_dimensions( PyObject * self );
-static PyObject *Buffer_getattr( PyObject * self, char *name );
-static PyObject *Buffer_repr( PyObject * self );
+static void Buffer_dealloc(PyObject *self);
+static PyObject *Buffer_tolist(PyObject *self);
+static PyObject *Buffer_dimensions(PyObject *self);
+static PyObject *Buffer_getattr(PyObject *self, char *name);
+static PyObject *Buffer_repr(PyObject *self);
 
 PyTypeObject BGL_bufferType = {
 	PyVarObject_HEAD_INIT(NULL, 0)

Modified: trunk/blender/source/blender/python/generic/bgl.h
===================================================================
--- trunk/blender/source/blender/python/generic/bgl.h	2011-06-02 04:58:27 UTC (rev 37087)
+++ trunk/blender/source/blender/python/generic/bgl.h	2011-06-02 08:29:16 UTC (rev 37088)
@@ -55,7 +55,7 @@
 /*@ For Python access to OpenGL functions requiring a pointer. */
 typedef struct _Buffer {
 	PyObject_VAR_HEAD 
-	PyObject * parent;
+	PyObject *parent;
 
 	int type;		/* GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT */
 	int ndimensions;

Modified: trunk/blender/source/blender/python/generic/bpy_internal_import.c
===================================================================
--- trunk/blender/source/blender/python/generic/bpy_internal_import.c	2011-06-02 04:58:27 UTC (rev 37087)
+++ trunk/blender/source/blender/python/generic/bpy_internal_import.c	2011-06-02 08:29:16 UTC (rev 37088)
@@ -217,7 +217,7 @@
 }
 
 
-static PyObject *blender_import(PyObject *UNUSED(self), PyObject *args, PyObject * kw)
+static PyObject *blender_import(PyObject *UNUSED(self), PyObject *args, PyObject *kw)
 {
 	PyObject *exception, *err, *tb;
 	char *name;
@@ -270,7 +270,7 @@
  * our reload() module, to handle reloading in-memory scripts
  */
 
-static PyObject *blender_reload(PyObject *UNUSED(self), PyObject * module)
+static PyObject *blender_reload(PyObject *UNUSED(self), PyObject *module)
 {
 	PyObject *exception, *err, *tb;
 	PyObject *newmodule= NULL;

Modified: trunk/blender/source/blender/python/generic/mathutils_Color.c
===================================================================
--- trunk/blender/source/blender/python/generic/mathutils_Color.c	2011-06-02 04:58:27 UTC (rev 37087)
+++ trunk/blender/source/blender/python/generic/mathutils_Color.c	2011-06-02 08:29:16 UTC (rev 37088)
@@ -186,7 +186,7 @@
 }
 //----------------------------object[]-------------------------
 //sequence accessor (set)
-static int Color_ass_item(ColorObject * self, int i, PyObject * value)
+static int Color_ass_item(ColorObject * self, int i, PyObject *value)
 {
 	float f = PyFloat_AsDouble(value);
 
@@ -233,7 +233,7 @@
 }
 //----------------------------object[z:y]------------------------
 //sequence slice (set)
-static int Color_ass_slice(ColorObject * self, int begin, int end, PyObject * seq)
+static int Color_ass_slice(ColorObject *self, int begin, int end, PyObject *seq)
 {
 	int i, size;
 	float col[COLOR_SIZE];
@@ -344,13 +344,279 @@
 	(objobjargproc)Color_ass_subscript
 };
 
+/* numeric */
+
+
+/* addition: obj + obj */
+static PyObject *Color_add(PyObject *v1, PyObject *v2)
+{
+	ColorObject *color1 = NULL, *color2 = NULL;
+	float col[COLOR_SIZE];
+
+	if (!ColorObject_Check(v1) || !ColorObject_Check(v2)) {
+		PyErr_SetString(PyExc_AttributeError, "Color addition: arguments not valid for this operation");
+		return NULL;
+	}
+	color1 = (ColorObject*)v1;
+	color2 = (ColorObject*)v2;
+
+	if(BaseMath_ReadCallback(color1) == -1 || BaseMath_ReadCallback(color2) == -1)
+		return NULL;
+
+	add_vn_vnvn(col, color1->col, color2->col, COLOR_SIZE);
+
+	return newColorObject(col, Py_NEW, Py_TYPE(v1));
+}
+
+/* addition in-place: obj += obj */
+static PyObject *Color_iadd(PyObject *v1, PyObject *v2)
+{
+	ColorObject *color1 = NULL, *color2 = NULL;
+
+	if (!ColorObject_Check(v1) || !ColorObject_Check(v2)) {
+		PyErr_SetString(PyExc_AttributeError, "Color addition: arguments not valid for this operation");
+		return NULL;
+	}
+	color1 = (ColorObject*)v1;
+	color2 = (ColorObject*)v2;
+
+	if(BaseMath_ReadCallback(color1) == -1 || BaseMath_ReadCallback(color2) == -1)
+		return NULL;
+
+	add_vn_vn(color1->col, color2->col, COLOR_SIZE);
+
+	(void)BaseMath_WriteCallback(color1);
+	Py_INCREF(v1);
+	return v1;
+}
+
+/* subtraction: obj - obj */
+static PyObject *Color_sub(PyObject *v1, PyObject *v2)
+{
+	ColorObject *color1 = NULL, *color2 = NULL;
+	float col[COLOR_SIZE];
+
+	if (!ColorObject_Check(v1) || !ColorObject_Check(v2)) {
+		PyErr_SetString(PyExc_AttributeError, "Color subtraction: arguments not valid for this operation");
+		return NULL;
+	}
+	color1 = (ColorObject*)v1;
+	color2 = (ColorObject*)v2;
+
+	if(BaseMath_ReadCallback(color1) == -1 || BaseMath_ReadCallback(color2) == -1)
+		return NULL;
+
+	sub_vn_vnvn(col, color1->col, color2->col, COLOR_SIZE);
+
+	return newColorObject(col, Py_NEW, Py_TYPE(v1));
+}
+
+/* subtraction in-place: obj -= obj */
+static PyObject *Color_isub(PyObject *v1, PyObject *v2)
+{
+	ColorObject *color1= NULL, *color2= NULL;
+
+	if (!ColorObject_Check(v1) || !ColorObject_Check(v2)) {
+		PyErr_SetString(PyExc_AttributeError, "Color subtraction: arguments not valid for this operation");
+		return NULL;
+	}
+	color1 = (ColorObject*)v1;
+	color2 = (ColorObject*)v2;
+
+	if(BaseMath_ReadCallback(color1) == -1 || BaseMath_ReadCallback(color2) == -1)
+		return NULL;
+
+	sub_vn_vn(color1->col, color2->col, COLOR_SIZE);
+
+	(void)BaseMath_WriteCallback(color1);
+	Py_INCREF(v1);
+	return v1;
+}
+
+static PyObject *color_mul_float(ColorObject *color, const float scalar)
+{
+	float tcol[COLOR_SIZE];
+	mul_vn_vn_fl(tcol, color->col, COLOR_SIZE, scalar);
+	return newColorObject(tcol, Py_NEW, Py_TYPE(color));
+}
+
+
+static PyObject *Color_mul(PyObject *v1, PyObject *v2)
+{
+	ColorObject *color1 = NULL, *color2 = NULL;
+	float scalar;
+
+	if ColorObject_Check(v1) {
+		color1= (ColorObject *)v1;
+		if(BaseMath_ReadCallback(color1) == -1)
+			return NULL;
+	}
+	if ColorObject_Check(v2) {
+		color2= (ColorObject *)v2;
+		if(BaseMath_ReadCallback(color2) == -1)
+			return NULL;
+	}
+
+
+	/* make sure v1 is always the vector */
+	if (color1 && color2) {
+		/* col * col, dont support yet! */
+	}
+	else if (color1) {
+		if (((scalar= PyFloat_AsDouble(v2)) == -1.0f && PyErr_Occurred())==0) { /* COLOR * FLOAT */
+			return color_mul_float(color1, scalar);
+		}
+	}
+	else if (color2) {
+		if (((scalar= PyFloat_AsDouble(v1)) == -1.0f && PyErr_Occurred())==0) { /* FLOAT * COLOR */
+			return color_mul_float(color2, scalar);
+		}
+	}
+	else {
+		BLI_assert(!"internal error");
+	}
+
+	PyErr_Format(PyExc_TypeError, "Color multiplication: not supported between '%.200s' and '%.200s' types", Py_TYPE(v1)->tp_name, Py_TYPE(v2)->tp_name);
+	return NULL;
+}
+
+static PyObject *Color_div(PyObject *v1, PyObject *v2)
+{
+	ColorObject *color1 = NULL;
+	float scalar;
+
+	if ColorObject_Check(v1) {
+		color1= (ColorObject *)v1;
+		if(BaseMath_ReadCallback(color1) == -1)
+			return NULL;
+	}
+	else {
+		PyErr_SetString(PyExc_TypeError, "Color division not supported in this order");
+		return NULL;
+	}
+
+	/* make sure v1 is always the vector */
+	if (((scalar= PyFloat_AsDouble(v2)) == -1.0f && PyErr_Occurred())==0) { /* COLOR * FLOAT */
+		if(scalar==0.0f) {
+			PyErr_SetString(PyExc_ZeroDivisionError, "Color division: divide by zero error");
+			return NULL;
+		}
+		return color_mul_float(color1, 1.0f / scalar);
+	}
+
+	PyErr_Format(PyExc_TypeError, "Color multiplication: not supported between '%.200s' and '%.200s' types", Py_TYPE(v1)->tp_name, Py_TYPE(v2)->tp_name);
+	return NULL;
+}
+
+/* mulplication in-place: obj *= obj */
+static PyObject *Color_imul(PyObject *v1, PyObject *v2)
+{
+	ColorObject *color = (ColorObject *)v1;
+	float scalar;
+
+	if(BaseMath_ReadCallback(color) == -1)
+		return NULL;
+
+	/* only support color *= float */
+	if (((scalar= PyFloat_AsDouble(v2)) == -1.0f && PyErr_Occurred())==0) { /* COLOR *= FLOAT */
+		mul_vn_fl(color->col, COLOR_SIZE, scalar);
+	}
+	else {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list