Blender V4.5
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`");
41
42static int ViewEdge_init(BPy_ViewEdge *self, PyObject *args, PyObject *kwds)
43{
44 static const char *kwlist[] = {"brother", nullptr};
45 PyObject *brother = nullptr;
46
47 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O!", (char **)kwlist, &ViewEdge_Type, &brother)) {
48 return -1;
49 }
50 if (!brother) {
51 self->ve = new ViewEdge();
52 }
53 else {
54 self->ve = new ViewEdge(*(((BPy_ViewEdge *)brother)->ve));
55 }
56 self->py_if1D.if1D = self->ve;
57 self->py_if1D.borrowed = false;
58 return 0;
59}
60
62 /* Wrap. */
63 ViewEdge_update_fedges_doc,
64 ".. method:: update_fedges()\n"
65 "\n"
66 " Sets Viewedge to this for all embedded fedges.\n");
67
69{
70 self->ve->UpdateFEdges();
71 Py_RETURN_NONE;
72}
73
74#ifdef __GNUC__
75# ifdef __clang__
76# pragma clang diagnostic push
77# pragma clang diagnostic ignored "-Wcast-function-type"
78# else
79# pragma GCC diagnostic push
80# pragma GCC diagnostic ignored "-Wcast-function-type"
81# endif
82#endif
83
84static PyMethodDef BPy_ViewEdge_methods[] = {
85 {"update_fedges",
86 (PyCFunction)ViewEdge_update_fedges,
87 METH_NOARGS,
88 ViewEdge_update_fedges_doc},
89 {nullptr, nullptr, 0, nullptr},
90};
91
92#ifdef __GNUC__
93# ifdef __clang__
94# pragma clang diagnostic pop
95# else
96# pragma GCC diagnostic pop
97# endif
98#endif
99
100/*----------------------ViewEdge get/setters ----------------------------*/
101
103 /* Wrap. */
104 ViewEdge_first_viewvertex_doc,
105 "The first ViewVertex.\n"
106 "\n"
107 ":type: :class:`ViewVertex`");
108
109static PyObject *ViewEdge_first_viewvertex_get(BPy_ViewEdge *self, void * /*closure*/)
110{
111 ViewVertex *v = self->ve->A();
112 if (v) {
114 }
115 Py_RETURN_NONE;
116}
117
118static int ViewEdge_first_viewvertex_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
119{
120 if (!BPy_ViewVertex_Check(value)) {
121 return -1;
122 }
123 self->ve->setA(((BPy_ViewVertex *)value)->vv);
124 return 0;
125}
126
128 /* Wrap. */
129 ViewEdge_last_viewvertex_doc,
130 "The second ViewVertex.\n"
131 "\n"
132 ":type: :class:`ViewVertex`");
133
134static PyObject *ViewEdge_last_viewvertex_get(BPy_ViewEdge *self, void * /*closure*/)
135{
136 ViewVertex *v = self->ve->B();
137 if (v) {
139 }
140 Py_RETURN_NONE;
141}
142
143static int ViewEdge_last_viewvertex_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
144{
145 if (!BPy_ViewVertex_Check(value)) {
146 return -1;
147 }
148 self->ve->setB(((BPy_ViewVertex *)value)->vv);
149 return 0;
150}
151
153 /* Wrap. */
154 ViewEdge_first_fedge_doc,
155 "The first FEdge that constitutes this ViewEdge.\n"
156 "\n"
157 ":type: :class:`FEdge`");
158
159static PyObject *ViewEdge_first_fedge_get(BPy_ViewEdge *self, void * /*closure*/)
160{
161 FEdge *fe = self->ve->fedgeA();
162 if (fe) {
163 return Any_BPy_FEdge_from_FEdge(*fe);
164 }
165 Py_RETURN_NONE;
166}
167
168static int ViewEdge_first_fedge_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
169{
170 if (!BPy_FEdge_Check(value)) {
171 return -1;
172 }
173 self->ve->setFEdgeA(((BPy_FEdge *)value)->fe);
174 return 0;
175}
176
178 /* Wrap. */
179 ViewEdge_last_fedge_doc,
180 "The last FEdge that constitutes this ViewEdge.\n"
181 "\n"
182 ":type: :class:`FEdge`");
183
184static PyObject *ViewEdge_last_fedge_get(BPy_ViewEdge *self, void * /*closure*/)
185{
186 FEdge *fe = self->ve->fedgeB();
187 if (fe) {
188 return Any_BPy_FEdge_from_FEdge(*fe);
189 }
190 Py_RETURN_NONE;
191}
192
193static int ViewEdge_last_fedge_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
194{
195 if (!BPy_FEdge_Check(value)) {
196 return -1;
197 }
198 self->ve->setFEdgeB(((BPy_FEdge *)value)->fe);
199 return 0;
200}
201
203 /* Wrap. */
204 ViewEdge_viewshape_doc,
205 "The ViewShape to which this ViewEdge belongs to.\n"
206 "\n"
207 ":type: :class:`ViewShape`");
208
209static PyObject *ViewEdge_viewshape_get(BPy_ViewEdge *self, void * /*closure*/)
210{
211 ViewShape *vs = self->ve->viewShape();
212 if (vs) {
214 }
215 Py_RETURN_NONE;
216}
217
218static int ViewEdge_viewshape_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
219{
220 if (!BPy_ViewShape_Check(value)) {
221 return -1;
222 }
223 self->ve->setShape(((BPy_ViewShape *)value)->vs);
224 return 0;
225}
226
228 /* Wrap. */
229 ViewEdge_occludee_doc,
230 "The shape that is occluded by the ViewShape to which this ViewEdge\n"
231 "belongs to. If no object is occluded, this property is set to None.\n"
232 "\n"
233 ":type: :class:`ViewShape`");
234
235static PyObject *ViewEdge_occludee_get(BPy_ViewEdge *self, void * /*closure*/)
236{
237 ViewShape *vs = self->ve->aShape();
238 if (vs) {
240 }
241 Py_RETURN_NONE;
242}
243
244static int ViewEdge_occludee_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
245{
246 if (!BPy_ViewShape_Check(value)) {
247 return -1;
248 }
249 self->ve->setaShape(((BPy_ViewShape *)value)->vs);
250 return 0;
251}
252
254 /* Wrap. */
255 ViewEdge_is_closed_doc,
256 "True if this ViewEdge forms a closed loop.\n"
257 "\n"
258 ":type: bool");
259
260static PyObject *ViewEdge_is_closed_get(BPy_ViewEdge *self, void * /*closure*/)
261{
262 return PyBool_from_bool(self->ve->isClosed());
263}
264
266 /* Wrap. */
267 ViewEdge_id_doc,
268 "The Id of this ViewEdge.\n"
269 "\n"
270 ":type: :class:`Id`");
271
272static PyObject *ViewEdge_id_get(BPy_ViewEdge *self, void * /*closure*/)
273{
274 Id id(self->ve->getId());
275 return BPy_Id_from_Id(id); // return a copy
276}
277
278static int ViewEdge_id_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
279{
280 if (!BPy_Id_Check(value)) {
281 PyErr_SetString(PyExc_TypeError, "value must be an Id");
282 return -1;
283 }
284 self->ve->setId(*(((BPy_Id *)value)->id));
285 return 0;
286}
287
289 /* Wrap. */
290 ViewEdge_nature_doc,
291 "The nature of this ViewEdge.\n"
292 "\n"
293 ":type: :class:`Nature`");
294
295static PyObject *ViewEdge_nature_get(BPy_ViewEdge *self, void * /*closure*/)
296{
297 return BPy_Nature_from_Nature(self->ve->getNature());
298}
299
300static int ViewEdge_nature_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
301{
302 if (!BPy_Nature_Check(value)) {
303 PyErr_SetString(PyExc_TypeError, "value must be a Nature");
304 return -1;
305 }
306 self->ve->setNature(PyLong_AsLong((PyObject *)&((BPy_Nature *)value)->i));
307 return 0;
308}
309
311 /* Wrap. */
312 ViewEdge_qi_doc,
313 "The quantitative invisibility.\n"
314 "\n"
315 ":type: int");
316
317static PyObject *ViewEdge_qi_get(BPy_ViewEdge *self, void * /*closure*/)
318{
319 return PyLong_FromLong(self->ve->qi());
320}
321
322static int ViewEdge_qi_set(BPy_ViewEdge *self, PyObject *value, void * /*closure*/)
323{
324 int qi;
325
326 if ((qi = PyLong_AsLong(value)) == -1 && PyErr_Occurred()) {
327 return -1;
328 }
329 self->ve->setQI(qi);
330 return 0;
331}
332
334 /* Wrap. */
335 ViewEdge_chaining_time_stamp_doc,
336 "The time stamp of this ViewEdge.\n"
337 "\n"
338 ":type: int");
339
340static PyObject *ViewEdge_chaining_time_stamp_get(BPy_ViewEdge *self, void * /*closure*/)
341{
342 return PyLong_FromLong(self->ve->getChainingTimeStamp());
343}
344
346 PyObject *value,
347 void * /*closure*/)
348{
349 int timestamp;
350
351 if ((timestamp = PyLong_AsLong(value)) == -1 && PyErr_Occurred()) {
352 return -1;
353 }
354 self->ve->setChainingTimeStamp(timestamp);
355 return 0;
356}
357
358static PyGetSetDef BPy_ViewEdge_getseters[] = {
359 {"first_viewvertex",
362 ViewEdge_first_viewvertex_doc,
363 nullptr},
364 {"last_viewvertex",
367 ViewEdge_last_viewvertex_doc,
368 nullptr},
369 {"first_fedge",
372 ViewEdge_first_fedge_doc,
373 nullptr},
374 {"last_fedge",
377 ViewEdge_last_fedge_doc,
378 nullptr},
379 {"viewshape",
382 ViewEdge_viewshape_doc,
383 nullptr},
384 {"occludee",
385 (getter)ViewEdge_occludee_get,
386 (setter)ViewEdge_occludee_set,
387 ViewEdge_occludee_doc,
388 nullptr},
389 {"is_closed",
391 (setter) nullptr,
392 ViewEdge_is_closed_doc,
393 nullptr},
394 {"id", (getter)ViewEdge_id_get, (setter)ViewEdge_id_set, ViewEdge_id_doc, nullptr},
395 {"nature",
396 (getter)ViewEdge_nature_get,
397 (setter)ViewEdge_nature_set,
398 ViewEdge_nature_doc,
399 nullptr},
400 {"qi", (getter)ViewEdge_qi_get, (setter)ViewEdge_qi_set, ViewEdge_qi_doc, nullptr},
401 {"chaining_time_stamp",
404 ViewEdge_chaining_time_stamp_doc,
405 nullptr},
406 {nullptr, nullptr, nullptr, nullptr, nullptr} /* Sentinel */
407};
408
409/*-----------------------BPy_ViewEdge type definition ------------------------------*/
410
411PyTypeObject ViewEdge_Type = {
412 /*ob_base*/ PyVarObject_HEAD_INIT(nullptr, 0)
413 /*tp_name*/ "ViewEdge",
414 /*tp_basicsize*/ sizeof(BPy_ViewEdge),
415 /*tp_itemsize*/ 0,
416 /*tp_dealloc*/ nullptr,
417 /*tp_vectorcall_offset*/ 0,
418 /*tp_getattr*/ nullptr,
419 /*tp_setattr*/ nullptr,
420 /*tp_as_async*/ nullptr,
421 /*tp_repr*/ nullptr,
422 /*tp_as_number*/ nullptr,
423 /*tp_as_sequence*/ nullptr,
424 /*tp_as_mapping*/ nullptr,
425 /*tp_hash*/ nullptr,
426 /*tp_call*/ nullptr,
427 /*tp_str*/ nullptr,
428 /*tp_getattro*/ nullptr,
429 /*tp_setattro*/ nullptr,
430 /*tp_as_buffer*/ nullptr,
431 /*tp_flags*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
432 /*tp_doc*/ ViewEdge_doc,
433 /*tp_traverse*/ nullptr,
434 /*tp_clear*/ nullptr,
435 /*tp_richcompare*/ nullptr,
436 /*tp_weaklistoffset*/ 0,
437 /*tp_iter*/ nullptr,
438 /*tp_iternext*/ nullptr,
439 /*tp_methods*/ BPy_ViewEdge_methods,
440 /*tp_members*/ nullptr,
441 /*tp_getset*/ BPy_ViewEdge_getseters,
442 /*tp_base*/ &Interface1D_Type,
443 /*tp_dict*/ nullptr,
444 /*tp_descr_get*/ nullptr,
445 /*tp_descr_set*/ nullptr,
446 /*tp_dictoffset*/ 0,
447 /*tp_init*/ (initproc)ViewEdge_init,
448 /*tp_alloc*/ nullptr,
449 /*tp_new*/ nullptr,
450};
451
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 *)
static PyObject * ViewEdge_id_get(BPy_ViewEdge *self, void *)
static PyObject * ViewEdge_first_viewvertex_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`")
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