[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13654] trunk/blender/source/blender: Added python access for baking

Campbell Barton ideasman42 at gmail.com
Tue Feb 12 15:47:59 CET 2008


Revision: 13654
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13654
Author:   campbellbarton
Date:     2008-02-12 15:47:55 +0100 (Tue, 12 Feb 2008)

Log Message:
-----------
Added python access for baking
http://www.blender.org/documentation/246PythonDoc/
http://www.blender.org/documentation/246PythonDoc/Render.RenderData-class.html
http://www.blender.org/documentation/246PythonDoc/bpy_api_2_46.zip

Modified Paths:
--------------
    trunk/blender/source/blender/include/BIF_meshtools.h
    trunk/blender/source/blender/python/api2_2x/BGL.c
    trunk/blender/source/blender/python/api2_2x/doc/Render.py
    trunk/blender/source/blender/python/api2_2x/doc/epy_docgen-3.sh
    trunk/blender/source/blender/python/api2_2x/sceneRender.c
    trunk/blender/source/blender/src/buttons_scene.c
    trunk/blender/source/blender/src/header_info.c
    trunk/blender/source/blender/src/meshtools.c

Modified: trunk/blender/source/blender/include/BIF_meshtools.h
===================================================================
--- trunk/blender/source/blender/include/BIF_meshtools.h	2008-02-12 13:38:07 UTC (rev 13653)
+++ trunk/blender/source/blender/include/BIF_meshtools.h	2008-02-12 14:47:55 UTC (rev 13654)
@@ -40,7 +40,8 @@
 
 extern void sort_faces(void);
 extern void objects_bake_render_menu(void);
-extern void objects_bake_render(short event);
+extern void objects_bake_render_ui(short event);
+extern void objects_bake_render(short event, char **error_msg);
 
 extern long mesh_octree_table(struct Object *ob, float *co, char mode);
 extern int mesh_get_x_mirror_vert(struct Object *ob, int index);

