return typle for mathutils slice's.
The main advantage with this is that its close to twice as fast to do 'vertex.co[:]' then 'tuple(vertex.co)', this is common for writing a vertex array. the correct python behavior in this case is to return a copy of the original type, however euler and quats don't support different sizes so we cant do so easily.
This commit is contained in:
@@ -213,7 +213,7 @@ static int Color_ass_item(ColorObject * self, int i, PyObject * value)
|
|||||||
//sequence slice (get)
|
//sequence slice (get)
|
||||||
static PyObject *Color_slice(ColorObject * self, int begin, int end)
|
static PyObject *Color_slice(ColorObject * self, int begin, int end)
|
||||||
{
|
{
|
||||||
PyObject *list = NULL;
|
PyObject *tuple;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if(!BaseMath_ReadCallback(self))
|
if(!BaseMath_ReadCallback(self))
|
||||||
@@ -222,14 +222,14 @@ static PyObject *Color_slice(ColorObject * self, int begin, int end)
|
|||||||
CLAMP(begin, 0, COLOR_SIZE);
|
CLAMP(begin, 0, COLOR_SIZE);
|
||||||
if (end<0) end= (COLOR_SIZE + 1) + end;
|
if (end<0) end= (COLOR_SIZE + 1) + end;
|
||||||
CLAMP(end, 0, COLOR_SIZE);
|
CLAMP(end, 0, COLOR_SIZE);
|
||||||
begin = MIN2(begin,end);
|
begin= MIN2(begin, end);
|
||||||
|
|
||||||
list = PyList_New(end - begin);
|
tuple= PyTuple_New(end - begin);
|
||||||
for(count= begin; count < end; count++) {
|
for(count= begin; count < end; count++) {
|
||||||
PyList_SET_ITEM(list, count - begin, PyFloat_FromDouble(self->col[count]));
|
PyTuple_SET_ITEM(tuple, count - begin, PyFloat_FromDouble(self->col[count]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return tuple;
|
||||||
}
|
}
|
||||||
//----------------------------object[z:y]------------------------
|
//----------------------------object[z:y]------------------------
|
||||||
//sequence slice (set)
|
//sequence slice (set)
|
||||||
|
|||||||
@@ -443,7 +443,7 @@ static int Euler_ass_item(EulerObject * self, int i, PyObject *value)
|
|||||||
//sequence slice (get)
|
//sequence slice (get)
|
||||||
static PyObject *Euler_slice(EulerObject * self, int begin, int end)
|
static PyObject *Euler_slice(EulerObject * self, int begin, int end)
|
||||||
{
|
{
|
||||||
PyObject *list = NULL;
|
PyObject *tuple;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if(!BaseMath_ReadCallback(self))
|
if(!BaseMath_ReadCallback(self))
|
||||||
@@ -452,14 +452,14 @@ static PyObject *Euler_slice(EulerObject * self, int begin, int end)
|
|||||||
CLAMP(begin, 0, EULER_SIZE);
|
CLAMP(begin, 0, EULER_SIZE);
|
||||||
if (end<0) end= (EULER_SIZE + 1) + end;
|
if (end<0) end= (EULER_SIZE + 1) + end;
|
||||||
CLAMP(end, 0, EULER_SIZE);
|
CLAMP(end, 0, EULER_SIZE);
|
||||||
begin = MIN2(begin,end);
|
begin= MIN2(begin, end);
|
||||||
|
|
||||||
list = PyList_New(end - begin);
|
tuple= PyTuple_New(end - begin);
|
||||||
for(count = begin; count < end; count++) {
|
for(count = begin; count < end; count++) {
|
||||||
PyList_SET_ITEM(list, count - begin, PyFloat_FromDouble(self->eul[count]));
|
PyTuple_SET_ITEM(tuple, count - begin, PyFloat_FromDouble(self->eul[count]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return tuple;
|
||||||
}
|
}
|
||||||
//----------------------------object[z:y]------------------------
|
//----------------------------object[z:y]------------------------
|
||||||
//sequence slice (set)
|
//sequence slice (set)
|
||||||
|
|||||||
@@ -1398,7 +1398,7 @@ static int Matrix_ass_item(MatrixObject * self, int i, PyObject * ob)
|
|||||||
static PyObject *Matrix_slice(MatrixObject * self, int begin, int end)
|
static PyObject *Matrix_slice(MatrixObject * self, int begin, int end)
|
||||||
{
|
{
|
||||||
|
|
||||||
PyObject *list = NULL;
|
PyObject *tuple;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if(!BaseMath_ReadCallback(self))
|
if(!BaseMath_ReadCallback(self))
|
||||||
@@ -1406,16 +1406,16 @@ static PyObject *Matrix_slice(MatrixObject * self, int begin, int end)
|
|||||||
|
|
||||||
CLAMP(begin, 0, self->rowSize);
|
CLAMP(begin, 0, self->rowSize);
|
||||||
CLAMP(end, 0, self->rowSize);
|
CLAMP(end, 0, self->rowSize);
|
||||||
begin = MIN2(begin,end);
|
begin= MIN2(begin,end);
|
||||||
|
|
||||||
list = PyList_New(end - begin);
|
tuple= PyTuple_New(end - begin);
|
||||||
for(count = begin; count < end; count++) {
|
for(count= begin; count < end; count++) {
|
||||||
PyList_SET_ITEM(list, count - begin,
|
PyTuple_SET_ITEM(tuple, count - begin,
|
||||||
newVectorObject_cb((PyObject *)self, self->colSize, mathutils_matrix_vector_cb_index, count));
|
newVectorObject_cb((PyObject *)self, self->colSize, mathutils_matrix_vector_cb_index, count));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return tuple;
|
||||||
}
|
}
|
||||||
/*----------------------------object[z:y]------------------------
|
/*----------------------------object[z:y]------------------------
|
||||||
sequence slice (set)*/
|
sequence slice (set)*/
|
||||||
|
|||||||
@@ -480,7 +480,7 @@ static int Quaternion_ass_item(QuaternionObject * self, int i, PyObject * ob)
|
|||||||
//sequence slice (get)
|
//sequence slice (get)
|
||||||
static PyObject *Quaternion_slice(QuaternionObject * self, int begin, int end)
|
static PyObject *Quaternion_slice(QuaternionObject * self, int begin, int end)
|
||||||
{
|
{
|
||||||
PyObject *list = NULL;
|
PyObject *tuple;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if(!BaseMath_ReadCallback(self))
|
if(!BaseMath_ReadCallback(self))
|
||||||
@@ -489,14 +489,14 @@ static PyObject *Quaternion_slice(QuaternionObject * self, int begin, int end)
|
|||||||
CLAMP(begin, 0, QUAT_SIZE);
|
CLAMP(begin, 0, QUAT_SIZE);
|
||||||
if (end<0) end= (QUAT_SIZE + 1) + end;
|
if (end<0) end= (QUAT_SIZE + 1) + end;
|
||||||
CLAMP(end, 0, QUAT_SIZE);
|
CLAMP(end, 0, QUAT_SIZE);
|
||||||
begin = MIN2(begin,end);
|
begin= MIN2(begin, end);
|
||||||
|
|
||||||
list = PyList_New(end - begin);
|
tuple= PyTuple_New(end - begin);
|
||||||
for(count = begin; count < end; count++) {
|
for(count= begin; count < end; count++) {
|
||||||
PyList_SET_ITEM(list, count - begin, PyFloat_FromDouble(self->quat[count]));
|
PyTuple_SET_ITEM(tuple, count - begin, PyFloat_FromDouble(self->quat[count]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return tuple;
|
||||||
}
|
}
|
||||||
//----------------------------object[z:y]------------------------
|
//----------------------------object[z:y]------------------------
|
||||||
//sequence slice (set)
|
//sequence slice (set)
|
||||||
|
|||||||
@@ -807,7 +807,7 @@ static int Vector_ass_item(VectorObject *self, int i, PyObject * ob)
|
|||||||
sequence slice (get) */
|
sequence slice (get) */
|
||||||
static PyObject *Vector_slice(VectorObject *self, int begin, int end)
|
static PyObject *Vector_slice(VectorObject *self, int begin, int end)
|
||||||
{
|
{
|
||||||
PyObject *list = NULL;
|
PyObject *tuple;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if(!BaseMath_ReadCallback(self))
|
if(!BaseMath_ReadCallback(self))
|
||||||
@@ -816,14 +816,14 @@ static PyObject *Vector_slice(VectorObject *self, int begin, int end)
|
|||||||
CLAMP(begin, 0, self->size);
|
CLAMP(begin, 0, self->size);
|
||||||
if (end<0) end= self->size+end+1;
|
if (end<0) end= self->size+end+1;
|
||||||
CLAMP(end, 0, self->size);
|
CLAMP(end, 0, self->size);
|
||||||
begin = MIN2(begin,end);
|
begin= MIN2(begin, end);
|
||||||
|
|
||||||
list = PyList_New(end - begin);
|
tuple= PyTuple_New(end - begin);
|
||||||
for(count = begin; count < end; count++) {
|
for(count = begin; count < end; count++) {
|
||||||
PyList_SET_ITEM(list, count - begin, PyFloat_FromDouble(self->vec[count]));
|
PyTuple_SET_ITEM(tuple, count - begin, PyFloat_FromDouble(self->vec[count]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return tuple;
|
||||||
}
|
}
|
||||||
/*----------------------------object[z:y]------------------------
|
/*----------------------------object[z:y]------------------------
|
||||||
sequence slice (set) */
|
sequence slice (set) */
|
||||||
|
|||||||
Reference in New Issue
Block a user