[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21942] branches/blender2.5/blender: render api utility function to initialize a render layer from an image rather then loading through python .

Campbell Barton ideasman42 at gmail.com
Mon Jul 27 20:50:11 CEST 2009


Revision: 21942
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21942
Author:   campbellbarton
Date:     2009-07-27 20:50:10 +0200 (Mon, 27 Jul 2009)

Log Message:
-----------
render api utility function to initialize a render layer from an image rather then loading through python.

	lay = result.layers[0]
	lay.rect_from_file("somefile.png", part.x, part.y)

If the source image is bigger then the render layer x/y offsets can be used to choose the part of the image use.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/space_view3d_toolbar.py
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_render.c
    branches/blender2.5/blender/source/blender/render/extern/include/RE_pipeline.h
    branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c

Modified: branches/blender2.5/blender/release/ui/space_view3d_toolbar.py
===================================================================
--- branches/blender2.5/blender/release/ui/space_view3d_toolbar.py	2009-07-27 18:26:48 UTC (rev 21941)
+++ branches/blender2.5/blender/release/ui/space_view3d_toolbar.py	2009-07-27 18:50:10 UTC (rev 21942)
@@ -27,7 +27,8 @@
 		col.itemO("object.duplicate")
 		col.itemO("object.delete")
 		
-		if context.active_object.type == 'MESH':
+		active_object= context.active_object
+		if active_object and active_object.type == 'MESH':
 			layout.itemL(text="Shading:")
 		
 			col = layout.column(align=True)

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_render.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_render.c	2009-07-27 18:26:48 UTC (rev 21941)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_render.c	2009-07-27 18:50:10 UTC (rev 21942)
@@ -297,10 +297,21 @@
 {
 	StructRNA *srna;
 	PropertyRNA *prop;
+	FunctionRNA *func;
 	
 	srna= RNA_def_struct(brna, "RenderLayer", NULL);
 	RNA_def_struct_ui_text(srna, "Render Layer", "");
 
+	func= RNA_def_function(srna, "rect_from_file", "RE_layer_rect_from_file");
+	RNA_def_function_ui_description(func, "Copies the pixels of this renderlayer from an image file.");
+	RNA_def_function_flag(func, FUNC_USE_REPORTS);
+	prop= RNA_def_string(func, "filename", "", 0, "Filename", "Filename to load into this render tile, must be no smaller then the renderlayer");
+	RNA_def_property_flag(prop, PROP_REQUIRED);
+	prop= RNA_def_int(func, "x", 0, 0, INT_MAX, "Offset X", "Offset the position to copy from if the image is larger then the render layer", 0, INT_MAX);
+	RNA_def_property_flag(prop, PROP_REQUIRED);
+	prop= RNA_def_int(func, "y", 0, 0, INT_MAX, "Offset Y", "Offset the position to copy from if the image is larger then the render layer", 0, INT_MAX);
+	RNA_def_property_flag(prop, PROP_REQUIRED);
+	
 	RNA_define_verify_sdna(0);
 
 	rna_def_render_layer_common(srna, 0);

Modified: branches/blender2.5/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- branches/blender2.5/blender/source/blender/render/extern/include/RE_pipeline.h	2009-07-27 18:26:48 UTC (rev 21941)
+++ branches/blender2.5/blender/source/blender/render/extern/include/RE_pipeline.h	2009-07-27 18:50:10 UTC (rev 21942)
@@ -39,6 +39,7 @@
 struct Image;
 struct NodeBlurData;
 struct Object;
+struct ReportList;
 struct RenderData;
 struct RenderEngine;
 struct RenderEngineType;
@@ -265,6 +266,8 @@
 	ListBase fullresult;
 } RenderEngine;
 
+void RE_layer_rect_from_file(RenderLayer *layer, struct ReportList *reports, char *filename, int x, int y);
+
 struct RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h);
 void RE_engine_update_result(RenderEngine *engine, struct RenderResult *result);
 void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result);

Modified: branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c	2009-07-27 18:26:48 UTC (rev 21941)
+++ branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c	2009-07-27 18:50:10 UTC (rev 21942)
@@ -45,6 +45,7 @@
 #include "BKE_main.h"
 #include "BKE_node.h"
 #include "BKE_object.h"
+#include "BKE_report.h"
 #include "BKE_scene.h"
 #include "BKE_writeavi.h"	/* <------ should be replaced once with generic movie module */
 #include "BKE_pointcache.h"
@@ -2876,6 +2877,47 @@
 	re->i.statstr= NULL;
 }
 
+/* loads in image into a result, size must match
+ * x/y offsets are only used on a partial copy when dimensions dont match */
+void RE_layer_rect_from_file(RenderLayer *layer, ReportList *reports, char *filename, int x, int y)
+{
+	ImBuf *ibuf = IMB_loadiffname(filename, IB_rect);
+
+	if(ibuf  && (ibuf->rect || ibuf->rect_float)) {
+		if (ibuf->x == layer->rectx && ibuf->y == layer->recty) {
+			if(ibuf->rect_float==NULL)
+				IMB_float_from_rect(ibuf);
+
+			memcpy(layer->rectf, ibuf->rect_float, sizeof(float)*4*layer->rectx*layer->recty);
+		} else {
+			if ((ibuf->x - x >= layer->rectx) && (ibuf->y - y >= layer->recty)) {
+				ImBuf *ibuf_clip;
+
+				if(ibuf->rect_float==NULL)
+					IMB_float_from_rect(ibuf);
+
+				ibuf_clip = IMB_allocImBuf(layer->rectx, layer->recty, 32, IB_rectfloat, 0);
+				if(ibuf_clip) {
+					IMB_rectcpy(ibuf_clip, ibuf, 0,0, x,y, layer->rectx, layer->recty);
+
+					memcpy(layer->rectf, ibuf_clip->rect_float, sizeof(float)*4*layer->rectx*layer->recty);
+					IMB_freeImBuf(ibuf_clip);
+				}
+				else {
+					BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: failed to allocate clip buffer '%s'\n", filename);
+				}
+			}
+			else {
+				BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: incorrect dimensions for partial copy '%s'\n", filename);
+			}
+		}
+
+		IMB_freeImBuf(ibuf);
+	}
+	else {
+		BKE_reportf(reports, RPT_ERROR, "RE_result_rect_from_file: failed to load '%s'\n", filename);
+	}
+}
 static void external_render_3d(Render *re, RenderEngineType *type)
 {
 	RenderEngine engine;





More information about the Bf-blender-cvs mailing list