CBData *BKE_colorband_element_add(struct ColorBand *coba, float position) { if (coba->tot == MAXCOLORBAND) { return NULL; } else { CBData *xnew; xnew = &coba->data[coba->tot]; xnew->pos = position; if (coba->tot != 0) { BKE_colorband_evaluate(coba, position, &xnew->r); } else { zero_v4(&xnew->r); } } coba->tot++; coba->cur = coba->tot - 1; BKE_colorband_update_sort(coba); return coba->data + coba->cur; }
static void valtorgb_colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread) { if (node->storage) { float fac = tex_input_value(in[0], p, thread); BKE_colorband_evaluate(node->storage, fac, out); } }
void BKE_colorband_evaluate_table_rgba(const ColorBand *coba, float **array, int *size) { int a; *size = CM_TABLE + 1; *array = MEM_callocN(sizeof(float) * (*size) * 4, "ColorBand"); for (a = 0; a < *size; a++) BKE_colorband_evaluate(coba, (float)a / (float)CM_TABLE, &(*array)[a * 4]); }
static void node_shader_exec_valtorgb(void *UNUSED(data), int UNUSED(thread), bNode *node, bNodeExecData *UNUSED(execdata), bNodeStack **in, bNodeStack **out) { /* stack order in: fac */ /* stack order out: col, alpha */ if (node->storage) { float fac; nodestack_get_vec(&fac, SOCK_FLOAT, in[0]); BKE_colorband_evaluate(node->storage, fac, out[0]->vec); out[1]->vec[0] = out[0]->vec[3]; } }
static PyObject *Freestyle_evaluateColorRamp(PyObject * /*self*/, PyObject *args) { BPy_StructRNA *py_srna; ColorBand *coba; float in, out[4]; if (!(PyArg_ParseTuple(args, "O!f", &pyrna_struct_Type, &py_srna, &in))) return NULL; if (!RNA_struct_is_a(py_srna->ptr.type, &RNA_ColorRamp)) { PyErr_SetString(PyExc_TypeError, "1st argument is not a ColorRamp object"); return NULL; } coba = (ColorBand *)py_srna->ptr.data; if (!BKE_colorband_evaluate(coba, in, out)) { PyErr_SetString(PyExc_ValueError, "failed to evaluate the color ramp"); return NULL; } return Vector_CreatePyObject(out, 4, NULL); }