43 "Class defining a material.\n"
45 ".. method:: __init__()\n"
46 " __init__(brother)\n"
47 " __init__(line, diffuse, ambient, specular, emission, shininess, priority)\n"
49 " Creates a :class:`FrsMaterial` using either default constructor,\n"
50 " copy constructor, or an overloaded constructor\n"
52 " :arg brother: A Material object to be used as a copy constructor.\n"
53 " :type brother: :class:`Material`\n"
54 " :arg line: The line color.\n"
55 " :type line: :class:`mathutils.Vector`, list or tuple of 4 float values\n"
56 " :arg diffuse: The diffuse color.\n"
57 " :type diffuse: :class:`mathutils.Vector`, list or tuple of 4 float values\n"
58 " :arg ambient: The ambient color.\n"
59 " :type ambient: :class:`mathutils.Vector`, list or tuple of 4 float values\n"
60 " :arg specular: The specular color.\n"
61 " :type specular: :class:`mathutils.Vector`, list or tuple of 4 float values\n"
62 " :arg emission: The emissive color.\n"
63 " :type emission: :class:`mathutils.Vector`, list or tuple of 4 float values\n"
64 " :arg shininess: The shininess coefficient.\n"
65 " :type shininess: float\n"
66 " :arg priority: The line color priority.\n"
67 " :type priority: int");
71 static const char *kwlist_1[] = {
"brother",
nullptr};
72 static const char *kwlist_2[] = {
73 "line",
"diffuse",
"ambient",
"specular",
"emission",
"shininess",
"priority",
nullptr};
74 PyObject *brother =
nullptr;
75 float line[4], diffuse[4], ambient[4],
specular[4], emission[4], shininess;
78 if (PyArg_ParseTupleAndKeywords(
86 PyErr_SetString(PyExc_RuntimeError,
"invalid Material object");
92 else if ((
void)PyErr_Clear(),
93 PyArg_ParseTupleAndKeywords(args,
109 self->m =
new FrsMaterial(line, diffuse, ambient,
specular, emission, shininess, priority);
112 PyErr_SetString(PyExc_TypeError,
"invalid argument(s)");
121 Py_TYPE(
self)->tp_free((PyObject *)
self);
126 return PyUnicode_FromFormat(
"Material - address: %p",
self->m);
132 #define MATHUTILS_SUBTYPE_DIFFUSE 1
133 #define MATHUTILS_SUBTYPE_SPECULAR 2
134 #define MATHUTILS_SUBTYPE_AMBIENT 3
135 #define MATHUTILS_SUBTYPE_EMISSION 4
136 #define MATHUTILS_SUBTYPE_LINE 5
151 bmo->data[0] =
self->m->lineR();
152 bmo->data[1] =
self->m->lineG();
153 bmo->data[2] =
self->m->lineB();
154 bmo->data[3] =
self->m->lineA();
157 bmo->data[0] =
self->m->diffuseR();
158 bmo->data[1] =
self->m->diffuseG();
159 bmo->data[2] =
self->m->diffuseB();
160 bmo->data[3] =
self->m->diffuseA();
163 bmo->data[0] =
self->m->specularR();
164 bmo->data[1] =
self->m->specularG();
165 bmo->data[2] =
self->m->specularB();
166 bmo->data[3] =
self->m->specularA();
169 bmo->data[0] =
self->m->ambientR();
170 bmo->data[1] =
self->m->ambientG();
171 bmo->data[2] =
self->m->ambientB();
172 bmo->data[3] =
self->m->ambientA();
175 bmo->data[0] =
self->m->emissionR();
176 bmo->data[1] =
self->m->emissionG();
177 bmo->data[2] =
self->m->emissionB();
178 bmo->data[3] =
self->m->emissionA();
191 self->m->setLine(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
194 self->m->setDiffuse(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
197 self->m->setSpecular(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
200 self->m->setAmbient(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
203 self->m->setEmission(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
216 const float *
color =
self->m->line();
217 bmo->data[index] =
color[index];
220 const float *
color =
self->m->diffuse();
221 bmo->data[index] =
color[index];
224 const float *
color =
self->m->specular();
225 bmo->data[index] =
color[index];
228 const float *
color =
self->m->ambient();
229 bmo->data[index] =
color[index];
232 const float *
color =
self->m->emission();
233 bmo->data[index] =
color[index];
248 color[index] = bmo->data[index];
253 color[index] = bmo->data[index];
258 color[index] = bmo->data[index];
263 color[index] = bmo->data[index];
268 color[index] = bmo->data[index];
295 "RGBA components of the line color of the material.\n"
297 ":type: :class:`mathutils.Vector`");
316 "RGBA components of the diffuse color of the material.\n"
318 ":type: :class:`mathutils.Vector`");
337 "RGBA components of the specular color of the material.\n"
339 ":type: :class:`mathutils.Vector`");
358 "RGBA components of the ambient color of the material.\n"
360 ":type: :class:`mathutils.Color`");
379 "RGBA components of the emissive color of the material.\n"
381 ":type: :class:`mathutils.Color`");
400 "Shininess coefficient of the material.\n"
406 return PyFloat_FromDouble(
self->m->shininess());
412 if ((scalar = PyFloat_AsDouble(value)) == -1.0f && PyErr_Occurred()) {
414 PyErr_SetString(PyExc_TypeError,
"value must be a number");
417 self->m->setShininess(scalar);
422 "Line color priority of the material.\n"
428 return PyLong_FromLong(
self->m->priority());
434 if ((scalar = PyLong_AsLong(value)) == -1 && PyErr_Occurred()) {
435 PyErr_SetString(PyExc_TypeError,
"value must be an integer");
438 self->m->setPriority(scalar);
446 FrsMaterial_line_doc,
451 FrsMaterial_diffuse_doc,
456 FrsMaterial_specular_doc,
461 FrsMaterial_ambient_doc,
466 FrsMaterial_emission_doc,
471 FrsMaterial_shininess_doc,
476 FrsMaterial_priority_doc,
478 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr}
489 if (comparison_type == Py_NE) {
499 switch (comparison_type) {
501 result = (*matA->
m) != (*matB->m);
504 result = (*matA->
m) == (*matB->m);
507 PyErr_SetString(PyExc_TypeError,
"Material does not support this comparison type");
520 return (Py_uhash_t)
BLI_hash_mm2((
const unsigned char *)
self,
sizeof(*
self), 0);
525 PyVarObject_HEAD_INIT(
nullptr, 0)
"Material",
543 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)
#define MATHUTILS_SUBTYPE_DIFFUSE
static PyGetSetDef BPy_FrsMaterial_getseters[]
static PyObject * FrsMaterial_priority_get(BPy_FrsMaterial *self, void *UNUSED(closure))
static int FrsMaterial_line_set(BPy_FrsMaterial *self, PyObject *value, void *UNUSED(closure))
static PyObject * FrsMaterial_diffuse_get(BPy_FrsMaterial *self, void *UNUSED(closure))
static PyObject * FrsMaterial_ambient_get(BPy_FrsMaterial *self, void *UNUSED(closure))
static void FrsMaterial_dealloc(BPy_FrsMaterial *self)
static int FrsMaterial_shininess_set(BPy_FrsMaterial *self, PyObject *value, void *UNUSED(closure))
static int FrsMaterial_priority_set(BPy_FrsMaterial *self, PyObject *value, void *UNUSED(closure))
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`, list or tuple of 4 float values\n" " :arg diffuse: The diffuse color.\n" " :type diffuse: :class:`mathutils.Vector`, list or tuple of 4 float values\n" " :arg ambient: The ambient color.\n" " :type ambient: :class:`mathutils.Vector`, list or tuple of 4 float values\n" " :arg specular: The specular color.\n" " :type specular: :class:`mathutils.Vector`, list or tuple of 4 float values\n" " :arg emission: The emissive color.\n" " :type emission: :class:`mathutils.Vector`, list or tuple of 4 float values\n" " :arg shininess: The shininess coefficient.\n" " :type shininess: float\n" " :arg priority: The line color priority.\n" " :type priority: int")
static int FrsMaterial_mathutils_get_index(BaseMathObject *bmo, int subtype, int index)
static PyObject * FrsMaterial_specular_get(BPy_FrsMaterial *self, void *UNUSED(closure))
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_mathutils_set(BaseMathObject *bmo, int subtype)
#define MATHUTILS_SUBTYPE_SPECULAR
#define MATHUTILS_SUBTYPE_AMBIENT
static unsigned char FrsMaterial_mathutils_cb_index
static PyObject * BPy_FrsMaterial_richcmpr(PyObject *objectA, PyObject *objectB, int comparison_type)
static int FrsMaterial_diffuse_set(BPy_FrsMaterial *self, PyObject *value, void *UNUSED(closure))
static int FrsMaterial_mathutils_get(BaseMathObject *bmo, int subtype)
static int FrsMaterial_emission_set(BPy_FrsMaterial *self, PyObject *value, void *UNUSED(closure))
static PyObject * FrsMaterial_repr(BPy_FrsMaterial *self)
static int FrsMaterial_mathutils_set_index(BaseMathObject *bmo, int subtype, int index)
static int FrsMaterial_ambient_set(BPy_FrsMaterial *self, PyObject *value, void *UNUSED(closure))
static PyObject * FrsMaterial_shininess_get(BPy_FrsMaterial *self, void *UNUSED(closure))
static int FrsMaterial_mathutils_check(BaseMathObject *bmo)
static Py_hash_t FrsMaterial_hash(PyObject *self)
static PyObject * FrsMaterial_emission_get(BPy_FrsMaterial *self, void *UNUSED(closure))
static int FrsMaterial_specular_set(BPy_FrsMaterial *self, PyObject *value, void *UNUSED(closure))
static PyObject * FrsMaterial_line_get(BPy_FrsMaterial *self, void *UNUSED(closure))
#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 Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input 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 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 const pxr::TfToken specular("specular", pxr::TfToken::Immortal)
static struct PyModuleDef module
PyObject_HEAD Freestyle::FrsMaterial * m