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