Blender V4.3
Director.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008-2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include "Director.h"
10
11#include "BPy_Convert.h"
12
15#include "BPy_FrsMaterial.h"
16#include "BPy_Id.h"
17#include "BPy_StrokeShader.h"
18#include "BPy_UnaryFunction0D.h"
19#include "BPy_UnaryFunction1D.h"
22#include "BPy_ViewShape.h"
27
38
46
47#include "BLI_sys_types.h"
48
49using namespace Freestyle;
50
51// BinaryPredicate0D: __call__
53 Interface0D &i1,
54 Interface0D &i2)
55{
56 if (!bp0D->py_bp0D) { // internal error
57 PyErr_SetString(PyExc_RuntimeError, "Reference to Python object (py_bp0D) not initialized");
58 return -1;
59 }
60 PyObject *arg1 = Any_BPy_Interface0D_from_Interface0D(i1);
61 PyObject *arg2 = Any_BPy_Interface0D_from_Interface0D(i2);
62 if (!arg1 || !arg2) {
63 Py_XDECREF(arg1);
64 Py_XDECREF(arg2);
65 return -1;
66 }
67 PyObject *result = PyObject_CallMethod((PyObject *)bp0D->py_bp0D, "__call__", "OO", arg1, arg2);
68 Py_DECREF(arg1);
69 Py_DECREF(arg2);
70 if (!result) {
71 return -1;
72 }
73 int ret = PyObject_IsTrue(result);
74 Py_DECREF(result);
75 if (ret < 0) {
76 return -1;
77 }
78 bp0D->result = ret;
79 return 0;
80}
81
82// BinaryPredicate1D: __call__
84 Interface1D &i1,
85 Interface1D &i2)
86{
87 if (!bp1D->py_bp1D) { // internal error
88 PyErr_SetString(PyExc_RuntimeError, "Reference to Python object (py_bp1D) not initialized");
89 return -1;
90 }
91 PyObject *arg1 = Any_BPy_Interface1D_from_Interface1D(i1);
92 PyObject *arg2 = Any_BPy_Interface1D_from_Interface1D(i2);
93 if (!arg1 || !arg2) {
94 Py_XDECREF(arg1);
95 Py_XDECREF(arg2);
96 return -1;
97 }
98 PyObject *result = PyObject_CallMethod((PyObject *)bp1D->py_bp1D, "__call__", "OO", arg1, arg2);
99 Py_DECREF(arg1);
100 Py_DECREF(arg2);
101 if (!result) {
102 return -1;
103 }
104 int ret = PyObject_IsTrue(result);
105 Py_DECREF(result);
106 if (ret < 0) {
107 return -1;
108 }
109 bp1D->result = ret;
110 return 0;
111}
112
113// UnaryPredicate0D: __call__
115{
116 if (!up0D->py_up0D) { // internal error
117 PyErr_SetString(PyExc_RuntimeError, "Reference to Python object (py_up0D) not initialized");
118 return -1;
119 }
120 PyObject *arg = BPy_Interface0DIterator_from_Interface0DIterator(if0D_it, false);
121 if (!arg) {
122 return -1;
123 }
124 PyObject *result = PyObject_CallMethod((PyObject *)up0D->py_up0D, "__call__", "O", arg);
125 Py_DECREF(arg);
126 if (!result) {
127 return -1;
128 }
129 int ret = PyObject_IsTrue(result);
130 Py_DECREF(result);
131 if (ret < 0) {
132 return -1;
133 }
134 up0D->result = ret;
135 return 0;
136}
137
138// UnaryPredicate1D: __call__
140{
141 if (!up1D->py_up1D) { // internal error
142 PyErr_SetString(PyExc_RuntimeError, "Reference to Python object (py_up1D) not initialized");
143 return -1;
144 }
145 PyObject *arg = Any_BPy_Interface1D_from_Interface1D(if1D);
146 if (!arg) {
147 return -1;
148 }
149 PyObject *result = PyObject_CallMethod((PyObject *)up1D->py_up1D, "__call__", "O", arg);
150 Py_DECREF(arg);
151 if (!result) {
152 return -1;
153 }
154 int ret = PyObject_IsTrue(result);
155 Py_DECREF(result);
156 if (ret < 0) {
157 return -1;
158 }
159 up1D->result = ret;
160 return 0;
161}
162
163// StrokeShader: shade
165{
166 if (!ss->py_ss) { // internal error
167 PyErr_SetString(PyExc_RuntimeError, "Reference to Python object (py_ss) not initialized");
168 return -1;
169 }
170 PyObject *arg = BPy_Stroke_from_Stroke(s);
171 if (!arg) {
172 return -1;
173 }
174 PyObject *result = PyObject_CallMethod((PyObject *)ss->py_ss, "shade", "O", arg);
175 Py_DECREF(arg);
176 if (!result) {
177 return -1;
178 }
179 Py_DECREF(result);
180 return 0;
181}
182
183// ChainingIterator: init, traverse
185{
186 if (!c_it->py_c_it) { // internal error
187 PyErr_SetString(PyExc_RuntimeError, "Reference to Python object (py_c_it) not initialized");
188 return -1;
189 }
190 PyObject *result = PyObject_CallMethod((PyObject *)c_it->py_c_it, "init", nullptr);
191 if (!result) {
192 return -1;
193 }
194 Py_DECREF(result);
195 return 0;
196}
197
199{
200 if (!c_it->py_c_it) { // internal error
201 PyErr_SetString(PyExc_RuntimeError, "Reference to Python object (py_c_it) not initialized");
202 return -1;
203 }
205 if (!arg) {
206 return -1;
207 }
208 PyObject *result = PyObject_CallMethod((PyObject *)c_it->py_c_it, "traverse", "O", arg);
209 Py_DECREF(arg);
210 if (!result) {
211 return -1;
212 }
213 if (BPy_ViewEdge_Check(result)) {
214 c_it->result = ((BPy_ViewEdge *)result)->ve;
215 }
216 else if (result == Py_None) {
217 c_it->result = nullptr;
218 }
219 else {
220 PyErr_SetString(PyExc_RuntimeError, "traverse method returned a wrong value");
221 Py_DECREF(result);
222 return -1;
223 }
224 Py_DECREF(result);
225 return 0;
226}
227
228// BPy_UnaryFunction{0D,1D}: __call__
229int Director_BPy_UnaryFunction0D___call__(void *uf0D, void *py_uf0D, Interface0DIterator &if0D_it)
230{
231 if (!py_uf0D) { // internal error
232 PyErr_SetString(PyExc_RuntimeError, "Reference to Python object (py_uf0D) not initialized");
233 return -1;
234 }
235 PyObject *obj = (PyObject *)py_uf0D;
236 PyObject *arg = BPy_Interface0DIterator_from_Interface0DIterator(if0D_it, false);
237 if (!arg) {
238 return -1;
239 }
240 PyObject *result = PyObject_CallMethod(obj, "__call__", "O", arg);
241 Py_DECREF(arg);
242 if (!result) {
243 return -1;
244 }
246 ((UnaryFunction0D<double> *)uf0D)->result = PyFloat_AsDouble(result);
247 }
250 }
251 else if (BPy_UnaryFunction0DFloat_Check(obj)) {
252 ((UnaryFunction0D<float> *)uf0D)->result = PyFloat_AsDouble(result);
253 }
254 else if (BPy_UnaryFunction0DId_Check(obj)) {
255 ((UnaryFunction0D<Id> *)uf0D)->result = *(((BPy_Id *)result)->id);
256 }
257 else if (BPy_UnaryFunction0DMaterial_Check(obj)) {
258 ((UnaryFunction0D<FrsMaterial> *)uf0D)->result = *(((BPy_FrsMaterial *)result)->m);
259 }
260 else if (BPy_UnaryFunction0DUnsigned_Check(obj)) {
261 ((UnaryFunction0D<uint> *)uf0D)->result = PyLong_AsLong(result);
262 }
263 else if (BPy_UnaryFunction0DVec2f_Check(obj)) {
264 Vec2f vec;
265 if (!Vec2f_ptr_from_Vector(result, vec)) {
266 return -1;
267 }
268 ((UnaryFunction0D<Vec2f> *)uf0D)->result = vec;
269 }
270 else if (BPy_UnaryFunction0DVec3f_Check(obj)) {
271 Vec3f vec;
272 if (!Vec3f_ptr_from_Vector(result, vec)) {
273 return -1;
274 }
275 ((UnaryFunction0D<Vec3f> *)uf0D)->result = vec;
276 }
279 vec.reserve(PyList_Size(result));
280 for (int i = 0; i < PyList_Size(result); i++) {
281 ViewShape *b = ((BPy_ViewShape *)PyList_GET_ITEM(result, i))->vs;
282 vec.push_back(b);
283 }
284 ((UnaryFunction0D<vector<ViewShape *>> *)uf0D)->result = vec;
285 }
287 ((UnaryFunction0D<ViewShape *> *)uf0D)->result = ((BPy_ViewShape *)result)->vs;
288 }
289 Py_DECREF(result);
290 return 0;
291}
292
293int Director_BPy_UnaryFunction1D___call__(void *uf1D, void *py_uf1D, Interface1D &if1D)
294{
295 if (!py_uf1D) { // internal error
296 PyErr_SetString(PyExc_RuntimeError, "Reference to Python object (py_uf1D) not initialized");
297 return -1;
298 }
299 PyObject *obj = (PyObject *)py_uf1D;
300 PyObject *arg = Any_BPy_Interface1D_from_Interface1D(if1D);
301 if (!arg) {
302 return -1;
303 }
304 PyObject *result = PyObject_CallMethod(obj, "__call__", "O", arg);
305 Py_DECREF(arg);
306 if (!result) {
307 return -1;
308 }
310 ((UnaryFunction1D<double> *)uf1D)->result = PyFloat_AsDouble(result);
311 }
314 }
315 else if (BPy_UnaryFunction1DFloat_Check(obj)) {
316 ((UnaryFunction1D<float> *)uf1D)->result = PyFloat_AsDouble(result);
317 }
318 else if (BPy_UnaryFunction1DUnsigned_Check(obj)) {
319 ((UnaryFunction1D<uint> *)uf1D)->result = PyLong_AsLong(result);
320 }
321 else if (BPy_UnaryFunction1DVec2f_Check(obj)) {
322 Vec2f vec;
323 if (!Vec2f_ptr_from_Vector(result, vec)) {
324 return -1;
325 }
326 ((UnaryFunction1D<Vec2f> *)uf1D)->result = vec;
327 }
328 else if (BPy_UnaryFunction1DVec3f_Check(obj)) {
329 Vec3f vec;
330 if (!Vec3f_ptr_from_Vector(result, vec)) {
331 return -1;
332 }
333 ((UnaryFunction1D<Vec3f> *)uf1D)->result = vec;
334 }
337 vec.reserve(PyList_Size(result));
338 for (int i = 1; i < PyList_Size(result); i++) {
339 ViewShape *b = ((BPy_ViewShape *)PyList_GET_ITEM(result, i))->vs;
340 vec.push_back(b);
341 }
342 ((UnaryFunction1D<vector<ViewShape *>> *)uf1D)->result = vec;
343 }
344 Py_DECREF(result);
345 return 0;
346}
bool Vec2f_ptr_from_Vector(PyObject *obj, Vec2f &vec)
PyObject * BPy_Interface0DIterator_from_Interface0DIterator(Interface0DIterator &if0D_it, bool reversed)
PyObject * Any_BPy_Interface1D_from_Interface1D(Interface1D &if1D)
Nature::EdgeNature EdgeNature_from_BPy_Nature(PyObject *obj)
PyObject * BPy_Stroke_from_Stroke(Stroke &s)
PyObject * BPy_AdjacencyIterator_from_AdjacencyIterator(AdjacencyIterator &a_it)
bool Vec3f_ptr_from_Vector(PyObject *obj, Vec3f &vec)
PyObject * Any_BPy_Interface0D_from_Interface0D(Interface0D &if0D)
#define BPy_UnaryFunction0DDouble_Check(v)
#define BPy_UnaryFunction0DEdgeNature_Check(v)
#define BPy_UnaryFunction0DFloat_Check(v)
#define BPy_UnaryFunction0DId_Check(v)
#define BPy_UnaryFunction0DMaterial_Check(v)
#define BPy_UnaryFunction0DUnsigned_Check(v)
#define BPy_UnaryFunction0DVec2f_Check(v)
#define BPy_UnaryFunction0DVec3f_Check(v)
#define BPy_UnaryFunction0DVectorViewShape_Check(v)
#define BPy_UnaryFunction0DViewShape_Check(v)
#define BPy_UnaryFunction1DDouble_Check(v)
#define BPy_UnaryFunction1DEdgeNature_Check(v)
#define BPy_UnaryFunction1DFloat_Check(v)
#define BPy_UnaryFunction1DUnsigned_Check(v)
#define BPy_UnaryFunction1DVec2f_Check(v)
#define BPy_UnaryFunction1DVec3f_Check(v)
#define BPy_UnaryFunction1DVectorViewShape_Check(v)
#define BPy_ViewEdge_Check(v)
int Director_BPy_BinaryPredicate0D___call__(BinaryPredicate0D *bp0D, Interface0D &i1, Interface0D &i2)
Definition Director.cpp:52
int Director_BPy_UnaryFunction0D___call__(void *uf0D, void *py_uf0D, Interface0DIterator &if0D_it)
Definition Director.cpp:229
int Director_BPy_UnaryFunction1D___call__(void *uf1D, void *py_uf1D, Interface1D &if1D)
Definition Director.cpp:293
int Director_BPy_UnaryPredicate0D___call__(UnaryPredicate0D *up0D, Interface0DIterator &if0D_it)
Definition Director.cpp:114
int Director_BPy_ChainingIterator_init(ChainingIterator *c_it)
Definition Director.cpp:184
int Director_BPy_StrokeShader_shade(StrokeShader *ss, Stroke &s)
Definition Director.cpp:164
int Director_BPy_ChainingIterator_traverse(ChainingIterator *c_it, AdjacencyIterator &a_it)
Definition Director.cpp:198
int Director_BPy_BinaryPredicate1D___call__(BinaryPredicate1D *bp1D, Interface1D &i1, Interface1D &i2)
Definition Director.cpp:83
int Director_BPy_UnaryPredicate1D___call__(UnaryPredicate1D *up1D, Interface1D &if1D)
Definition Director.cpp:139
local_group_size(16, 16) .push_constant(Type b
inherits from class Rep
Definition AppCanvas.cpp:20
return ret