[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21496] branches/soc-2009-yukishiro/source /blender: add lightenv node exec and add output and file output node preview

Jingyuan Huang jingyuan.huang at gmail.com
Fri Jul 10 19:06:58 CEST 2009


Revision: 21496
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21496
Author:   yukishiro
Date:     2009-07-10 19:06:58 +0200 (Fri, 10 Jul 2009)

Log Message:
-----------
add lightenv node exec and add output and file output node preview

Modified Paths:
--------------
    branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_lightenv.h
    branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_node.h
    branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c
    branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
    branches/soc-2009-yukishiro/source/blender/editors/space_node/drawnode.c
    branches/soc-2009-yukishiro/source/blender/nodes/CMakeLists.txt
    branches/soc-2009-yukishiro/source/blender/nodes/SConscript
    branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_lightenv.c
    branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_output.c
    branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_outputFile.c
    branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_util.h

Modified: branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_lightenv.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_lightenv.h	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_lightenv.h	2009-07-10 17:06:58 UTC (rev 21496)
@@ -41,7 +41,7 @@
 void init_def_lightenv(void);
 void free_lightenv(struct LightEnv *env); 
 struct LightEnv* add_lightenv(char *name);
-void save_lightenv(struct LightEnv *env, char *image_name);
+void save_lightenv(struct LightEnv *env, char *image_name, int imtype);
 
 void update_light_func(struct LightEnv *env);
 

Modified: branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_node.h	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_node.h	2009-07-10 17:06:58 UTC (rev 21496)
@@ -88,7 +88,7 @@
 	void (*copystoragefunc)(struct bNode *, struct bNode *);
 	
 	/* for use with dynamic typedefs */
-	ID *id;
+	struct ID *id;
 	void *pynode; /* holds pointer to python script */
 	void *pydict; /* holds pointer to python script dictionary (scope)*/
 

Modified: branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c	2009-07-10 17:06:58 UTC (rev 21496)
@@ -37,9 +37,11 @@
 #include "BKE_blender.h"
 #include "BKE_displist.h"
 #include "BKE_global.h"
+//#include "BKE_icons.h"
 #include "BKE_image.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
+#include "BKE_node.h"
 
 #include "DNA_lightenv_types.h"
 #include "DNA_world_types.h"
@@ -50,7 +52,25 @@
 
 #include "SH_api.h"
 
+static int convert_imtype_ftype(int imtype)
+{
+	switch (imtype) {
+		case R_RADHDR:
+			return RADHDR;
+		case R_PNG:
+			return PNG;
+		case R_RAWTGA:
+			return RAWTGA;
+		case R_BMP:
+			return BMP;
+		case R_TARGA:
+			return TGA;
+		default:
+			return JPG;
+	}
+}
 
+
 // TODO: simple function to return value for 3 channels. needs improvement
 void def_synthetic(float phi, float theta, float val[3], void *data)
 {
@@ -96,11 +116,16 @@
 	SH_computeLightCoefficients(env);
 }
 
-void save_lightenv(LightEnv *env, char *image_name)
+void save_lightenv(LightEnv *env, char *image_name, int imtype)
 {
 	ImBuf * ibuf= IMB_allocImBuf(env->output_width, env->output_height, 32, IB_rectfloat, 0);
 	SH_reconstructLightProbe(env, ibuf);
-	ibuf->ftype |= RADHDR; // must set to the correct file type
+	
+	if (imtype == 0) {
+		ibuf->ftype |= RADHDR; // must set to the correct file type
+	} else {
+		ibuf->ftype |= convert_imtype_ftype(imtype);
+	}
 	IMB_saveiff(ibuf, image_name, 0);
 	IMB_freeImBuf(ibuf);
 }

Modified: branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c	2009-07-10 17:06:58 UTC (rev 21496)
@@ -643,7 +643,7 @@
 	char str[FILE_MAX];
 	
 	RNA_string_get(op->ptr, "filename", str);
-	save_lightenv(env, str);
+	save_lightenv(env, str, 0);
 
 	return OPERATOR_FINISHED;
 }

Modified: branches/soc-2009-yukishiro/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/space_node/drawnode.c	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/editors/space_node/drawnode.c	2009-07-10 17:06:58 UTC (rev 21496)
@@ -58,6 +58,7 @@
 #include "BKE_global.h"
 #include "BKE_image.h"
 #include "BKE_library.h"
+#include "BKE_lightenv.h"
 #include "BKE_main.h"
 #include "BKE_material.h"
 #include "BKE_node.h"
@@ -2473,6 +2474,34 @@
 	return 20;
 }
 
