46 "Class defining a material.\n"
48 ".. method:: __init__()\n"
49 " __init__(brother)\n"
50 " __init__(line, diffuse, ambient, specular, emission, shininess, priority)\n"
52 " Creates a :class:`FrsMaterial` using either default constructor,\n"
53 " copy constructor, or an overloaded constructor\n"
55 " :arg brother: A Material object to be used as a copy constructor.\n"
56 " :type brother: :class:`Material`\n"
57 " :arg line: The line color.\n"
58 " :type line: :class:`mathutils.Vector` | tuple[float, float, float, float] | list[float]\n"
59 " :arg diffuse: The diffuse color.\n"
61 " :arg ambient: The ambient color.\n"
62 " :type ambient: :class:`mathutils.Vector` | tuple[float, float, float, float] | "
64 " :arg specular: The specular color.\n"
65 " :type specular: :class:`mathutils.Vector` | tuple[float, float, float, float] | "
67 " :arg emission: The emissive color.\n"
68 " :type emission: :class:`mathutils.Vector` | tuple[float, float, float, float] | "
70 " :arg shininess: The shininess coefficient.\n"
71 " :type shininess: float\n"
72 " :arg priority: The line color priority.\n"
73 " :type priority: int");
77 static const char *kwlist_1[] = {
"brother",
nullptr};
78 static const char *kwlist_2[] = {
79 "line",
"diffuse",
"ambient",
"specular",
"emission",
"shininess",
"priority",
nullptr};
80 PyObject *brother =
nullptr;
81 float line[4], diffuse[4], ambient[4], specular[4], emission[4], shininess;
84 if (PyArg_ParseTupleAndKeywords(
93 PyErr_SetString(PyExc_RuntimeError,
"invalid Material object");
99 else if ((
void)PyErr_Clear(),
100 PyArg_ParseTupleAndKeywords(args,
117 self->m =
new FrsMaterial(line, diffuse, ambient, specular, emission, shininess, priority);
120 PyErr_SetString(PyExc_TypeError,
"invalid argument(s)");
129 Py_TYPE(
self)->tp_free((PyObject *)
self);
134 return PyUnicode_FromFormat(
"Material - address: %p",
self->m);
140#define MATHUTILS_SUBTYPE_DIFFUSE 1
141#define MATHUTILS_SUBTYPE_SPECULAR 2
142#define MATHUTILS_SUBTYPE_AMBIENT 3
143#define MATHUTILS_SUBTYPE_EMISSION 4
144#define MATHUTILS_SUBTYPE_LINE 5
159 bmo->data[0] =
self->m->lineR();
160 bmo->data[1] =
self->m->lineG();
161 bmo->data[2] =
self->m->lineB();
162 bmo->data[3] =
self->m->lineA();
165 bmo->data[0] =
self->m->diffuseR();
166 bmo->data[1] =
self->m->diffuseG();
167 bmo->data[2] =
self->m->diffuseB();
168 bmo->data[3] =
self->m->diffuseA();
171 bmo->data[0] =
self->m->specularR();
172 bmo->data[1] =
self->m->specularG();
173 bmo->data[2] =
self->m->specularB();
174 bmo->data[3] =
self->m->specularA();
177 bmo->data[0] =
self->m->ambientR();
178 bmo->data[1] =
self->m->ambientG();
179 bmo->data[2] =
self->m->ambientB();
180 bmo->data[3] =
self->m->ambientA();
183 bmo->data[0] =
self->m->emissionR();
184 bmo->data[1] =
self->m->emissionG();
185 bmo->data[2] =
self->m->emissionB();
186 bmo->data[3] =
self->m->emissionA();
199 self->m->setLine(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
202 self->m->setDiffuse(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
205 self->m->setSpecular(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
208 self->m->setAmbient(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
211 self->m->setEmission(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
225 bmo->data[index] =
color[index];
230 bmo->data[index] =
color[index];
234 const float *
color =
self->m->specular();
235 bmo->data[index] =
color[index];
240 bmo->data[index] =
color[index];
244 const float *
color =
self->m->emission();
245 bmo->data[index] =
color[index];
261 color[index] = bmo->data[index];
266 color[index] = bmo->data[index];
271 color[index] = bmo->data[index];
276 color[index] = bmo->data[index];
281 color[index] = bmo->data[index];
309 FrsMaterial_line_doc,
310 "RGBA components of the line color of the material.\n"
312 ":type: :class:`mathutils.Vector`");
332 FrsMaterial_diffuse_doc,
333 "RGBA components of the diffuse color of the material.\n"
335 ":type: :class:`mathutils.Vector`");
355 FrsMaterial_specular_doc,
356 "RGBA components of the specular color of the material.\n"
358 ":type: :class:`mathutils.Vector`");
378 FrsMaterial_ambient_doc,
379 "RGBA components of the ambient color of the material.\n"
381 ":type: :class:`mathutils.Color`");
401 FrsMaterial_emission_doc,
402 "RGBA components of the emissive color of the material.\n"
404 ":type: :class:`mathutils.Color`");
424 FrsMaterial_shininess_doc,
425 "Shininess coefficient of the material.\n"
431 return PyFloat_FromDouble(
self->m->shininess());
437 if ((scalar = PyFloat_AsDouble(value)) == -1.0f && PyErr_Occurred()) {
439 PyErr_SetString(PyExc_TypeError,
"value must be a number");
442 self->m->setShininess(scalar);
448 FrsMaterial_priority_doc,
449 "Line color priority of the material.\n"
455 return PyLong_FromLong(
self->m->priority());
461 if ((scalar = PyLong_AsLong(value)) == -1 && PyErr_Occurred()) {
462 PyErr_SetString(PyExc_TypeError,
"value must be an integer");
465 self->m->setPriority(scalar);
473 FrsMaterial_line_doc,
478 FrsMaterial_diffuse_doc,
483 FrsMaterial_specular_doc,
488 FrsMaterial_ambient_doc,
493 FrsMaterial_emission_doc,
498 FrsMaterial_shininess_doc,
503 FrsMaterial_priority_doc,
505 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr}
516 if (comparison_type == Py_NE) {
526 switch (comparison_type) {
528 result = (*matA->
m) != (*matB->m);
531 result = (*matA->
m) == (*matB->m);
534 PyErr_SetString(PyExc_TypeError,
"Material does not support this comparison type");
552 PyVarObject_HEAD_INIT(
nullptr, 0)
571 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)
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)
PyDoc_STRVAR(FrsMaterial_doc, "Class defining a material.\n" "\n" ".. method:: __init__()\n" " __init__(brother)\n" " __init__(line, diffuse, ambient, specular, emission, shininess, priority)\n" "\n" " Creates a :class:`FrsMaterial` using either default constructor,\n" " copy constructor, or an overloaded constructor\n" "\n" " :arg brother: A Material object to be used as a copy constructor.\n" " :type brother: :class:`Material`\n" " :arg line: The line color.\n" " :type line: :class:`mathutils.Vector` | tuple[float, float, float, float] | list[float]\n" " :arg diffuse: The diffuse color.\n" " :type diffuse: \n" " :arg ambient: The ambient color.\n" " :type ambient: :class:`mathutils.Vector` | tuple[float, float, float, float] | " "list[float]\n" " :arg specular: The specular color.\n" " :type specular: :class:`mathutils.Vector` | tuple[float, float, float, float] | " "list[float]\n" " :arg emission: The emissive color.\n" " :type emission: :class:`mathutils.Vector` | tuple[float, float, float, float] | " "list[float]\n" " :arg shininess: The shininess coefficient.\n" " :type shininess: float\n" " :arg priority: The line color priority.\n" " :type priority: int")
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)
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
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)
static struct PyModuleDef module
PyObject_HEAD Freestyle::FrsMaterial * m