Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2008-02-12 17:47:55 +0300
committerCampbell Barton <ideasman42@gmail.com>2008-02-12 17:47:55 +0300
commit3974a0a3c1a19aaa2a06df1bad7f96f827088319 (patch)
treeb8a139e3f896aca0eae155b4d14ca039dacafaeb /source/blender/python/api2_2x/sceneRender.c
parentc371346601276d9ae72ace5f4a877b42107bea78 (diff)
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
Diffstat (limited to 'source/blender/python/api2_2x/sceneRender.c')
-rw-r--r--source/blender/python/api2_2x/sceneRender.c163
1 files changed, 160 insertions, 3 deletions
diff --git a/source/blender/python/api2_2x/sceneRender.c b/source/blender/python/api2_2x/sceneRender.c
index 581c6132581..bf940512f67 100644
--- a/source/blender/python/api2_2x/sceneRender.c
+++ b/source/blender/python/api2_2x/sceneRender.c
@@ -47,6 +47,7 @@ struct View3D; /* keep me up here */
#include "BIF_drawscene.h"
#include "BIF_renderwin.h"
#include "BIF_writeimage.h"
+#include "BIF_meshtools.h"
#include "BLI_blenlib.h"
@@ -86,6 +87,10 @@ enum rend_constants {
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_SetRenderer( BPy_RenderData * self,
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 @@ PyObject *RenderData_Render( BPy_RenderData * self )
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 @@ static PyObject *RenderData_getFloatAttr( BPy_RenderData *self, void *type )
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 @@ static int RenderData_setFloatAttrClamp( BPy_RenderData *self, PyObject *value,
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 @@ static PyObject *RenderData_getIValueAttr( BPy_RenderData *self, void *type )
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 @@ static int RenderData_setIValueAttrClamp( BPy_RenderData *self, PyObject *value,
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 @@ static int RenderData_setActiveLayer( BPy_RenderData *self, PyObject *value )
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 @@ static PyGetSetDef BPy_RenderData_getseters[] = {
(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},
+ {"bakeDist",
+ (getter)RenderData_getFloatAttr, (setter)RenderData_setFloatAttrClamp,
+ "Distance in blender units",
+ (void *)EXPP_RENDER_ATTR_BAKEDIST},
{NULL,NULL,NULL,NULL,NULL}
};
@@ -2801,6 +2917,8 @@ static PyGetSetDef BPy_RenderData_getseters[] = {
static PyMethodDef BPy_RenderData_methods[] = {
{"render", ( PyCFunction ) RenderData_Render, METH_NOARGS,
"() - render the scene"},
+ {"bake", ( PyCFunction ) RenderData_Bake, METH_NOARGS,
+ "() - bake current selection"},
{"saveRenderedImage", (PyCFunction)RenderData_SaveRenderedImage, METH_VARARGS,
"(filename) - save an image generated by a call to render() (set output path first)"},
{"renderAnim", ( PyCFunction ) RenderData_RenderAnim, METH_NOARGS,
@@ -3660,6 +3778,39 @@ static PyObject *M_Render_GameFramingDict( void )
return M;
}
+static PyObject *M_Render_BakeModesDict( void )
+{
+ PyObject *M = PyConstant_New( );
+
+ if( M ) {
+ BPy_constant *d = ( BPy_constant * ) M;
+
+ PyConstant_Insert( d, "LIGHT", PyInt_FromLong( RE_BAKE_LIGHT ) );
+ PyConstant_Insert( d, "ALL", PyInt_FromLong( RE_BAKE_ALL ) );
+ PyConstant_Insert( d, "AO", PyInt_FromLong( RE_BAKE_AO ) );
+ PyConstant_Insert( d, "NORMALS", PyInt_FromLong( RE_BAKE_NORMALS ) );
+ PyConstant_Insert( d, "TEXTURE", PyInt_FromLong( RE_BAKE_TEXTURE ) );
+ PyConstant_Insert( d, "DISPLACEMENT", PyInt_FromLong( RE_BAKE_DISPLACEMENT ) );
+ }
+ return M;
+}
+
+
+static PyObject *M_Render_BakeNormalSpaceDict( void )
+{
+ PyObject *M = PyConstant_New( );
+
+ if( M ) {
+ BPy_constant *d = ( BPy_constant * ) M;
+
+ PyConstant_Insert( d, "CAMERA", PyInt_FromLong( R_BAKE_SPACE_CAMERA ) );
+ PyConstant_Insert( d, "WORLS", PyInt_FromLong( R_BAKE_SPACE_WORLD ) );
+ PyConstant_Insert( d, "OBJECT", PyInt_FromLong( R_BAKE_SPACE_OBJECT ) );
+ PyConstant_Insert( d, "TANGENT", PyInt_FromLong( R_BAKE_SPACE_TANGENT ) );
+ }
+ return M;
+}
+
/***************************************************************************/
/* Render Module Init */
/***************************************************************************/
@@ -3669,7 +3820,9 @@ PyObject *Render_Init( void )
PyObject *ModesDict = M_Render_ModesDict( );
PyObject *SceModesDict = M_Render_SceModesDict( );
PyObject *GFramingDict = M_Render_GameFramingDict( );
-
+ PyObject *BakeModesDict = M_Render_BakeModesDict( );
+ PyObject *BakeNormalSpaceDict = M_Render_BakeNormalSpaceDict( );
+
if( PyType_Ready( &RenderData_Type ) < 0 )
return NULL;
@@ -3685,7 +3838,11 @@ PyObject *Render_Init( void )
PyModule_AddObject( submodule, "SceModes", SceModesDict );
if( GFramingDict )
PyModule_AddObject( submodule, "FramingModes", GFramingDict );
-
+ if( BakeModesDict )
+ PyModule_AddObject( submodule, "BakeModes", BakeModesDict );
+ if( BakeNormalSpaceDict )
+ PyModule_AddObject( submodule, "BakeNormalSpaceModes", BakeNormalSpaceDict );
+
/* ugh: why aren't these in a constant dict? */
PyModule_AddIntConstant( submodule, "INTERNAL", R_INTERN );