23 if (module ==
nullptr) {
42 "Class defining a material.\n"
44 ".. method:: __init__()\n"
45 " __init__(brother)\n"
46 " __init__(line, diffuse, ambient, specular, emission, shininess, priority)\n"
48 " Creates a :class:`FrsMaterial` using either default constructor,\n"
49 " copy constructor, or an overloaded constructor\n"
51 " :arg brother: A Material object to be used as a copy constructor.\n"
52 " :type brother: :class:`Material`\n"
53 " :arg line: The line color.\n"
54 " :type line: :class:`mathutils.Vector` | tuple[float, float, float, float] | list[float]\n"
55 " :arg diffuse: The diffuse color.\n"
57 " :arg ambient: The ambient color.\n"
58 " :type ambient: :class:`mathutils.Vector` | tuple[float, float, float, float] | "
60 " :arg specular: The specular color.\n"
61 " :type specular: :class:`mathutils.Vector` | tuple[float, float, float, float] | "
63 " :arg emission: The emissive color.\n"
64 " :type emission: :class:`mathutils.Vector` | tuple[float, float, float, float] | "
66 " :arg shininess: The shininess coefficient.\n"
67 " :type shininess: float\n"
68 " :arg priority: The line color priority.\n"
69 " :type priority: int");
73 static const char *kwlist_1[] = {
"brother",
nullptr};
74 static const char *kwlist_2[] = {
75 "line",
"diffuse",
"ambient",
"specular",
"emission",
"shininess",
"priority",
nullptr};
76 PyObject *brother =
nullptr;
77 float line[4], diffuse[4], ambient[4], specular[4], emission[4], shininess;
80 if (PyArg_ParseTupleAndKeywords(
89 PyErr_SetString(PyExc_RuntimeError,
"invalid Material object");
95 else if ((
void)PyErr_Clear(),
96 PyArg_ParseTupleAndKeywords(args,
113 self->
m =
new FrsMaterial(line, diffuse, ambient, specular, emission, shininess, priority);
116 PyErr_SetString(PyExc_TypeError,
"invalid argument(s)");
125 Py_TYPE(self)->tp_free((PyObject *)self);
130 return PyUnicode_FromFormat(
"Material - address: %p", self->
m);
136#define MATHUTILS_SUBTYPE_DIFFUSE 1
137#define MATHUTILS_SUBTYPE_SPECULAR 2
138#define MATHUTILS_SUBTYPE_AMBIENT 3
139#define MATHUTILS_SUBTYPE_EMISSION 4
140#define MATHUTILS_SUBTYPE_LINE 5
155 bmo->data[0] = self->
m->
lineR();
156 bmo->data[1] = self->
m->
lineG();
157 bmo->data[2] = self->
m->
lineB();
158 bmo->data[3] = self->
m->
lineA();
195 self->
m->
setLine(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
198 self->
m->
setDiffuse(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
201 self->
m->
setSpecular(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
204 self->
m->
setAmbient(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
207 self->
m->
setEmission(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
220 const float *color = self->
m->
line();
221 bmo->data[index] = color[index];
225 const float *color = self->
m->
diffuse();
226 bmo->data[index] = color[index];
230 const float *color = self->
m->
specular();
231 bmo->data[index] = color[index];
235 const float *color = self->
m->
ambient();
236 bmo->data[index] = color[index];
240 const float *color = self->
m->
emission();
241 bmo->data[index] = color[index];
257 color[index] = bmo->data[index];
258 self->
m->
setLine(color[0], color[1], color[2], color[3]);
262 color[index] = bmo->data[index];
263 self->
m->
setDiffuse(color[0], color[1], color[2], color[3]);
267 color[index] = bmo->data[index];
268 self->
m->
setSpecular(color[0], color[1], color[2], color[3]);
272 color[index] = bmo->data[index];
273 self->
m->
setAmbient(color[0], color[1], color[2], color[3]);
277 color[index] = bmo->data[index];
278 self->
m->
setEmission(color[0], color[1], color[2], color[3]);
305 FrsMaterial_line_doc,
306 "RGBA components of the line color of the material.\n"
308 ":type: :class:`mathutils.Vector`");
322 self->
m->
setLine(color[0], color[1], color[2], color[3]);
328 FrsMaterial_diffuse_doc,
329 "RGBA components of the diffuse color of the material.\n"
331 ":type: :class:`mathutils.Vector`");
345 self->
m->
setDiffuse(color[0], color[1], color[2], color[3]);
351 FrsMaterial_specular_doc,
352 "RGBA components of the specular color of the material.\n"
354 ":type: :class:`mathutils.Vector`");
368 self->
m->
setSpecular(color[0], color[1], color[2], color[3]);
374 FrsMaterial_ambient_doc,
375 "RGBA components of the ambient color of the material.\n"
377 ":type: :class:`mathutils.Color`");
391 self->
m->
setAmbient(color[0], color[1], color[2], color[3]);
397 FrsMaterial_emission_doc,
398 "RGBA components of the emissive color of the material.\n"
400 ":type: :class:`mathutils.Color`");
414 self->
m->
setEmission(color[0], color[1], color[2], color[3]);
420 FrsMaterial_shininess_doc,
421 "Shininess coefficient of the material.\n"
427 return PyFloat_FromDouble(self->
m->
shininess());
433 if ((scalar = PyFloat_AsDouble(value)) == -1.0f && PyErr_Occurred()) {
435 PyErr_SetString(PyExc_TypeError,
"value must be a number");
444 FrsMaterial_priority_doc,
445 "Line color priority of the material.\n"
451 return PyLong_FromLong(self->
m->
priority());
457 if ((scalar = PyLong_AsLong(value)) == -1 && PyErr_Occurred()) {
458 PyErr_SetString(PyExc_TypeError,
"value must be an integer");
469 FrsMaterial_line_doc,
474 FrsMaterial_diffuse_doc,
479 FrsMaterial_specular_doc,
484 FrsMaterial_ambient_doc,
489 FrsMaterial_emission_doc,
494 FrsMaterial_shininess_doc,
499 FrsMaterial_priority_doc,
501 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr}
512 if (comparison_type == Py_NE) {
522 switch (comparison_type) {
524 result = (*matA->
m) != (*matB->m);
527 result = (*matA->
m) == (*matB->m);
530 PyErr_SetString(PyExc_TypeError,
"Material does not support this comparison type");
548 PyVarObject_HEAD_INIT(
nullptr, 0)
567 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
uint32_t BLI_hash_mm2(const unsigned char *data, size_t len, uint32_t seed)
MINLINE void copy_v4_v4(float r[4], const float a[4])
int convert_v4(PyObject *obj, void *v)
PyDoc_STRVAR(FalseBP1D___doc__, "Class hierarchy: :class:`freestyle.types.BinaryPredicate1D` > :class:`FalseBP1D`\n" "\n" ".. method:: __call__(inter1, inter2)\n" "\n" " Always returns false.\n" "\n" " :arg inter1: The first Interface1D object.\n" " :type inter1: :class:`freestyle.types.Interface1D`\n" " :arg inter2: The second Interface1D object.\n" " :type inter2: :class:`freestyle.types.Interface1D`\n" " :return: False.\n" " :rtype: bool\n")
void FrsMaterial_mathutils_register_callback()
int FrsMaterial_Init(PyObject *module)
static int FrsMaterial_specular_set(BPy_FrsMaterial *self, PyObject *value, void *)
#define MATHUTILS_SUBTYPE_DIFFUSE
static PyGetSetDef BPy_FrsMaterial_getseters[]
static int FrsMaterial_ambient_set(BPy_FrsMaterial *self, PyObject *value, void *)
static PyObject * FrsMaterial_specular_get(BPy_FrsMaterial *self, void *)
static void FrsMaterial_dealloc(BPy_FrsMaterial *self)
static int FrsMaterial_line_set(BPy_FrsMaterial *self, PyObject *value, void *)
static PyObject * BPy_FrsMaterial_richcmpr(PyObject *objectA, PyObject *objectB, int comparison_type)
static PyObject * FrsMaterial_line_get(BPy_FrsMaterial *self, void *)
static int FrsMaterial_mathutils_get_index(BaseMathObject *bmo, int subtype, int index)
static PyObject * FrsMaterial_emission_get(BPy_FrsMaterial *self, void *)
static PyObject * FrsMaterial_ambient_get(BPy_FrsMaterial *self, void *)
static int FrsMaterial_priority_set(BPy_FrsMaterial *self, PyObject *value, void *)
static int FrsMaterial_init(BPy_FrsMaterial *self, PyObject *args, PyObject *kwds)
#define MATHUTILS_SUBTYPE_EMISSION
#define MATHUTILS_SUBTYPE_LINE
static Mathutils_Callback FrsMaterial_mathutils_cb
PyTypeObject FrsMaterial_Type
static int FrsMaterial_emission_set(BPy_FrsMaterial *self, PyObject *value, void *)
static int FrsMaterial_diffuse_set(BPy_FrsMaterial *self, PyObject *value, void *)
static int FrsMaterial_mathutils_set(BaseMathObject *bmo, int subtype)
#define MATHUTILS_SUBTYPE_SPECULAR
static PyObject * FrsMaterial_shininess_get(BPy_FrsMaterial *self, void *)
static PyObject * FrsMaterial_repr(BPy_FrsMaterial *self)
#define MATHUTILS_SUBTYPE_AMBIENT
static int FrsMaterial_mathutils_get(BaseMathObject *bmo, int subtype)
static uchar FrsMaterial_mathutils_cb_index
static int FrsMaterial_mathutils_set_index(BaseMathObject *bmo, int subtype, int index)
static PyObject * FrsMaterial_priority_get(BPy_FrsMaterial *self, void *)
static PyObject * FrsMaterial_diffuse_get(BPy_FrsMaterial *self, void *)
static int FrsMaterial_shininess_set(BPy_FrsMaterial *self, PyObject *value, void *)
static int FrsMaterial_mathutils_check(BaseMathObject *bmo)
static Py_hash_t FrsMaterial_hash(PyObject *self)
#define BPy_FrsMaterial_Check(v)
const float * ambient() const
void setShininess(float s)
const float ambientB() const
const float specularR() const
const float lineB() const
const float * specular() const
const float specularB() const
const float specularG() const
void setPriority(int priority)
const float diffuseG() const
const float emissionA() const
const float emissionR() const
void setDiffuse(float r, float g, float b, float a)
const float ambientG() const
void setLine(float r, float g, float b, float a)
void setAmbient(float r, float g, float b, float a)
const float ambientR() const
const float * diffuse() const
const float lineR() const
const float * line() const
const int priority() const
const float * emission() const
void setSpecular(float r, float g, float b, float a)
const float emissionB() const
const float specularA() const
const float diffuseR() const
const float diffuseA() const
const float lineA() const
const float ambientA() const
void setEmission(float r, float g, float b, float a)
const float lineG() const
const float diffuseB() const
const float shininess() const
const float emissionG() const
int mathutils_array_parse(float *array, int array_num_min, int array_num_max, PyObject *value, const char *error_prefix)
uchar Mathutils_RegisterCallback(Mathutils_Callback *cb)
PyObject * Vector_CreatePyObject_cb(PyObject *cb_user, int vec_num, uchar cb_type, uchar cb_subtype)
PyObject_HEAD Freestyle::FrsMaterial * m