This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/freestyle/intern/python/Interface0D/BPy_ViewVertex.cpp
Omar Emara 21a2b975b8 Cleanup: Remove using-directive from freestyle headers
The header files in freestyle utilize the using-directive at the global
file scope. This is a bad practice as it pollutes the global name space
causing possible ambiguous reference compilation errors. In particular,
the DNA files that are included by freestyle will cause those ambiguous
reference errors when the developers adds a DNA member with a type name
that also exist in the Freestyle name space, such as Curve and possibly
others.

This patch does the minimal work needed to resolve that by moving the
using-directives from the headers into the corresponding translation
units.

Reviewed By: Brecht

Differential Revision: https://developer.blender.org/D10351
2021-02-08 17:29:42 +02:00

213 lines
8.7 KiB
C++

/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/** \file
* \ingroup freestyle
*/
#include "BPy_ViewVertex.h"
#include "../BPy_Convert.h"
#include "../BPy_Nature.h"
#include "../Interface1D/BPy_ViewEdge.h"
#ifdef __cplusplus
extern "C" {
#endif
using namespace Freestyle;
///////////////////////////////////////////////////////////////////////////////////////////
/*----------------------ViewVertex methods----------------------------*/
PyDoc_STRVAR(ViewVertex_doc,
"Class hierarchy: :class:`Interface0D` > :class:`ViewVertex`\n"
"\n"
"Class to define a view vertex. A view vertex is a feature vertex\n"
"corresponding to a point of the image graph, where the characteristics\n"
"of an edge (e.g., nature and visibility) might change. A\n"
":class:`ViewVertex` can be of two kinds: A :class:`TVertex` when it\n"
"corresponds to the intersection between two ViewEdges or a\n"
":class:`NonTVertex` when it corresponds to a vertex of the initial\n"
"input mesh (it is the case for vertices such as corners for example).\n"
"Thus, this class can be specialized into two classes, the\n"
":class:`TVertex` class and the :class:`NonTVertex` class.");
static int ViewVertex_init(BPy_ViewVertex * /*self*/, PyObject * /*args*/, PyObject * /*kwds*/)
{
PyErr_SetString(PyExc_TypeError, "cannot instantiate abstract class");
return -1;
}
PyDoc_STRVAR(ViewVertex_edges_begin_doc,
".. method:: edges_begin()\n"
"\n"
" Returns an iterator over the ViewEdges that goes to or comes from\n"
" this ViewVertex pointing to the first ViewEdge of the list. The\n"
" orientedViewEdgeIterator allows to iterate in CCW order over these\n"
" ViewEdges and to get the orientation for each ViewEdge\n"
" (incoming/outgoing).\n"
"\n"
" :return: An orientedViewEdgeIterator pointing to the first ViewEdge.\n"
" :rtype: :class:`orientedViewEdgeIterator`");
static PyObject *ViewVertex_edges_begin(BPy_ViewVertex *self)
{
ViewVertexInternal::orientedViewEdgeIterator ove_it(self->vv->edgesBegin());
return BPy_orientedViewEdgeIterator_from_orientedViewEdgeIterator(ove_it, false);
}
PyDoc_STRVAR(ViewVertex_edges_end_doc,
".. method:: edges_end()\n"
"\n"
" Returns an orientedViewEdgeIterator over the ViewEdges around this\n"
" ViewVertex, pointing after the last ViewEdge.\n"
"\n"
" :return: An orientedViewEdgeIterator pointing after the last ViewEdge.\n"
" :rtype: :class:`orientedViewEdgeIterator`");
static PyObject *ViewVertex_edges_end(BPy_ViewVertex * /*self*/)
{
#if 0
ViewVertexInternal::orientedViewEdgeIterator ove_it(self->vv->edgesEnd());
return BPy_orientedViewEdgeIterator_from_orientedViewEdgeIterator(ove_it, 1);
#else
PyErr_SetString(PyExc_NotImplementedError, "edges_end method currently disabled");
return nullptr;
#endif
}
PyDoc_STRVAR(ViewVertex_edges_iterator_doc,
".. method:: edges_iterator(edge)\n"
"\n"
" Returns an orientedViewEdgeIterator pointing to the ViewEdge given\n"
" as argument.\n"
"\n"
" :arg edge: A ViewEdge object.\n"
" :type edge: :class:`ViewEdge`\n"
" :return: An orientedViewEdgeIterator pointing to the given ViewEdge.\n"
" :rtype: :class:`orientedViewEdgeIterator`");
static PyObject *ViewVertex_edges_iterator(BPy_ViewVertex *self, PyObject *args, PyObject *kwds)
{
static const char *kwlist[] = {"edge", nullptr};
PyObject *py_ve;
if (PyArg_ParseTupleAndKeywords(args, kwds, "O!", (char **)kwlist, &ViewEdge_Type, &py_ve)) {
return nullptr;
}
ViewEdge *ve = ((BPy_ViewEdge *)py_ve)->ve;
ViewVertexInternal::orientedViewEdgeIterator ove_it(self->vv->edgesIterator(ve));
return BPy_orientedViewEdgeIterator_from_orientedViewEdgeIterator(ove_it, false);
}
static PyMethodDef BPy_ViewVertex_methods[] = {
{"edges_begin", (PyCFunction)ViewVertex_edges_begin, METH_NOARGS, ViewVertex_edges_begin_doc},
{"edges_end", (PyCFunction)ViewVertex_edges_end, METH_NOARGS, ViewVertex_edges_end_doc},
{"edges_iterator",
(PyCFunction)ViewVertex_edges_iterator,
METH_VARARGS | METH_KEYWORDS,
ViewVertex_edges_iterator_doc},
{nullptr, nullptr, 0, nullptr},
};
/*----------------------ViewVertex get/setters ----------------------------*/
PyDoc_STRVAR(ViewVertex_nature_doc,
"The nature of this ViewVertex.\n"
"\n"
":type: :class:`Nature`");
static PyObject *ViewVertex_nature_get(BPy_ViewVertex *self, void *UNUSED(closure))
{
Nature::VertexNature nature = self->vv->getNature();
if (PyErr_Occurred()) {
return nullptr;
}
return BPy_Nature_from_Nature(nature); // return a copy
}
static int ViewVertex_nature_set(BPy_ViewVertex *self, PyObject *value, void *UNUSED(closure))
{
if (!BPy_Nature_Check(value)) {
PyErr_SetString(PyExc_TypeError, "value must be a Nature");
return -1;
}
self->vv->setNature(PyLong_AsLong((PyObject *)&((BPy_Nature *)value)->i));
return 0;
}
static PyGetSetDef BPy_ViewVertex_getseters[] = {
{"nature",
(getter)ViewVertex_nature_get,
(setter)ViewVertex_nature_set,
ViewVertex_nature_doc,
nullptr},
{nullptr, nullptr, nullptr, nullptr, nullptr} /* Sentinel */
};
/*-----------------------BPy_ViewVertex type definition ------------------------------*/
PyTypeObject ViewVertex_Type = {
PyVarObject_HEAD_INIT(nullptr, 0) "ViewVertex", /* tp_name */
sizeof(BPy_ViewVertex), /* tp_basicsize */
0, /* tp_itemsize */
nullptr, /* tp_dealloc */
#if PY_VERSION_HEX >= 0x03080000
0, /* tp_vectorcall_offset */
#else
nullptr, /* tp_print */
#endif
nullptr, /* tp_getattr */
nullptr, /* tp_setattr */
nullptr, /* tp_reserved */
nullptr, /* tp_repr */
nullptr, /* tp_as_number */
nullptr, /* tp_as_sequence */
nullptr, /* tp_as_mapping */
nullptr, /* tp_hash */
nullptr, /* tp_call */
nullptr, /* tp_str */
nullptr, /* tp_getattro */
nullptr, /* tp_setattro */
nullptr, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
ViewVertex_doc, /* tp_doc */
nullptr, /* tp_traverse */
nullptr, /* tp_clear */
nullptr, /* tp_richcompare */
0, /* tp_weaklistoffset */
nullptr, /* tp_iter */
nullptr, /* tp_iternext */
BPy_ViewVertex_methods, /* tp_methods */
nullptr, /* tp_members */
BPy_ViewVertex_getseters, /* tp_getset */
&Interface0D_Type, /* tp_base */
nullptr, /* tp_dict */
nullptr, /* tp_descr_get */
nullptr, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)ViewVertex_init, /* tp_init */
nullptr, /* tp_alloc */
nullptr, /* tp_new */
};
///////////////////////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif