Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2009-07-25 15:27:18 +0400
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2009-07-25 15:27:18 +0400
commitfec3ddabb1d75ee6a3a28589813f2acc85215e18 (patch)
treefd50e11cb9540fdcfad454458f6887091b330281 /source/blender/freestyle/intern/python/BPy_StrokeAttribute.cpp
parentd7bce7e10952ac47551132c93f64d9aa8e54f1db (diff)
* Better support for vector-like objects in method arguments.
Now the following methods in the Freestyle Python API accept not only Blender.Mathutils.Vector instances but also lists and tuples having an appropriate number of elements. FrsNoise::turbulence2() FrsNoise::turbulence3() FrsNoise::smoothNoise2() FrsNoise::smoothNoise3() SVertex::__init__() SVertex::setPoint3D() SVertex::setPoint2D() SVertex::AddNormal() FEdgeSharp::setNormalA() FEdgeSharp::setNormalB() FEdgeSmooth::setNormal() CalligraphicShader::__init__() StrokeAttribute::setAttributeVec2f() StrokeAttribute::setAttributeVec3f() StrokeAttribute::setColor() StrokeVertex::setPoint() * Added the following converters for the sake of the improvements mentioned above. Vec2f_ptr_from_PyObject() Vec3f_ptr_from_PyObject() Vec3r_ptr_from_PyObject() Vec2f_ptr_from_PyList() Vec3f_ptr_from_PyList() Vec3r_ptr_from_PyList() Vec2f_ptr_from_PyTuple() Vec3f_ptr_from_PyTuple() Vec3r_ptr_from_PyTuple() Those converters with the suffixes _PyList and _PyTuple accept only lists and tuples having an appropriate number of elements, respectively, while those with the suffix _PyObject accept lists, tuples, or Blender.Mathutils.Vector instances. * Fixed a null pointer reference in Interface0D___dealloc__(). * Corrected the names of 3 methods in the FEdgeSmooth class.
Diffstat (limited to 'source/blender/freestyle/intern/python/BPy_StrokeAttribute.cpp')
-rw-r--r--source/blender/freestyle/intern/python/BPy_StrokeAttribute.cpp64
1 files changed, 29 insertions, 35 deletions
diff --git a/source/blender/freestyle/intern/python/BPy_StrokeAttribute.cpp b/source/blender/freestyle/intern/python/BPy_StrokeAttribute.cpp
index 6bc25ed8fdd..8f20e740580 100644
--- a/source/blender/freestyle/intern/python/BPy_StrokeAttribute.cpp
+++ b/source/blender/freestyle/intern/python/BPy_StrokeAttribute.cpp
@@ -328,14 +328,16 @@ PyObject * StrokeAttribute_setColor( BPy_StrokeAttribute *self, PyObject *args )
if(!( PyArg_ParseTuple(args, "O|OO", &obj1, &obj2, &obj3) ))
return NULL;
-
- if( PyList_Check(obj1) && !obj2 && !obj3 ){
-
- Vec3f v( PyFloat_AsDouble( PyList_GetItem(obj1, 0) ),
- PyFloat_AsDouble( PyList_GetItem(obj1, 1) ),
- PyFloat_AsDouble( PyList_GetItem(obj1, 2) ) );
-
- self->sa->setColor( v );
+
+ if( obj1 && !obj2 && !obj3 ){
+
+ Vec3f *v = Vec3f_ptr_from_PyObject(obj1);
+ if( !v ) {
+ PyErr_SetString(PyExc_TypeError, "argument 1 must be a 3D vector (either a list of 3 elements or Vector)");
+ return NULL;
+ }
+ self->sa->setColor( *v );
+ delete v;
} else if( obj1 && obj2 && obj3 ){
@@ -367,12 +369,15 @@ PyObject * StrokeAttribute_setThickness( BPy_StrokeAttribute *self, PyObject *ar
if(!( PyArg_ParseTuple(args, "O|O", &obj1, &obj2) ))
return NULL;
- if( PyList_Check(obj1) && !obj2 ){
+ if( obj1 && !obj2 ){
- Vec2f v( PyFloat_AsDouble( PyList_GetItem(obj1, 0) ),
- PyFloat_AsDouble( PyList_GetItem(obj1, 1) ) );
-
- self->sa->setThickness( v );
+ Vec2f *v = Vec2f_ptr_from_PyObject(obj1);
+ if( !v ) {
+ PyErr_SetString(PyExc_TypeError, "argument 1 must be a 2D vector (either a list of 2 elements or Vector)");
+ return NULL;
+ }
+ self->sa->setThickness( *v );
+ delete v;
} else if( obj1 && obj2 ){
@@ -416,19 +421,14 @@ PyObject * StrokeAttribute_setAttributeVec2f( BPy_StrokeAttribute *self, PyObjec
if(!( PyArg_ParseTuple(args, "sO", &s, &obj) ))
return NULL;
-
- if( PyList_Check(obj) && PyList_Size(obj) > 1) {
-
- Vec2f v( PyFloat_AsDouble( PyList_GetItem(obj, 0) ),
- PyFloat_AsDouble( PyList_GetItem(obj, 1) ) );
-
- self->sa->setAttributeVec2f( s, v );
-
- } else {
- PyErr_SetString(PyExc_TypeError, "invalid arguments");
+ Vec2f *v = Vec2f_ptr_from_PyObject(obj);
+ if( !v ) {
+ PyErr_SetString(PyExc_TypeError, "argument 2 must be a 2D vector (either a list of 2 elements or Vector)");
return NULL;
}
-
+ self->sa->setAttributeVec2f( s, *v );
+ delete v;
+
Py_RETURN_NONE;
}
@@ -438,19 +438,13 @@ PyObject * StrokeAttribute_setAttributeVec3f( BPy_StrokeAttribute *self, PyObjec
if(!( PyArg_ParseTuple(args, "sO", &s, &obj) ))
return NULL;
-
- if( PyList_Check(obj) && PyList_Size(obj) > 2 ) {
-
- Vec3f v( PyFloat_AsDouble( PyList_GetItem(obj, 0) ),
- PyFloat_AsDouble( PyList_GetItem(obj, 1) ),
- PyFloat_AsDouble( PyList_GetItem(obj, 2) ) );
-
- self->sa->setAttributeVec3f( s, v );
-
- } else {
- PyErr_SetString(PyExc_TypeError, "invalid arguments");
+ Vec3f *v = Vec3f_ptr_from_PyObject(obj);
+ if( !v ) {
+ PyErr_SetString(PyExc_TypeError, "argument 2 must be a 3D vector (either a list of 3 elements or Vector)");
return NULL;
}
+ self->sa->setAttributeVec3f( s, *v );
+ delete v;
Py_RETURN_NONE;
}