+static int node_light_buts_output_file(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+{
+	if(block) {
+		NodeImageFile *nif= node->storage;
+		uiBut *bt;
+		short x= (short)butr->xmin;
+		short y= (short)butr->ymin;
+		short w= (short)butr->xmax - butr->xmin;
+		char str[320];
+
+		node_imagetype_string(str);
+
+		bt = uiDefIconBut(block, BUT, B_NODE_SETIMAGE, ICON_FILESEL,
+				x, y+60, 20, 20,
+				0, 0, 0, 0, 0, "Open Fileselect to select image");
+		uiButSetFunc(bt, node_set_image_cb, ntree, node);
+
+		uiDefBut(block, TEX, B_NOP, "",
+				x+20, y+60, w-20, 20,
+				nif->name, 0.0f, 240.0f, 0, 0, "");
+
+		uiDefButS(block, MENU, B_NOP, str,
+				x, y+40, w, 20,
+				&nif->imtype, 0.0f, 1.0f, 0, 0, "");
+	}
+	return 80;
+}
+
 static void node_light_set_butfunc(bNodeType *ntype)
 {
 	switch(ntype->type) {
@@ -2483,10 +2512,12 @@
 			ntype->butfunc= node_light_buts_image;
 			break;
 		case LGT_NODE_OUTPUT_FILE:
+			ntype->butfunc= node_light_buts_output_file;
 			break;
 	}
 }
 
+
 /* ******* init draw callbacks for all tree types, only called in usiblender.c, once ************* */
 
 void ED_init_node_butfuncs(void)

Modified: branches/soc-2009-yukishiro/source/blender/nodes/CMakeLists.txt
===================================================================
--- branches/soc-2009-yukishiro/source/blender/nodes/CMakeLists.txt	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/nodes/CMakeLists.txt	2009-07-10 17:06:58 UTC (rev 21496)
@@ -28,7 +28,7 @@
 SET(INC 
   . ../../../intern/guardedalloc ../editors/include ../blenlib ../makesdna
   ../render/extern/include ../../../intern/decimation/extern
-  ../imbuf ../avi ../../../intern/elbeem/extern
+  ../imbuf ../avi ../../../intern/elbeem/extern ../sh
   ../../../intern/iksolver/extern ../blenloader ../quicktime
   ../blenkernel ../../../extern/glew/include ../gpu
   ${SDL_INC}

Modified: branches/soc-2009-yukishiro/source/blender/nodes/SConscript
===================================================================
--- branches/soc-2009-yukishiro/source/blender/nodes/SConscript	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/nodes/SConscript	2009-07-10 17:06:58 UTC (rev 21496)
@@ -11,7 +11,7 @@
 incs += '#/intern/guardedalloc ../editors/include ../blenlib ../makesdna'
 incs += ' ../render/extern/include '
 incs += ' ../imbuf ../avi '
-incs += ' ../blenloader'
+incs += ' ../blenloader ../sh'
 incs += ' ../blenkernel ../renderconverter '
 incs += ' ../gpu #/extern/glew/include '
 

Modified: branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_lightenv.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_lightenv.c	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_lightenv.c	2009-07-10 17:06:58 UTC (rev 21496)
@@ -36,16 +36,22 @@
 static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
 {
 	LightCallData * lcd = (LightCallData *)data;
-	LightEnv * env = (LightEnv *)node->id;
+	LightEnv * env;
 	bNodePreview *preview;
 
+	env = (LightEnv *)node->id;
+	if (env == NULL) env = lcd->env;
+
+	/* set output */
+	out[0]->data = env;
+
+	/* preview */
 	if(!(node->typeinfo->flag & NODE_PREVIEW))
 		return;
 
 	init_preview(node);
 	preview = node->preview;
 
-	if (env == NULL) env = lcd->env;
 	SH_lightProbePreview(env, preview->xsize, preview->ysize,
                         0, 0, preview->xsize, preview->ysize, preview->rect);
 }

Modified: branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_output.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_output.c	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_output.c	2009-07-10 17:06:58 UTC (rev 21496)
@@ -30,12 +30,27 @@
 #include "../LGT_util.h"
 
 static bNodeSocketType inputs[]= {
-	{	SOCK_RGBA, 1, "Color",		0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
-	{	-1, 0, ""	}
+	{SOCK_RGBA, 1, "Color",0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+	{-1, 0, ""}
 };
 
 static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
 {
+	LightEnv * env;
+	bNodePreview *preview;
+
+	if (in[0]->data) {
+		env = (LightEnv*)in[0]->data;
+
+		/* preview */
+		if(!(node->typeinfo->flag & NODE_PREVIEW)) return;
+
+		init_preview(node);
+		preview = node->preview;
+
+		SH_lightProbePreview(env, preview->xsize, preview->ysize,
+        	                0, 0, preview->xsize, preview->ysize, preview->rect);
+	}
 }
 
 bNodeType lgt_node_output= {

Modified: branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_outputFile.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_outputFile.c	2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_outputFile.c	2009-07-10 17:06:58 UTC (rev 21496)
@@ -34,12 +34,71 @@
 	{-1, 0, ""}
 };
 
+
+// XXX BKE_add_image_extension requires Scene...
+void add_image_extension(char * base, int imtype)
+{
+	char *extension="";
+
+	if(imtype==R_RADHDR) {
+		if(!BLI_testextensie(base, ".hdr"))
+			extension= ".hdr";
+	}
+	else if(imtype==R_PNG) {
+		if(!BLI_testextensie(base, ".png"))
+			extension= ".png";
+	}
+	else if(imtype==R_RAWTGA) {
+		if(!BLI_testextensie(base, ".tga"))
+			extension= ".tga";
+	}
+	else if(imtype==R_BMP) {
+		if(!BLI_testextensie(base, ".bmp"))
+			extension= ".bmp";
+	}
+	else if(imtype==R_TARGA) {
+		if(!BLI_testextensie(base, ".tga"))
+			extension= ".tga";
+	}
+	else { 
+		if(!( BLI_testextensie(base, ".jpg") || BLI_testextensie(base, ".jpeg")))
+			extension= ".jpg";
+	}
+
+	strcat(base, extension);
+}
+
 static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
 {
+	if (in[0]->data) {
+		LightEnv *env = (LightEnv*)in[0]->data;
+		NodeImageFile *nif= node->storage;
+		bNodePreview *preview;
+		char filename[256];
+
+		/* save image */
+		if (!BLI_streq(nif->name, "")) {
+			BLI_strncpy(filename, nif->name, 256);
+			add_image_extension(filename, nif->imtype);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list