From fec3ddabb1d75ee6a3a28589813f2acc85215e18 Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Sat, 25 Jul 2009 11:27:18 +0000 Subject: * 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. --- .../python/Interface1D/FEdge/BPy_FEdgeSharp.cpp | 34 ++++++++-------------- 1 file changed, 12 insertions(+), 22 deletions(-) (limited to 'source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSharp.cpp') diff --git a/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSharp.cpp b/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSharp.cpp index c6bc201e37d..aa0ba7dfc46 100644 --- a/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSharp.cpp +++ b/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSharp.cpp @@ -184,20 +184,15 @@ PyObject * FEdgeSharp_bMaterial( BPy_FEdgeSharp *self ) { PyObject * FEdgeSharp_setNormalA( BPy_FEdgeSharp *self, PyObject *args ) { PyObject *obj = 0; - if(!( PyArg_ParseTuple(args, "O!", &PyList_Type, &obj) )) + if(!( PyArg_ParseTuple(args, "O", &obj) )) return NULL; - if( PyList_Size(obj) != 3 ) { - stringstream msg("FEdgeSharp::setNormalA() accepts a list of 3 elements ("); - msg << PyList_Size(obj) << " found)"; - PyErr_SetString(PyExc_TypeError, msg.str().c_str()); + Vec3r *v = Vec3r_ptr_from_PyObject(obj); + if( !v ) { + PyErr_SetString(PyExc_TypeError, "argument 1 must be a 3D vector (either a list of 3 elements or Vector)"); return NULL; } - - Vec3r v( PyFloat_AsDouble( PyList_GetItem(obj,0) ), - PyFloat_AsDouble( PyList_GetItem(obj,1) ), - PyFloat_AsDouble( PyList_GetItem(obj,2) ) ); - - self->fes->setNormalA( v ); + self->fes->setNormalA( *v ); + delete v; Py_RETURN_NONE; } @@ -205,20 +200,15 @@ PyObject * FEdgeSharp_setNormalA( BPy_FEdgeSharp *self, PyObject *args ) { PyObject * FEdgeSharp_setNormalB( BPy_FEdgeSharp *self, PyObject *args ) { PyObject *obj = 0; - if(!( PyArg_ParseTuple(args, "O!", &PyList_Type, &obj) )) + if(!( PyArg_ParseTuple(args, "O", &obj) )) return NULL; - if( PyList_Size(obj) != 3 ) { - stringstream msg("FEdgeSharp::setNormalB() accepts a list of 3 elements ("); - msg << PyList_Size(obj) << " found)"; - PyErr_SetString(PyExc_TypeError, msg.str().c_str()); + Vec3r *v = Vec3r_ptr_from_PyObject(obj); + if( !v ) { + PyErr_SetString(PyExc_TypeError, "argument 1 must be a 3D vector (either a list of 3 elements or Vector)"); return NULL; } - - Vec3r v( PyFloat_AsDouble( PyList_GetItem(obj,0) ), - PyFloat_AsDouble( PyList_GetItem(obj,1) ), - PyFloat_AsDouble( PyList_GetItem(obj,2) ) ); - - self->fes->setNormalB( v ); + self->fes->setNormalB( *v ); + delete v; Py_RETURN_NONE; } -- cgit v1.2.3