Modified: trunk/blender/source/blender/python/api2_2x/BGL.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/BGL.c	2008-02-12 13:38:07 UTC (rev 13653)
+++ trunk/blender/source/blender/python/api2_2x/BGL.c	2008-02-12 14:47:55 UTC (rev 13654)
@@ -1,5 +1,5 @@
 /* 
- * $Id: BGL.c 12267 2007-10-17 09:51:13Z campbellbarton $
+ * $Id$
  *
  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
  *
@@ -1099,7 +1099,7 @@
 	if( PyType_Ready( &buffer_Type) < 0)
 		Py_RETURN_NONE;
 
-#define EXPP_ADDCONST(x) EXPP_dict_set_item_str(dict, #x, PyInt_FromLong(x))
+#define EXPP_ADDCONST(x) EXPP_dict_set_item_str(dict, #x, PyInt_FromLong((int)x))
 
 /* So, for example:
  * EXPP_ADDCONST(GL_CURRENT_BIT) becomes
@@ -1126,7 +1126,8 @@
 	EXPP_ADDCONST(GL_TEXTURE_BIT);
 	EXPP_ADDCONST(GL_SCISSOR_BIT);
 	EXPP_ADDCONST(GL_ALL_ATTRIB_BITS);
-
+	EXPP_ADDCONST(GL_CLIENT_ALL_ATTRIB_BITS);
+	
 	EXPP_ADDCONST(GL_FALSE);
 	EXPP_ADDCONST(GL_TRUE);
 

Modified: trunk/blender/source/blender/python/api2_2x/doc/Render.py
===================================================================
--- trunk/blender/source/blender/python/api2_2x/doc/Render.py	2008-02-12 13:38:07 UTC (rev 13653)
+++ trunk/blender/source/blender/python/api2_2x/doc/Render.py	2008-02-12 14:47:55 UTC (rev 13654)
@@ -74,6 +74,24 @@
     horizontally or vertically
   - SCALE: Stretch or squeeze the viewport to fill the display window.
 
+ at type BakeModes: readonly dictionary
+ at var BakeModes: Constant dict used for with L{RenderData.bakeMode}
+attribute.  One of the following modes can be active:
+  - LIGHT: Bake lighting only.
+  - ALL: Bake all render lighting.
+  - AO: Bake ambient occlusion.
+  - NORMALS: Bake a normal map.
+  - TEXTURE: Bake textures.
+  - DISPLACEMENT: Bake displacement.
+
+ at type BakeNormalSpaceModes: readonly dictionary
+ at var BakeNormalSpaceModes: Constant dict used for with L{RenderData.bakeNormalSpace}
+attribute.  One of the following modes can be active:
+  - CAMERA: Bake normals relative to the camera.
+  - WORLD: Bake normals in worldspace.
+  - OBJECT: Bake normals relative to the object.
+  - TANGENT: Bake tangent space normals.
+
 @var INTERNAL: The internal rendering engine. Use with setRenderer()
 @var YAFRAY: Yafray rendering engine. Use with setRenderer()
 
@@ -367,6 +385,18 @@
   @type yafrayGIPhotons: boolean
   @ivar yafrayGITunePhotons: If true the photonmap is shown directly in the render for tuning.
   @type yafrayGITunePhotons: boolean
+  @ivar bakeMode: The method used when baking, see L{BakeModes}.
+  @type bakeMode: int
+  @ivar bakeNormalSpace: The method used when baking, see L{BakeNormalSpaceModes}.
+  @type bakeNormalSpace: int
+  @ivar bakeClear: When enabled, baking clears the image first.
+  @type bakeClear: bool
+  @ivar bakeToActive: When enabled, selected objects are baked onto the active object.
+  @type bakeToActive: bool  
+  @ivar bakeMargin: The pixel distance to extend baked pixels past the boundry (reduces bleeding when mipmapping)
+  @type bakeMargin: int
+  @ivar bakeDist: The distance in blender units to use when bakeToActive is enabled and geomtry does not overlap.
+  @type bakeDist: float
   """
   
   def currentFrame(frame = None):
@@ -383,6 +413,11 @@
     Render the scene.
     """
 
+  def bake():
+    """
+    Bake selected objects in the scene.
+    """
+
   def renderAnim():
     """
     Render a series of frames to an output directory.

Modified: trunk/blender/source/blender/python/api2_2x/doc/epy_docgen-3.sh
===================================================================
--- trunk/blender/source/blender/python/api2_2x/doc/epy_docgen-3.sh	2008-02-12 13:38:07 UTC (rev 13653)
+++ trunk/blender/source/blender/python/api2_2x/doc/epy_docgen-3.sh	2008-02-12 14:47:55 UTC (rev 13654)
@@ -7,6 +7,6 @@
 # set posix locale so regex works properly for [A-Z]*.py
 LC_ALL=POSIX
 
-epydoc -o BPY_API --url "http://www.blender.org" --top API_intro \
+epydoc -v -o BPY_API --url "http://www.blender.org" --top API_intro \
  --name "Blender" --no-private --no-frames \
 $( ls [A-Z]*.py )

Modified: trunk/blender/source/blender/python/api2_2x/sceneRender.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/sceneRender.c	2008-02-12 13:38:07 UTC (rev 13653)
+++ trunk/blender/source/blender/python/api2_2x/sceneRender.c	2008-02-12 14:47:55 UTC (rev 13654)
@@ -47,6 +47,7 @@
 #include "BIF_drawscene.h"
 #include "BIF_renderwin.h"
 #include "BIF_writeimage.h"
+#include "BIF_meshtools.h"
 
 #include "BLI_blenlib.h"
 
@@ -86,6 +87,10 @@
 	EXPP_RENDER_ATTR_SIZEY,
 	EXPP_RENDER_ATTR_GAUSSFILTER,
 	EXPP_RENDER_ATTR_MBLURFACTOR,
+	EXPP_RENDER_ATTR_BAKEMARGIN,
+	EXPP_RENDER_ATTR_BAKEMODE,
+ 	EXPP_RENDER_ATTR_BAKEDIST,
+	EXPP_RENDER_ATTR_BAKENORMALSPACE
 };
 
 #define EXPP_RENDER_ATTR_CFRA                 2
@@ -133,6 +138,7 @@
 static PyObject *RenderData_SetImageType( BPy_RenderData * self,
 		PyObject * args );
 static PyObject *RenderData_Render( BPy_RenderData * self );
+static PyObject *RenderData_Bake( BPy_RenderData * self );
 
 /* BPy_RenderData Internal Protocols */
 
@@ -492,6 +498,28 @@
 	Py_RETURN_NONE;
 }
 
+/***************************************************************************/
+/* BPy_Bake Function Definitions                                           */
+/***************************************************************************/
+
+PyObject *RenderData_Bake( BPy_RenderData * self )
+{
+	char *error_msg = NULL;
+	Scene *oldsce;
+
+	oldsce = G.scene;
+	set_scene( self->scene );
+	
+	objects_bake_render(0, &error_msg);
+	
+	set_scene( oldsce );
+	
+	if (error_msg)
+		return EXPP_ReturnPyObjError( PyExc_RuntimeError, error_msg );
+	
+	Py_RETURN_NONE;
+}
+
 /* 
  * This will save the rendered image to an output file path already defined.
  */
@@ -1849,6 +1877,9 @@
 	case EXPP_RENDER_ATTR_FPS_BASE:
 		param = self->renderContext->frs_sec_base;
 		break;
+	case EXPP_RENDER_ATTR_BAKEDIST:
+		param = self->renderContext->bake_maxdist;
+		break;
 	default:
 		return EXPP_ReturnPyObjError( PyExc_RuntimeError,
 				"undefined type constant in RenderData_getFloatAttr" );
