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. @@
_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to