[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