Blender V5.0
BPy_ViewEdge.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2004-2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "BPy_ViewEdge.h"
10
11#include "../BPy_Convert.h"
12#include "../BPy_Id.h"
13#include "../BPy_Nature.h"
14#include "../BPy_ViewShape.h"
18
19using namespace Freestyle;
20
22
23/*----------------------ViewEdge methods ----------------------------*/
24
26 /* Wrap. */
27 ViewEdge_doc,
28 "Class hierarchy: :class:`Interface1D` > :class:`ViewEdge`\n"
29 "\n"
30 "Class defining a ViewEdge. A ViewEdge in an edge of the image graph.\n"
31 "it connects two :class:`ViewVertex` objects. It is made by connecting\n"
32 "a set of FEdges.\n"
33 "\n"
34 ".. method:: __init__()\n"
35 " __init__(brother)\n"
36 "\n"
37 " Builds a :class:`ViewEdge` using the default constructor or the copy constructor.\n"
38 "\n"
39 " :arg brother: A ViewEdge object.\n"
40 " :type brother: :class:`ViewEdge`\n");
41static int ViewEdge_init(BPy_ViewEdge *self, PyObject *args, PyObject *kwds)
42{
43 static const char *kwlist[] = {"brother", nullptr};
44 PyObject *brother = nullptr;
45
46 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O!", (char **)kwlist, &ViewEdge_Type, &brother)) {
47 return -1;
48 }
49 if (!brother) {
50 self->ve = new ViewEdge();
51 }
52 else {
53 self->ve = new ViewEdge(*(((BPy_ViewEdge *)brother)->ve));
54 }
55 self->py_if1D.if1D = self->ve;
56 self->py_if1D.borrowed = false;
57 return 0;
58}
59
61 /* Wrap. */
62 ViewEdge_update_fedges_doc,
63 ".. method:: update_fedges()\n"
64 "\n"
65 " Sets Viewedge to this for all embedded fedges.\n");
67{
68 self->ve->UpdateFEdges();
69 Py_RETURN_NONE;
70}
71
72#ifdef __GNUC__
73# ifdef __clang__
74# pragma clang diagnostic push
75# pragma clang diagnostic ignored "-Wcast-function-type"
76# else
77# pragma GCC diagnostic push
78# pragma GCC diagnostic ignored "-Wcast-function-type"
79# endif
80#endif
81
82static PyMethodDef BPy_ViewEdge_methods[] = {
83 {"update_fedges",
84 (PyCFunction)ViewEdge_update_fedges,
85 METH_NOARGS,
86 ViewEdge_update_fedges_doc},
87 {nullptr, nullptr, 0, nullptr},
88};
89
90#ifdef __GNUC__
91# ifdef __clang__
92# pragma clang diagnostic pop
93# else
94# pragma GCC diagnostic pop
95# endif
96#endif
97
98/*----------------------ViewEdge get/setters ----------------------------*/
99
101 /* Wrap. */
102 ViewEdge_first_viewvertex_doc,
103 "The first ViewVertex.\n"
104 "\n"
105 ":type: :class:`ViewVertex`\n");
106static PyObject *ViewEdge_first_viewvertex_get(BPy_ViewEdge *self, void * /*closure*/)
107{
108 ViewVertex *v = self->ve->A();
109 if (v) {
111 }
112 Py_RETURN_NONE;
113}
114
115static int ViewEdge_first_viewvertex_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
116{
117 if (!BPy_ViewVertex_Check(value)) {
118 return -1;
119 }
120 self->ve->setA(((BPy_ViewVertex *)value)->vv);
121 return 0;
122}
123
125 /* Wrap. */
126 ViewEdge_last_viewvertex_doc,
127 "The second ViewVertex.\n"
128 "\n"
129 ":type: :class:`ViewVertex`\n");
130static PyObject *ViewEdge_last_viewvertex_get(BPy_ViewEdge *self, void * /*closure*/)
131{
132 ViewVertex *v = self->ve->B();
133 if (v) {
135 }
136 Py_RETURN_NONE;
137}
138
139static int ViewEdge_last_viewvertex_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
140{
141 if (!BPy_ViewVertex_Check(value)) {
142 return -1;
143 }
144 self->ve->setB(((BPy_ViewVertex *)value)->vv);
145 return 0;
146}
147
149 /* Wrap. */
150 ViewEdge_first_fedge_doc,
151 "The first FEdge that constitutes this ViewEdge.\n"
152 "\n"
153 ":type: :class:`FEdge`\n");
154static PyObject *ViewEdge_first_fedge_get(BPy_ViewEdge *self, void * /*closure*/)
155{
156 FEdge *fe = self->ve->fedgeA();
157 if (fe) {
158 return Any_BPy_FEdge_from_FEdge(*fe);
159 }
160 Py_RETURN_NONE;
161}
162
163static int ViewEdge_first_fedge_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
164{
165 if (!BPy_FEdge_Check(value)) {
166 return -1;
167 }
168 self->ve->setFEdgeA(((BPy_FEdge *)value)->fe);
169 return 0;
170}
171
173 /* Wrap. */
174 ViewEdge_last_fedge_doc,
175 "The last FEdge that constitutes this ViewEdge.\n"
176 "\n"
177 ":type: :class:`FEdge`\n");
178static PyObject *ViewEdge_last_fedge_get(BPy_ViewEdge *self, void * /*closure*/)
179{
180 FEdge *fe = self->ve->fedgeB();
181 if (fe) {
182 return Any_BPy_FEdge_from_FEdge(*fe);
183 }
184 Py_RETURN_NONE;
185}
186
187static int ViewEdge_last_fedge_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
188{
189 if (!BPy_FEdge_Check(value)) {
190 return -1;
191 }
192 self->ve->setFEdgeB(((BPy_FEdge *)value)->fe);
193 return 0;
194}
195
197 /* Wrap. */
198 ViewEdge_viewshape_doc,
199 "The ViewShape to which this ViewEdge belongs to.\n"
200 "\n"
201 ":type: :class:`ViewShape`\n");
202static PyObject *ViewEdge_viewshape_get(BPy_ViewEdge *self, void * /*closure*/)
203{
204 ViewShape *vs = self->ve->viewShape();
205 if (vs) {
207 }
208 Py_RETURN_NONE;
209}
210
211static int ViewEdge_viewshape_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
212{
213 if (!BPy_ViewShape_Check(value)) {
214 return -1;
215 }
216 self->ve->setShape(((BPy_ViewShape *)value)->vs);
217 return 0;
218}
219
221 /* Wrap. */
222 ViewEdge_occludee_doc,
223 "The shape that is occluded by the ViewShape to which this ViewEdge\n"
224 "belongs to. If no object is occluded, this property is set to None.\n"
225 "\n"
226 ":type: :class:`ViewShape`\n");
227static PyObject *ViewEdge_occludee_get(BPy_ViewEdge *self, void * /*closure*/)
228{
229 ViewShape *vs = self->ve->aShape();
230 if (vs) {
232 }
233 Py_RETURN_NONE;
234}
235
236static int ViewEdge_occludee_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
237{
238 if (!BPy_ViewShape_Check(value)) {
239 return -1;
240 }
241 self->ve->setaShape(((BPy_ViewShape *)value)->vs);
242 return 0;
243}
244
246 /* Wrap. */
247 ViewEdge_is_closed_doc,
248 "True if this ViewEdge forms a closed loop.\n"
249 "\n"
250 ":type: bool\n");
251static PyObject *ViewEdge_is_closed_get(BPy_ViewEdge *self, void * /*closure*/)
252{
253 return PyBool_from_bool(self->ve->isClosed());
254}
255
257 /* Wrap. */
258 ViewEdge_id_doc,
259 "The Id of this ViewEdge.\n"
260 "\n"
261 ":type: :class:`Id`\n");
262static PyObject *ViewEdge_id_get(BPy_ViewEdge *self, void * /*closure*/)
263{
264 Id id(self->ve->getId());
265 return BPy_Id_from_Id(id); // return a copy
266}
267
268static int ViewEdge_id_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
269{
270 if (!BPy_Id_Check(value)) {
271 PyErr_SetString(PyExc_TypeError, "value must be an Id");
272 return -1;
273 }
274 self->ve->setId(*(((BPy_Id *)value)->id));
275 return 0;
276}
277
279 /* Wrap. */
280 ViewEdge_nature_doc,
281 "The nature of this ViewEdge.\n"
282 "\n"
283 ":type: :class:`Nature`\n");
284static PyObject *ViewEdge_nature_get(BPy_ViewEdge *self, void * /*closure*/)
285{
286 return BPy_Nature_from_Nature(self->ve->getNature());
287}
288
289static int ViewEdge_nature_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
290{
291 if (!BPy_Nature_Check(value)) {
292 PyErr_SetString(PyExc_TypeError, "value must be a Nature");
293 return -1;
294 }
295 self->ve->setNature(PyLong_AsLong((PyObject *)&((BPy_Nature *)value)->i));
296 return 0;
297}
298
300 /* Wrap. */
301 ViewEdge_qi_doc,
302 "The quantitative invisibility.\n"
303 "\n"
304 ":type: int\n");
305static PyObject *ViewEdge_qi_get(BPy_ViewEdge *self, void * /*closure*/)
306{
307 return PyLong_FromLong(self->ve->qi());
308}
309
310static int ViewEdge_qi_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
311{
312 int qi;
313
314 if ((qi = PyLong_AsLong(value)) == -1 && PyErr_Occurred()) {
315 return -1;
316 }
317 self->ve->setQI(qi);
318 return 0;
319}
320
322 /* Wrap. */
323 ViewEdge_chaining_time_stamp_doc,
324 "The time stamp of this ViewEdge.\n"
325 "\n"
326 ":type: int\n");
327static PyObject *ViewEdge_chaining_time_stamp_get(BPy_ViewEdge *self, void * /*closure*/)
328{
329 return PyLong_FromLong(self->ve->getChainingTimeStamp());
330}
331
333 PyObject *value,
334 void * /*closure*/)
335{
336 int timestamp;
337
338 if ((timestamp = PyLong_AsLong(value)) == -1 && PyErr_Occurred()) {
339 return -1;
340 }
341 self->ve->setChainingTimeStamp(timestamp);
342 return 0;
343}
344
345static PyGetSetDef BPy_ViewEdge_getseters[] = {
346 {"first_viewvertex",
349 ViewEdge_first_viewvertex_doc,
350 nullptr},
351 {"last_viewvertex",
354 ViewEdge_last_viewvertex_doc,
355 nullptr},
356 {"first_fedge",
359 ViewEdge_first_fedge_doc,
360 nullptr},
361 {"last_fedge",
364 ViewEdge_last_fedge_doc,
365 nullptr},
366 {"viewshape",
369 ViewEdge_viewshape_doc,
370 nullptr},
371 {"occludee",
372 (getter)ViewEdge_occludee_get,
373 (setter)ViewEdge_occludee_set,
374 ViewEdge_occludee_doc,
375 nullptr},
376 {"is_closed",
378 (setter) nullptr,
379 ViewEdge_is_closed_doc,
380 nullptr},
381 {"id", (getter)ViewEdge_id_get, (setter)ViewEdge_id_set, ViewEdge_id_doc, nullptr},
382 {"nature",
383 (getter)ViewEdge_nature_get,
384 (setter)ViewEdge_nature_set,
385 ViewEdge_nature_doc,
386 nullptr},
387 {"qi", (getter)ViewEdge_qi_get, (setter)ViewEdge_qi_set, ViewEdge_qi_doc, nullptr},
388 {"chaining_time_stamp",
391 ViewEdge_chaining_time_stamp_doc,
392 nullptr},
393 {nullptr, nullptr, nullptr, nullptr, nullptr} /* Sentinel */
394};
395
396/*-----------------------BPy_ViewEdge type definition ------------------------------*/
397
398PyTypeObject ViewEdge_Type = {
399 /*ob_base*/ PyVarObject_HEAD_INIT(nullptr, 0)
400 /*tp_name*/ "ViewEdge",
401 /*tp_basicsize*/ sizeof(BPy_ViewEdge),
402 /*tp_itemsize*/ 0,
403 /*tp_dealloc*/ nullptr,
404 /*tp_vectorcall_offset*/ 0,
405 /*tp_getattr*/ nullptr,
406 /*tp_setattr*/ nullptr,
407 /*tp_as_async*/ nullptr,
408 /*tp_repr*/ nullptr,
409 /*tp_as_number*/ nullptr,
410 /*tp_as_sequence*/ nullptr,
411 /*tp_as_mapping*/ nullptr,
412 /*tp_hash*/ nullptr,
413 /*tp_call*/ nullptr,
414 /*tp_str*/ nullptr,
415 /*tp_getattro*/ nullptr,
416 /*tp_setattro*/ nullptr,
417 /*tp_as_buffer*/ nullptr,
418 /*tp_flags*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
419 /*tp_doc*/ ViewEdge_doc,
420 /*tp_traverse*/ nullptr,
421 /*tp_clear*/ nullptr,
422 /*tp_richcompare*/ nullptr,
423 /*tp_weaklistoffset*/ 0,
424 /*tp_iter*/ nullptr,
425 /*tp_iternext*/ nullptr,
426 /*tp_methods*/ BPy_ViewEdge_methods,
427 /*tp_members*/ nullptr,
428 /*tp_getset*/ BPy_ViewEdge_getseters,
429 /*tp_base*/ &Interface1D_Type,
430 /*tp_dict*/ nullptr,
431 /*tp_descr_get*/ nullptr,
432 /*tp_descr_set*/ nullptr,
433 /*tp_dictoffset*/ 0,
434 /*tp_init*/ (initproc)ViewEdge_init,
435 /*tp_alloc*/ nullptr,
436 /*tp_new*/ nullptr,
437};
438
PyObject * BPy_Id_from_Id(Id &id)
PyObject * Any_BPy_FEdge_from_FEdge(FEdge &fe)
PyObject * BPy_Nature_from_Nature(ushort n)
PyObject * Any_BPy_ViewVertex_from_ViewVertex(ViewVertex &vv)
PyObject * PyBool_from_bool(bool b)
PyObject * BPy_ViewShape_from_ViewShape(ViewShape &vs)
#define BPy_FEdge_Check(v)
Definition BPy_FEdge.h:19
#define BPy_Id_Check(v)
Definition BPy_Id.h:23
PyTypeObject Interface1D_Type
#define BPy_Nature_Check(v)
Definition BPy_Nature.h:21
static PyObject * ViewEdge_update_fedges(BPy_ViewEdge *self)
static PyObject * ViewEdge_is_closed_get(BPy_ViewEdge *self, void *)
static int ViewEdge_occludee_set(BPy_ViewEdge *self, PyObject *value, void *)
static PyGetSetDef BPy_ViewEdge_getseters[]
static int ViewEdge_id_set(BPy_ViewEdge *self, PyObject *value, void *)
static int ViewEdge_last_fedge_set(BPy_ViewEdge *self, PyObject *value, void *)
static PyObject * ViewEdge_qi_get(BPy_ViewEdge *self, void *)
static PyObject * ViewEdge_nature_get(BPy_ViewEdge *self, void *)
PyDoc_STRVAR(ViewEdge_doc, "Class hierarchy: :class:`Interface1D` > :class:`ViewEdge`\n" "\n" "Class defining a ViewEdge. A ViewEdge in an edge of the image graph.\n" "it connects two :class:`ViewVertex` objects. It is made by connecting\n" "a set of FEdges.\n" "\n" ".. method:: __init__()\n" " __init__(brother)\n" "\n" " Builds a :class:`ViewEdge` using the default constructor or the copy constructor.\n" "\n" " :arg brother: A ViewEdge object.\n" " :type brother: :class:`ViewEdge`\n")
static PyObject * ViewEdge_id_get(BPy_ViewEdge *self, void *)
static PyObject * ViewEdge_first_viewvertex_get(BPy_ViewEdge *self, void *)
static PyObject * ViewEdge_chaining_time_stamp_get(BPy_ViewEdge *self, void *)
static PyObject * ViewEdge_occludee_get(BPy_ViewEdge *self, void *)
static int ViewEdge_init(BPy_ViewEdge *self, PyObject *args, PyObject *kwds)
static int ViewEdge_first_fedge_set(BPy_ViewEdge *self, PyObject *value, void *)
static PyMethodDef BPy_ViewEdge_methods[]
static PyObject * ViewEdge_last_viewvertex_get(BPy_ViewEdge *self, void *)
static int ViewEdge_chaining_time_stamp_set(BPy_ViewEdge *self, PyObject *value, void *)
static int ViewEdge_nature_set(BPy_ViewEdge *self, PyObject *value, void *)
static int ViewEdge_qi_set(BPy_ViewEdge *self, PyObject *value, void *)
static int ViewEdge_viewshape_set(BPy_ViewEdge *self, PyObject *value, void *)
static int ViewEdge_last_viewvertex_set(BPy_ViewEdge *self, PyObject *value, void *)
static PyObject * ViewEdge_first_fedge_get(BPy_ViewEdge *self, void *)
static int ViewEdge_first_viewvertex_set(BPy_ViewEdge *self, PyObject *value, void *)
static PyObject * ViewEdge_last_fedge_get(BPy_ViewEdge *self, void *)
PyTypeObject ViewEdge_Type
static PyObject * ViewEdge_viewshape_get(BPy_ViewEdge *self, void *)
#define BPy_ViewShape_Check(v)
#define BPy_ViewVertex_Check(v)
ATTR_WARN_UNUSED_RESULT const BMVert * v
PyObject * self
inherits from class Rep
Definition AppCanvas.cpp:20
i
Definition text_draw.cc:230