diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-02-16 18:21:40 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-02-16 18:21:40 +0400 |
commit | b35a893249bed1a70f40b86615531d7d75fe12f3 (patch) | |
tree | b3e8bbbad81873f6270f4dd00d35bc3a0526f3af /source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp | |
parent | aa9c01f384d38a8e75bfd25bbdadba3fe2246e5b (diff) |
Freestyle Python API improvements - part 4.
Major API updates were made as in part 3 to address code review comments.
This revision focuses on Python wrappers of C++ iterators.
* Most getter/setter methods were reimplemented as attributes using PyGetSetDef.
* The naming of methods and attributes was fixed to follow the naming conventions
of the Blender Python API (i.e., lower case + underscores for methods and attributes,
and CamelCase for classes). The only irregular naming change is the following, to
better indicate the functionality:
- ChainingIterator: getVertex --> next_vertex
* In addition, some code clean-up was done in both C++ and Python. Also duplicated
definitions of predicate classes were removed.
Diffstat (limited to 'source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp')
-rw-r--r-- | source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp | 117 |
1 files changed, 58 insertions, 59 deletions
diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp index ef40d994e27..6243e487646 100644 --- a/source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp +++ b/source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp @@ -12,7 +12,7 @@ extern "C" { //------------------------INSTANCE METHODS ---------------------------------- -static char SVertexIterator___doc__[] = +PyDoc_STRVAR(SVertexIterator_doc, "Class hierarchy: :class:`Iterator` > :class:`SVertexIterator`\n" "\n" "Class representing an iterator over :class:`SVertex` of a\n" @@ -44,34 +44,34 @@ static char SVertexIterator___doc__[] = " :arg next: The next FEdge going out from v.\n" " :type next: :class:`FEdge`\n" " :arg t: The curvilinear abscissa at v.\n" -" :type t: float\n"; +" :type t: float"); -static int SVertexIterator___init__(BPy_SVertexIterator *self, PyObject *args ) -{ +static int SVertexIterator_init(BPy_SVertexIterator *self, PyObject *args) +{ PyObject *obj1 = 0, *obj2 = 0, *obj3 = 0, *obj4 = 0; float f = 0; - if (! PyArg_ParseTuple(args, "|OOOOf", &obj1, &obj2, &obj3, &obj4, f) ) - return -1; + if (!PyArg_ParseTuple(args, "|OOOOf", &obj1, &obj2, &obj3, &obj4, f)) + return -1; - if( !obj1 ){ + if (!obj1) { self->sv_it = new ViewEdgeInternal::SVertexIterator(); - - } else if( BPy_SVertexIterator_Check(obj1) ) { - self->sv_it = new ViewEdgeInternal::SVertexIterator(*( ((BPy_SVertexIterator *) obj1)->sv_it )); - - } else if( obj1 && BPy_SVertex_Check(obj1) && - obj2 && BPy_SVertex_Check(obj2) && - obj3 && BPy_FEdge_Check(obj3) && - obj4 && BPy_FEdge_Check(obj4) ) { + + } else if (BPy_SVertexIterator_Check(obj1)) { + self->sv_it = new ViewEdgeInternal::SVertexIterator(*(((BPy_SVertexIterator *)obj1)->sv_it)); + + } else if (obj1 && BPy_SVertex_Check(obj1) && + obj2 && BPy_SVertex_Check(obj2) && + obj3 && BPy_FEdge_Check(obj3) && + obj4 && BPy_FEdge_Check(obj4)) { self->sv_it = new ViewEdgeInternal::SVertexIterator( - ((BPy_SVertex *) obj1)->sv, - ((BPy_SVertex *) obj2)->sv, - ((BPy_FEdge *) obj3)->fe, - ((BPy_FEdge *) obj4)->fe, - f ); - + ((BPy_SVertex *)obj1)->sv, + ((BPy_SVertex *)obj2)->sv, + ((BPy_FEdge *)obj3)->fe, + ((BPy_FEdge *)obj4)->fe, + f); + } else { PyErr_SetString(PyExc_TypeError, "invalid argument(s)"); return -1; @@ -82,53 +82,52 @@ static int SVertexIterator___init__(BPy_SVertexIterator *self, PyObject *args ) return 0; } -static char SVertexIterator_t___doc__[] = -".. method:: t()\n" -"\n" -" Returns the curvilinear abscissa.\n" +static PyMethodDef BPy_SVertexIterator_methods[] = { + {NULL, NULL, 0, NULL} +}; + +/*----------------------SVertexIterator get/setters ----------------------------*/ + +PyDoc_STRVAR(SVertexIterator_object_doc, +"The SVertex object currently pointed by this iterator.\n" "\n" -" :return: The curvilinear abscissa.\n" -" :rtype: float\n"; +":type: :class:`SVertex`"); + +static PyObject *SVertexIterator_object_get(BPy_SVertexIterator *self, void *UNUSED(closure)) +{ + SVertex *sv = self->sv_it->operator->(); -static PyObject * SVertexIterator_t( BPy_SVertexIterator *self ) { - return PyFloat_FromDouble( self->sv_it->t() ); + if (sv) + return BPy_SVertex_from_SVertex(*sv); + + Py_RETURN_NONE; } -static char SVertexIterator_u___doc__[] = -".. method:: u()\n" -"\n" -" Returns the point parameter (0<=u<=1).\n" +PyDoc_STRVAR(SVertexIterator_t_doc, +"The curvilinear abscissa of the current point.\n" "\n" -" :return: The point parameter.\n" -" :rtype: float\n"; +":type: float"); -static PyObject * SVertexIterator_u( BPy_SVertexIterator *self ) { - return PyFloat_FromDouble( self->sv_it->u() ); +static PyObject *SVertexIterator_t_get(BPy_SVertexIterator *self, void *UNUSED(closure)) +{ + return PyFloat_FromDouble(self->sv_it->t()); } -static char SVertexIterator_getObject___doc__[] = -".. method:: getObject()\n" +PyDoc_STRVAR(SVertexIterator_u_doc, +"The point parameter at the current point in the 1D element (0 <= u <= 1).\n" "\n" -" Returns the pointed SVertex.\n" -"\n" -" :return: the pointed SVertex.\n" -" :rtype: :class:`SVertex`\n"; +":type: float"); -static PyObject * SVertexIterator_getObject( BPy_SVertexIterator *self) { - SVertex *sv = self->sv_it->operator->(); - - if( sv ) - return BPy_SVertex_from_SVertex( *sv ); - - Py_RETURN_NONE; +static PyObject *SVertexIterator_u_get(BPy_SVertexIterator *self, void *UNUSED(closure)) +{ + return PyFloat_FromDouble(self->sv_it->u()); } -/*----------------------SVertexIterator instance definitions ----------------------------*/ -static PyMethodDef BPy_SVertexIterator_methods[] = { - {"t", ( PyCFunction ) SVertexIterator_t, METH_NOARGS, SVertexIterator_t___doc__}, - {"u", ( PyCFunction ) SVertexIterator_u, METH_NOARGS, SVertexIterator_u___doc__}, - {"getObject", ( PyCFunction ) SVertexIterator_getObject, METH_NOARGS, SVertexIterator_getObject___doc__}, - {NULL, NULL, 0, NULL} +static PyGetSetDef BPy_SVertexIterator_getseters[] = { + {(char *)"object", (getter)SVertexIterator_object_get, (setter)NULL, (char *)SVertexIterator_object_doc, NULL}, + {(char *)"t", (getter)SVertexIterator_t_get, (setter)NULL, (char *)SVertexIterator_t_doc, NULL}, + {(char *)"u", (getter)SVertexIterator_u_get, (setter)NULL, (char *)SVertexIterator_u_doc, NULL}, + {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ }; /*-----------------------BPy_SVertexIterator type definition ------------------------------*/ @@ -154,7 +153,7 @@ PyTypeObject SVertexIterator_Type = { 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ - SVertexIterator___doc__, /* tp_doc */ + SVertexIterator_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ @@ -163,13 +162,13 @@ PyTypeObject SVertexIterator_Type = { 0, /* tp_iternext */ BPy_SVertexIterator_methods, /* tp_methods */ 0, /* tp_members */ - 0, /* tp_getset */ + BPy_SVertexIterator_getseters, /* tp_getset */ &Iterator_Type, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ - (initproc)SVertexIterator___init__, /* tp_init */ + (initproc)SVertexIterator_init, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ }; |