From a95ecd69a9cd8a681e29418a67b506e6e9f6fc7c Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Tue, 8 Sep 2020 23:26:42 -0700 Subject: [PATCH] Simplified and further optimised colinear colorisation --- src/Mod/Path/App/VoronoiPyImp.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/Mod/Path/App/VoronoiPyImp.cpp b/src/Mod/Path/App/VoronoiPyImp.cpp index 5062e9f4e2..f9afffa33f 100644 --- a/src/Mod/Path/App/VoronoiPyImp.cpp +++ b/src/Mod/Path/App/VoronoiPyImp.cpp @@ -172,20 +172,22 @@ Py::List VoronoiPy::getCells(void) const { return list; } -static bool callbackWithVertex(Voronoi::diagram_type *dia, PyObject *callback, const Voronoi::diagram_type::vertex_type *v, bool &isExterior) { - if (!isExterior && v->color() == 0) { +static bool callbackWithVertex(Voronoi::diagram_type *dia, PyObject *callback, const Voronoi::diagram_type::vertex_type *v, bool &bail) { + bool rc = false; + if (!bail && v->color() == 0) { PyObject *vx = new VoronoiVertexPy(new VoronoiVertex(dia, v)); PyObject *arglist = Py_BuildValue("(O)", vx); PyObject *result = PyEval_CallObject(callback, arglist); Py_DECREF(arglist); Py_DECREF(vx); if (result == NULL) { - return false; + bail = true; + } else { + rc = result == Py_True; + Py_DECREF(result); } - isExterior = result == Py_True; - Py_DECREF(result); } - return true; + return rc; } PyObject* VoronoiPy::colorExterior(PyObject *args) { @@ -201,14 +203,13 @@ PyObject* VoronoiPy::colorExterior(PyObject *args) { if (e->is_finite() && e->color() == 0) { const Voronoi::diagram_type::vertex_type *v0 = e->vertex0(); const Voronoi::diagram_type::vertex_type *v1 = e->vertex1(); - bool is0 = false; - bool is1 = false; - if (!callbackWithVertex(vo->vd, callback, v0, is0) || !callbackWithVertex(vo->vd, callback, v1, is1)) { - return NULL; - } - if (is0 && is1) { + bool bail = false; + if (callbackWithVertex(vo->vd, callback, v0, bail) && callbackWithVertex(vo->vd, callback, v1, bail)) { vo->colorExterior(&(*e), color); } + if (bail) { + return NULL; + } } } }