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