[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13425] trunk/blender/source/blender/ python/api2_2x: renderLayer access for the render api, no epydocs yet
Campbell Barton
ideasman42 at gmail.com
Sun Jan 27 23:22:41 CET 2008
Revision: 13425
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13425
Author: campbellbarton
Date: 2008-01-27 23:22:41 +0100 (Sun, 27 Jan 2008)
Log Message:
-----------
renderLayer access for the render api, no epydocs yet
Modified Paths:
--------------
trunk/blender/source/blender/python/api2_2x/sceneRender.c
trunk/blender/source/blender/python/api2_2x/sceneRender.h
Modified: trunk/blender/source/blender/python/api2_2x/sceneRender.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/sceneRender.c 2008-01-27 19:26:17 UTC (rev 13424)
+++ trunk/blender/source/blender/python/api2_2x/sceneRender.c 2008-01-27 22:22:41 UTC (rev 13425)
@@ -33,12 +33,16 @@
#include "sceneRender.h" /*This must come first*/
+#include "MEM_guardedalloc.h"
+
#include "DNA_image_types.h"
+#include "DNA_node_types.h"
#include "BKE_image.h"
#include "BKE_global.h"
#include "BKE_screen.h"
#include "BKE_scene.h"
+#include "BKE_node.h"
#include "BIF_drawscene.h"
#include "BIF_renderwin.h"
@@ -52,8 +56,10 @@
#include "butspace.h"
#include "blendef.h"
#include "gen_utils.h"
+#include "gen_library.h"
#include "Scene.h"
+#include "Group.h"
/* local defines */
#define PY_NONE 0
@@ -1758,7 +1764,68 @@
return PyString_FromString(tc);
}
+
/***************************************************************************/
+/* Render layer functions */
+/***************************************************************************/
+PyObject *RenderData_getRenderLayers(BPy_RenderData * self)
+{
+ PyObject *list, *layer;
+ SceneRenderLayer *srl;
+
+ list = PyList_New(0);
+
+ for(srl= self->renderContext->layers.first; srl; srl= srl->next) {
+ layer = RenderLayer_CreatePyObject( srl );
+ PyList_Append(list, layer);
+ Py_DECREF(layer);
+ }
+ return list;
+}
+
+PyObject *RenderData_removeRenderLayer(BPy_RenderData * self, BPy_RenderLayer *value)
+{
+ int index;
+ if (!BPy_RenderLayer_Check(value))
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "can only remove a render layer" );
+
+ index = BLI_findindex(&self->renderContext->layers, value->renderLayer);
+
+ if (index == -1)
+ return EXPP_ReturnPyObjError( PyExc_ValueError,
+ "render layer is not in this scene" );
+
+ if (BLI_countlist(&self->renderContext->layers)<=1)
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "cannot remove the last render layer" );
+
+ BLI_remlink(&self->scene->r.layers, value->renderLayer);
+ MEM_freeN(value->renderLayer);
+ self->scene->r.actlay= 0;
+
+ if(self->scene->nodetree) {
+ bNode *node;
+ for(node= self->scene->nodetree->nodes.first; node; node= node->next) {
+ if(node->type==CMP_NODE_R_LAYERS && node->id==NULL) {
+ if(node->custom1==index)
+ node->custom1= 0;
+ else if(node->custom1 > index)
+ node->custom1--;
+ }
+ }
+ }
+
+ value->renderLayer = NULL;
+}
+
+PyObject *RenderData_addRenderLayer(BPy_RenderData * self ) {
+ scene_add_render_layer(self->scene);
+ return RenderLayer_CreatePyObject( self->renderContext->layers.last );
+
+}
+
+/***************************************************************************/
/* generic handlers for getting/setting attributes */
/***************************************************************************/
@@ -2631,11 +2698,16 @@
"Scene link 'set' value",
NULL},
+ /* renderlayers */
{"activeLayer",
(getter)RenderData_getActiveLayer, (setter)RenderData_setActiveLayer,
"Active rendering layer",
NULL},
-
+ {"renderLayers",
+ (getter)RenderData_getRenderLayers, (setter)NULL,
+ "Active rendering layer",
+ NULL},
+
{"halfFloat",
(getter)RenderData_getSubImTypeBits, (setter)RenderData_setSubImTypeBits,
"'Half' openexr option enabled",
@@ -2960,6 +3032,11 @@
"(int) - get/set specify old map value in frames"},
{"newMapValue", ( PyCFunction ) RenderData_NewMapValue, METH_VARARGS,
"(int) - get/set specify new map value in frames"},
+ /* renderlayers */
+ {"addRenderLayer", ( PyCFunction ) RenderData_addRenderLayer, METH_VARARGS,
+ "(string) - add a new render layer"},
+ {"removeRenderLayer", ( PyCFunction ) RenderData_removeRenderLayer, METH_O,
+ "(renderLayer) - remove a render layer from this scene"},
{NULL, NULL, 0, NULL}
};
@@ -3046,7 +3123,470 @@
NULL
};
+
+
+
+/* render layers */
+
+static PyObject *RenderLayer_repr( BPy_RenderLayer * self )
+{
+ if( self->renderLayer )
+ return PyString_FromFormat( "[RenderLayer \"%s\"]",
+ self->renderLayer->name );
+ else
+ return PyString_FromString( "NULL" );
+}
+
+static PyObject *RenderLayer_getName( BPy_RenderLayer * self )
+{
+ if( !self->renderLayer )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+
+ return PyString_FromString( self->renderLayer->name );
+}
+
+static int RenderLayer_setName( BPy_RenderLayer * self, PyObject *value )
+{
+ char *name = NULL;
+ int index = BLI_findindex(&self->scene->r.layers, self->renderLayer);
+
+ if( !self->renderLayer )
+ return EXPP_ReturnIntError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+
+ name = PyString_AsString ( value );
+ if( !name )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected string argument" );
+
+ /* No check for doubles? - blender dosnt so we dont have to! */
+ BLI_strncpy( self->renderLayer->name, name, sizeof( self->renderLayer->name ) );
+
+ if(self->scene->nodetree) {
+ bNode *node;
+ for(node= self->scene->nodetree->nodes.first; node; node= node->next) {
+ if(node->type==CMP_NODE_R_LAYERS && node->id==NULL) {
+ if(node->custom1==index)
+ BLI_strncpy(node->name, self->renderLayer->name, NODE_MAXSTR);
+ }
+ }
+ }
+
+ return 0;
+}
+
+static PyObject *RenderLayer_getLightGroup( BPy_RenderLayer * self )
+{
+ if( !self->renderLayer )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+ return Group_CreatePyObject( self->renderLayer->light_override );
+}
+static int RenderLayer_setLightGroup( BPy_RenderLayer * self, PyObject * value )
+{
+ if( !self->renderLayer )
+ return EXPP_ReturnIntError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+ return GenericLib_assignData(value, (void **) &self->renderLayer->light_override, NULL, 1, ID_GR, 0);
+}
+
+
+/*****************************************************************************/
+/* Python BPy_Render getsetattr funcs: */
+/*****************************************************************************/
+static int RenderLayer_setLayers( BPy_RenderLayer * self, PyObject * value, void *zlay )
+{
+ unsigned int laymask = 0;
+
+ if( !self->renderLayer )
+ return EXPP_ReturnIntError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+
+ if( !PyInt_Check( value ) )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected an integer (bitmask) as argument" );
+
+ laymask = ( unsigned int )PyInt_AS_LONG( value );
+
+ if( laymask <= 0 )
+ return EXPP_ReturnIntError( PyExc_ValueError,
+ "layer value cannot be zero or below" );
+
+ if (zlay) {
+ self->renderLayer->lay_zmask= laymask & ((1<<20) - 1);
+ } else {
+ self->renderLayer->lay= laymask & ((1<<20) - 1);
+ }
+ return 0;
+}
+
+static PyObject *RenderLayer_getLayers( BPy_RenderLayer * self, void *zlay )
+{
+ if (zlay) {
+ return PyInt_FromLong( self->renderLayer->lay_zmask );
+ } else {
+ return PyInt_FromLong( self->renderLayer->lay );
+ }
+}
+
+static PyObject *RenderLayer_getLayflagBits( BPy_RenderLayer *self, void *type )
+{
+ int itype = (int)type;
+ if( !self->renderLayer )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+
+ /* use negative numbers to flip truth */
+ if (self->renderLayer->lay & itype) Py_RETURN_TRUE;
+ else Py_RETURN_FALSE;
+}
+
+static int RenderLayer_setLayflagBits( BPy_RenderLayer *self, PyObject *value,
+ void *type )
+{
+ /* use negative numbers to flip truth */
+ int param = PyObject_IsTrue( value );
+
+ if( !self->renderLayer )
+ return EXPP_ReturnIntError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+
+ if( param == -1 )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected True/False or 0/1" );
+
+ if (param) {
+ self->renderLayer->lay |= (int)type;
+ } else {
+ self->renderLayer->lay &= ~(int)type;
+ }
+ return 0;
+}
+
+static PyObject *RenderLayer_getPassBits( BPy_RenderLayer *self, void *type )
+{
+ int itype = (int)type;
+ if( !self->renderLayer )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+
+ /* use negative numbers to flip truth */
+ if (self->renderLayer->passflag & itype) Py_RETURN_TRUE;
+ else Py_RETURN_FALSE;
+}
+
+static int RenderLayer_setPassBits( BPy_RenderLayer *self, PyObject *value,
+ void *type )
+{
+ /* use negative numbers to flip truth */
+ int param = PyObject_IsTrue( value );
+
+ if( !self->renderLayer )
+ return EXPP_ReturnIntError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+
+ if( param == -1 )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected True/False or 0/1" );
+
+ if (param) {
+ self->renderLayer->passflag |= ((int)type);
+ } else {
+ self->renderLayer->passflag &= ~((int)type);
+ }
+ return 0;
+}
+
+static PyObject *RenderLayer_getPassXorBits( BPy_RenderLayer *self, void *type )
+{
+ if( !self->renderLayer )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+
+ /* use negative numbers to flip truth */
+ if (self->renderLayer->pass_xor & (int)type) Py_RETURN_TRUE;
+ else Py_RETURN_FALSE;
+}
+
+static int RenderLayer_setPassXorBits( BPy_RenderLayer *self, PyObject *value,
+ void *type )
+{
+ int param = PyObject_IsTrue( value );
+
+ if( !self->renderLayer )
+ return EXPP_ReturnIntError( PyExc_RuntimeError,
+ "This render layer has been removed!" );
+
+ if( param == -1 )
+ return EXPP_ReturnIntError( PyExc_TypeError,
+ "expected True/False or 0/1" );
+
+ if (param) {
+ self->renderLayer->passflag |= (int)type;
+ } else {
+ self->renderLayer->passflag &= ~(int)type;
+ }
+ return 0;
+}
+
/***************************************************************************/
+/* BPy_RenderData attribute def */
+/***************************************************************************/
+static PyGetSetDef BPy_RenderLayer_getseters[] = {
+ {"name",
+ (getter)RenderLayer_getName, (setter)RenderLayer_setName,
+ "",
+ (void *)NULL},
+ {"lightGroup",
+ (getter)RenderLayer_getLightGroup, (setter)RenderLayer_setLightGroup,
+ "",
+ (void *)NULL},
+ /*{"material",
+ (getter)RenderLayer_getMaterial, (setter)RenderLayer_setMaterial,
+ "",
+ (void *)NULL},*/
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list