@@ -1882,6 +1913,13 @@
 		max = 120.0f;
 		param = &self->renderContext->frs_sec_base;
 		break;
+		
+	case EXPP_RENDER_ATTR_BAKEDIST:
+		min = 0.0f;
+		max = 10.0f;
+		param = &self->renderContext->bake_maxdist;
+		break;
+		
 	default:
 		return EXPP_ReturnIntError( PyExc_RuntimeError,
 				"undefined type constant in RenderData_setFloatAttrClamp" );
@@ -1928,6 +1966,15 @@
 	case EXPP_RENDER_ATTR_SIZEY:
 		param = self->renderContext->ysch;
 		break;
+	case EXPP_RENDER_ATTR_BAKEMARGIN:
+		param = self->renderContext->bake_filter;
+		break;
+	case EXPP_RENDER_ATTR_BAKEMODE:
+		param = self->renderContext->bake_mode;
+		break;
+	case EXPP_RENDER_ATTR_BAKENORMALSPACE:
+		param = self->renderContext->bake_normal_space;
+		break;
 	default:
 		return EXPP_ReturnPyObjError( PyExc_RuntimeError,
 				"undefined type constant in RenderData_setIValueAttrClamp" );
@@ -2006,6 +2053,24 @@
 		size = 'h';
 		param = &self->renderContext->ysch;
 		break;
+	case EXPP_RENDER_ATTR_BAKEMARGIN:
+		min = 0;
+		max = 32;
+		size = 'h';
+		param = &self->renderContext->bake_filter;
+		break;
+	case EXPP_RENDER_ATTR_BAKEMODE:
+		min = RE_BAKE_LIGHT;
+		max = RE_BAKE_DISPLACEMENT;
+		size = 'h';
+		param = &self->renderContext->bake_mode;
+		break;
+	case EXPP_RENDER_ATTR_BAKENORMALSPACE:
+		min = R_BAKE_SPACE_CAMERA;
+		max = R_BAKE_SPACE_TANGENT;
+		size = 'h';
+		param = &self->renderContext->bake_normal_space;
+		break;
 	default:
 		return EXPP_ReturnIntError( PyExc_RuntimeError,
 				"undefined type constant in RenderData_setIValueAttrClamp" );
@@ -2451,6 +2516,32 @@
 	return 0;
 }
 
+static int RenderData_setBakeMode( BPy_RenderData *self, PyObject *value,
+		void *type )
+{
+	/* use negative numbers to flip truth */
+	int param = PyObject_IsTrue( value );
+	
+	if( param == -1 )
+		return EXPP_ReturnIntError( PyExc_TypeError,
+				"expected True/False or 0/1" );
+	
+	if (param) {
+		self->renderContext->bake_flag |= (int)type;
+	} else {
+		self->renderContext->bake_flag &= ~(int)type;
+	}
+	return 0;
+}
+
+static PyObject *RenderData_getBakeMode( BPy_RenderData *self, void *type )
+{
+	int itype = (int)type;
+	/* use negative numbers to flip truth */
+	if (self->renderContext->bake_flag & itype)	Py_RETURN_TRUE;
+	else										Py_RETURN_FALSE;
+}
+
 /***************************************************************************/
 /* BPy_RenderData attribute def                                            */
 /***************************************************************************/
@@ -2791,7 +2882,32 @@
 	 (getter)RenderData_getYafrayGITunePhotons, (setter)RenderData_setYafrayGITunePhotons,
 	 "If true the photonmap is shown directly in the render for tuning",
 	 NULL},
-
+  
+	/* Bake stuff */
+	{"bakeClear",
+	 (getter)RenderData_getBakeMode, (setter)RenderData_setBakeMode,
+	 "Clear the image before baking",
+	 (void *)R_BAKE_CLEAR},
+	{"bakeToActive",
+	 (getter)RenderData_getBakeMode, (setter)RenderData_setBakeMode,
+	 "Bake selection to active",
+	 (void *)R_BAKE_TO_ACTIVE},
+	{"bakeMargin",
+	 (getter)RenderData_getIValueAttr, (setter)RenderData_setIValueAttrClamp,
+	 "number of pixels to use as a margin for the edges of the image",
+	 (void *)EXPP_RENDER_ATTR_BAKEMARGIN},
+	{"bakeMode",
+	 (getter)RenderData_getIValueAttr, (setter)RenderData_setIValueAttrClamp,
+	 "The mode for baking, see Blender.Scene.Render.BakeModes",
+	 (void *)EXPP_RENDER_ATTR_BAKEMODE},
+	{"bakeNormalSpace",
+	 (getter)RenderData_getIValueAttr, (setter)RenderData_setIValueAttrClamp,
+	 "The mode for baking, see Blender.Scene.Render.BakeNormalSpaceModes",
+	 (void *)EXPP_RENDER_ATTR_BAKENORMALSPACE},

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list