diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2014-01-31 08:40:24 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2014-02-02 17:05:28 +0400 |
commit | b58beed604f69ff8136d55f91ad75003cc5f575f (patch) | |
tree | f7bff176aecedc317851337bf3488d6a0b019d65 /source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp | |
parent | 41cc86a666d22501f25c58d81b1b94020b8c997f (diff) |
Imported D222 Diff 2 (ID 781) by flokkievids (Folkert de Vries).
Diffstat (limited to 'source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp')
-rw-r--r-- | source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp | 49 |
1 files changed, 37 insertions, 12 deletions
diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp index 12ca3d6cc4a..b7cb53b9dd0 100644 --- a/source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp +++ b/source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp @@ -60,36 +60,61 @@ static int orientedViewEdgeIterator_init(BPy_orientedViewEdgeIterator *self, PyO if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O!", (char **)kwlist, &orientedViewEdgeIterator_Type, &brother)) return -1; - if (!brother) + if (!brother) { self->ove_it = new ViewVertexInternal::orientedViewEdgeIterator(); - else + self->at_start = true; + self->reversed = false; + } + else { self->ove_it = new ViewVertexInternal::orientedViewEdgeIterator(*(((BPy_orientedViewEdgeIterator *)brother)->ove_it)); - self->py_it.it = self->ove_it; - self->reversed = 0; + self->at_start = ((BPy_orientedViewEdgeIterator *)brother)->at_start; + self->reversed = ((BPy_orientedViewEdgeIterator *)brother)->reversed; + } + self->py_it.it = self->ove_it; return 0; } -static PyObject *orientedViewEdgeIterator_iternext(BPy_orientedViewEdgeIterator *self) +static PyObject *orientedViewEdgeIterator_iter(BPy_orientedViewEdgeIterator *self) { - ViewVertex::directedViewEdge *dve; + Py_INCREF(self); + self->at_start = true; + return (PyObject *) self; +} +static PyObject *orientedViewEdgeIterator_iternext(BPy_orientedViewEdgeIterator *self) +{ if (self->reversed) { if (self->ove_it->isBegin()) { PyErr_SetNone(PyExc_StopIteration); return NULL; } - self->ove_it->decrement(); - dve = self->ove_it->operator->(); + if (self->at_start) + self->at_start = false; + else { + self->ove_it->decrement(); + if (self->ove_it->isBegin()) { + PyErr_SetNone(PyExc_StopIteration); + return NULL; + } + } } else { if (self->ove_it->isEnd()) { PyErr_SetNone(PyExc_StopIteration); return NULL; } - dve = self->ove_it->operator->(); - self->ove_it->increment(); + if (self->at_start) + self->at_start = false; + else { + self->ove_it->increment(); + if (self->ove_it->isEnd()) { + PyErr_SetNone(PyExc_StopIteration); + return NULL; + } + } } - return BPy_directedViewEdge_from_directedViewEdge(*dve); + ViewVertex::directedViewEdge *dve = self->ove_it->operator->(); + return BPy_directedViewEdge_from_directedViewEdge(*dve); } /*----------------------orientedViewEdgeIterator get/setters ----------------------------*/ @@ -144,7 +169,7 @@ PyTypeObject orientedViewEdgeIterator_Type = { 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ - PyObject_SelfIter, /* tp_iter */ + (getiterfunc)orientedViewEdgeIterator_iter, /* tp_iter */ (iternextfunc)orientedViewEdgeIterator_iternext, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ |