diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-05-29 03:53:28 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-05-29 03:53:28 +0400 |
commit | eabf741a8d76aa9400a071c37227504378fc6315 (patch) | |
tree | 705e01ce1aaf4a4282aa3abb19d44933c48fb7b2 /source/blender/freestyle/intern/python/UnaryPredicate1D | |
parent | b6a9a953bc6aa7d81921a796e8ce1123fdedefc7 (diff) |
Fix for the WithinImageBorderUP1D predicate not working with a ViewEdge such that
none of the SVertices are within the image boundary but an FEdge intersects with
the image boundary.
The problem was reported by edna through the BA Freestyle thread, with a .blend
file for reproducing the bug. Thanks!
Diffstat (limited to 'source/blender/freestyle/intern/python/UnaryPredicate1D')
-rw-r--r-- | source/blender/freestyle/intern/python/UnaryPredicate1D/BPy_WithinImageBoundaryUP1D.cpp | 88 | ||||
-rw-r--r-- | source/blender/freestyle/intern/python/UnaryPredicate1D/BPy_WithinImageBoundaryUP1D.h | 29 |
2 files changed, 117 insertions, 0 deletions
diff --git a/source/blender/freestyle/intern/python/UnaryPredicate1D/BPy_WithinImageBoundaryUP1D.cpp b/source/blender/freestyle/intern/python/UnaryPredicate1D/BPy_WithinImageBoundaryUP1D.cpp new file mode 100644 index 00000000000..9beae103113 --- /dev/null +++ b/source/blender/freestyle/intern/python/UnaryPredicate1D/BPy_WithinImageBoundaryUP1D.cpp @@ -0,0 +1,88 @@ +#include "BPy_WithinImageBoundaryUP1D.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/////////////////////////////////////////////////////////////////////////////////////////// + +//------------------------INSTANCE METHODS ---------------------------------- + +static char WithinImageBoundaryUP1D___doc__[] = +"Class hierarchy: :class:`UnaryPredicate1D` > :class:`WithinImageBoundaryUP1D`\n" +"\n" +".. method:: __init__(xmin, ymin, xmax, ymax)\n" +"\n" +" Builds an WithinImageBoundaryUP1D object.\n" +"\n" +" :arg xmin: X lower bound of the image boundary.\n" +" :type xmin: float\n" +" :arg ymin: Y lower bound of the image boundary.\n" +" :type ymin: float\n" +" :arg xmax: X upper bound of the image boundary.\n" +" :type xmax: float\n" +" :arg ymax: Y upper bound of the image boundary.\n" +" :type ymax: float\n" +"\n" +".. method:: __call__(inter)\n" +"\n" +" Returns true if the Interface1D intersects with image boundary.\n"; + +static int WithinImageBoundaryUP1D___init__( BPy_WithinImageBoundaryUP1D* self, PyObject *args ) +{ + double xmin, ymin, xmax, ymax; + + if(!( PyArg_ParseTuple(args, "dddd", &xmin, &ymin, &xmax, &ymax) )) + return -1; + self->py_up1D.up1D = new Predicates1D::WithinImageBoundaryUP1D(xmin, ymin, xmax, ymax); + return 0; +} + +/*-----------------------BPy_TrueUP1D type definition ------------------------------*/ + +PyTypeObject WithinImageBoundaryUP1D_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "WithinImageBoundaryUP1D", /* tp_name */ + sizeof(BPy_WithinImageBoundaryUP1D), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + WithinImageBoundaryUP1D___doc__, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + &UnaryPredicate1D_Type, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)WithinImageBoundaryUP1D___init__, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ +}; + +/////////////////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +} +#endif diff --git a/source/blender/freestyle/intern/python/UnaryPredicate1D/BPy_WithinImageBoundaryUP1D.h b/source/blender/freestyle/intern/python/UnaryPredicate1D/BPy_WithinImageBoundaryUP1D.h new file mode 100644 index 00000000000..2bd3e698a21 --- /dev/null +++ b/source/blender/freestyle/intern/python/UnaryPredicate1D/BPy_WithinImageBoundaryUP1D.h @@ -0,0 +1,29 @@ +#ifndef FREESTYLE_PYTHON_WITHINIMAGEBOUNDARYUP1D_H +#define FREESTYLE_PYTHON_WITHINIMAGEBOUNDARYUP1D_H + +#include "../BPy_UnaryPredicate1D.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/////////////////////////////////////////////////////////////////////////////////////////// + +#include <Python.h> + +extern PyTypeObject WithinImageBoundaryUP1D_Type; + +#define BPy_WithinImageBoundaryUP1D_Check(v) ( PyObject_IsInstance( (PyObject *) v, (PyObject *) &WithinImageBoundaryUP1D_Type) ) + +/*---------------------------Python BPy_WithinImageBoundaryUP1D structure definition----------*/ +typedef struct { + BPy_UnaryPredicate1D py_up1D; +} BPy_WithinImageBoundaryUP1D; + +/////////////////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +} +#endif + +#endif /* FREESTYLE_PYTHON_WITHINIMAGEBOUNDARYUP1D_H */ |