[Bf-committers] Combine HSVA Node
Mathias Panzenböck
grosser.meister.morti at gmx.net
Sun Aug 27 16:12:18 CEST 2006
Hi. I wrote a small "Combine HSVA" node. It's handy if you want to do stuff
like convert the z-value to the colors of the rainbow. ;)
See: http://www.blender.org/forum/viewtopic.php?p=55586
Here is the diff:
Index: source/blender/blenkernel/BKE_node.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/BKE_node.h,v
retrieving revision 1.17
diff -r1.17 BKE_node.h
231a232
> #define CMP_NODE_COMBHSVA 229
cvs server: Diffing source/blender/blenkernel/bad_level_call_stubs
cvs server: Diffing source/blender/blenkernel/intern
Index: source/blender/blenkernel/intern/node_composite.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/intern/node_composite.c,v
retrieving revision 1.56
diff -r1.56 node_composite.c
2007a2008,2072
> /* **************** COMBINE HSVA ******************** */
> static bNodeSocketType cmp_node_combhsva_in[]= {
> { SOCK_VALUE, 1, "H", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
> { SOCK_VALUE, 1, "S", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
> { SOCK_VALUE, 1, "V", 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
> { SOCK_VALUE, 1, "A", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
> { -1, 0, "" }
> };
> static bNodeSocketType cmp_node_combhsva_out[]= {
> { SOCK_RGBA, 0, "Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
> { -1, 0, "" }
> };
>
> static void do_combhsva(bNode *node, float *out, float *h, float *s, float *v, float *a)
> {
> hsv_to_rgb(*h, *s, *v, &(out[0]), &(out[1]), &(out[2]));
>
> out[3] = *a;
> }
>
> static void node_composit_exec_combhsva(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
> {
> /* stack order out: 1 rgba channels */
> /* stack order in: 4 value channels */
>
> /* input no image? then only color operation */
> if((in[0]->data==NULL) && (in[1]->data==NULL) && (in[2]->data==NULL) && (in[3]->data==NULL)) {
> out[0]->vec[0] = in[0]->vec[0];
> out[0]->vec[1] = in[1]->vec[0];
> out[0]->vec[2] = in[2]->vec[0];
> out[0]->vec[3] = in[3]->vec[0];
> }
> else {
> /* make output size of first available input image */
> CompBuf *cbuf;
> CompBuf *stackbuf;
>
> /* allocate a CompBuf the size of the first available input */
> if (in[0]->data) cbuf = in[0]->data;
> else if (in[1]->data) cbuf = in[1]->data;
> else if (in[2]->data) cbuf = in[2]->data;
> else cbuf = in[3]->data;
>
> stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); // allocs
>
> composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec,
> in[2]->data, in[2]->vec, in[3]->data, in[3]->vec,
> do_combhsva, CB_VAL, CB_VAL, CB_VAL, CB_VAL);
>
> out[0]->data= stackbuf;
> }
> }
>
> static bNodeType cmp_node_combhsva= {
> /* type code */ CMP_NODE_COMBHSVA,
> /* name */ "Combine HSVA",
> /* width+range */ 80, 40, 140,
> /* class+opts */ NODE_CLASS_CONVERTOR, NODE_OPTIONS,
> /* input sock */ cmp_node_combhsva_in,
> /* output sock */ cmp_node_combhsva_out,
> /* storage */ "",
> /* execfunc */ node_composit_exec_combhsva
>
> };
>
3125a3191
> &cmp_node_combhsva,
More information about the Bf-committers
mailing list