diff options
-rw-r--r-- | release/scripts/freestyle/modules/parameter_editor.py | 18 | ||||
-rw-r--r-- | source/blender/freestyle/intern/python/BPy_Convert.cpp | 9 |
2 files changed, 16 insertions, 11 deletions
diff --git a/release/scripts/freestyle/modules/parameter_editor.py b/release/scripts/freestyle/modules/parameter_editor.py index 6de53c623a6..6ab4184651a 100644 --- a/release/scripts/freestyle/modules/parameter_editor.py +++ b/release/scripts/freestyle/modules/parameter_editor.py @@ -814,17 +814,17 @@ class FaceMarkOneUP1D(UnaryPredicate1D): class MaterialBoundaryUP0D(UnaryPredicate0D): def __call__(self, it): - if (it.is_begin or it.is_end): + if it.is_begin: return False - else: - it.decrement() - prev = it.object - svert = next(it) - succ = next(it) - - fe = svert.get_fedge(prev) + it_prev = Interface0DIterator(it) + it_prev.decrement() + v = it.object + it.increment() + if it.is_end: + return False + fe = v.get_fedge(it_prev.object) idx1 = fe.material_index if fe.is_smooth else fe.material_index_left - fe = svert.get_fedge(succ) + fe = v.get_fedge(it.object) idx2 = fe.material_index if fe.is_smooth else fe.material_index_left return idx1 != idx2 diff --git a/source/blender/freestyle/intern/python/BPy_Convert.cpp b/source/blender/freestyle/intern/python/BPy_Convert.cpp index 78c3599b7cd..dbd836bc562 100644 --- a/source/blender/freestyle/intern/python/BPy_Convert.cpp +++ b/source/blender/freestyle/intern/python/BPy_Convert.cpp @@ -387,9 +387,14 @@ PyObject *BPy_IntegrationType_from_IntegrationType(IntegrationType i) PyObject *BPy_CurvePoint_from_CurvePoint(CurvePoint& cp) { PyObject *py_cp = CurvePoint_Type.tp_new(&CurvePoint_Type, 0, 0); - ((BPy_CurvePoint *) py_cp)->cp = &cp; + // CurvePointIterator::operator*() returns a reference of a class data + // member whose value is mutable upon iteration over different CurvePoints. + // It is likely that such a mutable reference is passed to this function, + // so that a new allocated CurvePoint instance is created here to avoid + // nasty bugs (cf. T41464). + ((BPy_CurvePoint *) py_cp)->cp = new CurvePoint(cp); ((BPy_CurvePoint *) py_cp)->py_if0D.if0D = ((BPy_CurvePoint *)py_cp)->cp; - ((BPy_CurvePoint *) py_cp)->py_if0D.borrowed = true; + ((BPy_CurvePoint *) py_cp)->py_if0D.borrowed = false; return py_cp; } |