~diresu/blender/blender-command-port

« back to all changes in this revision

Viewing changes to source/blender/python/api2_2x/Mathutils.c

  • Committer: Dietrich Bollmann
  • Date: 2009-05-13 05:01:22 UTC
  • mfrom: (184.1.687)
  • Revision ID: diresu@web.de-20090513050122-34u93sry9tivjfyk
Update to state of blender repository from 2009-05-13 revision 20179.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* 
2
 
 * $Id: Mathutils.c 19842 2009-04-21 12:42:37Z campbellbarton $
 
2
 * $Id: Mathutils.c 20044 2009-05-03 19:47:13Z campbellbarton $
3
3
 *
4
4
 * ***** BEGIN GPL LICENSE BLOCK *****
5
5
 *
126
126
        PyObject *submodule;
127
127
 
128
128
        //seed the generator for the rand function
129
 
        BLI_srand((unsigned int) (PIL_check_seconds_timer() *
130
 
                                      0x7FFFFFFF));
 
129
        BLI_srand((unsigned int) (PIL_check_seconds_timer() * 0x7FFFFFFF));
131
130
        
132
 
        /* needed for getseters */
133
131
        if( PyType_Ready( &vector_Type ) < 0 )
134
132
                return NULL;
135
133
        if( PyType_Ready( &matrix_Type ) < 0 )
147
145
        
148
146
        return (submodule);
149
147
}
 
148
 
150
149
//-----------------------------METHODS----------------------------
151
150
//----------------column_vector_multiplication (internal)---------
152
151
//COLUMN VECTOR Multiplication (Matrix X Vector)
309
308
{
310
309
        PyObject *listObject = NULL;
311
310
        int size, i;
312
 
        float vec[4];
313
 
        PyObject *v, *f;
 
311
        float vec[4], f;
 
312
        PyObject *v;
314
313
 
315
314
        size = PySequence_Length(args);
316
315
        if (size == 1) {
344
343
                        return NULL;
345
344
                }
346
345
 
347
 
                f=PyNumber_Float(v);
348
 
                if(f==NULL) { // parsed item not a number
 
346
                f= PyFloat_AsDouble(v);
 
347
                if(f==-1 && PyErr_Occurred()) { // parsed item not a number
349
348
                        Py_DECREF(v);
350
349
                        Py_XDECREF(listObject);
351
350
                        PyErr_SetString(PyExc_TypeError, "Mathutils.Vector(): 2-4 floats or ints expected (optionally in a sequence)\n");
352
351
                        return NULL;
353
352
                }
354
353
 
355
 
                vec[i]=(float)PyFloat_AS_DOUBLE(f);
356
 
                Py_DECREF(f);
 
354
                vec[i]= f;
357
355
                Py_DECREF(v);
358
356
        }
359
357
        Py_DECREF(listObject);
999
997
                                return NULL;
1000
998
                        }
1001
999
                        if(size == 3){ //get angle in axis/angle
1002
 
                                n = PyNumber_Float(PySequence_GetItem(args, 1));
 
1000
                                n = PySequence_GetItem(args, 1);
1003
1001
                                if(n == NULL) { // parsed item not a number or getItem fail
1004
1002
                                        Py_DECREF(listObject);
1005
1003
                                        PyErr_SetString(PyExc_TypeError, "Mathutils.Quaternion(): 4d numeric sequence expected or 3d vector and number\n");
1006
1004
                                        return NULL;
1007
1005
                                }
1008
 
                                angle = PyFloat_AS_DOUBLE(n);
 
1006
                                
 
1007
                                angle = PyFloat_AsDouble(n);
1009
1008
                                Py_DECREF(n);
 
1009
                                
 
1010
                                if (angle==-1 && PyErr_Occurred()) {
 
1011
                                        Py_DECREF(listObject);
 
1012
                                        PyErr_SetString(PyExc_TypeError, "Mathutils.Quaternion(): 4d numeric sequence expected or 3d vector and number\n");
 
1013
                                        return NULL;
 
1014
                                }
1010
1015
                        }
1011
1016
                }else{
 
1017
                        Py_DECREF(listObject); /* assume the list is teh second arg */
1012
1018
                        listObject = PySequence_GetItem(args, 1);
1013
1019
                        if (size>1 && PySequence_Check(listObject)) {
1014
1020
                                size = PySequence_Length(listObject);
1018
1024
                                        PyErr_SetString(PyExc_AttributeError, "Mathutils.Quaternion(): 4d numeric sequence expected or 3d vector and number\n");
1019
1025
                                        return NULL;
1020
1026
                                }
1021
 
                                n = PyNumber_Float(PySequence_GetItem(args, 0));
 
1027
                                n = PySequence_GetItem(args, 0);
1022
1028
                                if(n == NULL) { // parsed item not a number or getItem fail
1023
1029
                                        Py_DECREF(listObject);
1024
1030
                                        PyErr_SetString(PyExc_TypeError, "Mathutils.Quaternion(): 4d numeric sequence expected or 3d vector and number\n");
1025
1031
                                        return NULL;
1026
1032
                                }
1027
 
                                angle = PyFloat_AS_DOUBLE(n);
 
1033
                                angle = PyFloat_AsDouble(n);
1028
1034
                                Py_DECREF(n);
 
1035
                                
 
1036
                                if (angle==-1 && PyErr_Occurred()) {
 
1037
                                        Py_DECREF(listObject);
 
1038
                                        PyErr_SetString(PyExc_TypeError, "Mathutils.Quaternion(): 4d numeric sequence expected or 3d vector and number\n");
 
1039
                                        return NULL;
 
1040
                                }
1029
1041
                        } else { // argument was not a sequence
1030
1042
                                Py_XDECREF(listObject);
1031
1043
                                PyErr_SetString(PyExc_TypeError, "Mathutils.Quaternion(): 4d numeric sequence expected or 3d vector and number\n");