[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15301] branches/soc-2008-unclezeiv/source /blender/python/api2_2x: Python API: added "samplingMethod" attribute to Lamp.

Davide Vercelli davide.vercelli at gmail.com
Sun Jun 22 01:57:20 CEST 2008


Revision: 15301
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15301
Author:   unclezeiv
Date:     2008-06-22 01:55:54 +0200 (Sun, 22 Jun 2008)

Log Message:
-----------
Python API: added "samplingMethod" attribute to Lamp. This allows to change it to "constant" or "QMC adaptive/halton" or "QMC constant/hammersley".

I'm not sure if it makes sense to add this to trunk, but I added a SamplingMethods dict and updated docs as well, just in case.

Modified Paths:
--------------
    branches/soc-2008-unclezeiv/source/blender/python/api2_2x/Lamp.c
    branches/soc-2008-unclezeiv/source/blender/python/api2_2x/doc/Lamp.py

Modified: branches/soc-2008-unclezeiv/source/blender/python/api2_2x/Lamp.c
===================================================================
--- branches/soc-2008-unclezeiv/source/blender/python/api2_2x/Lamp.c	2008-06-21 23:00:26 UTC (rev 15300)
+++ branches/soc-2008-unclezeiv/source/blender/python/api2_2x/Lamp.c	2008-06-21 23:55:54 UTC (rev 15301)
@@ -118,6 +118,8 @@
 #define EXPP_LAMP_COL_MAX 1.0
 #define EXPP_LAMP_FALLOFF_MIN LA_FALLOFF_CONSTANT
 #define EXPP_LAMP_FALLOFF_MAX LA_FALLOFF_SLIDERS
+#define EXPP_LAMP_SAMPLINGMETHOD_MIN LA_SAMP_CONSTANT
+#define EXPP_LAMP_SAMPLINGMETHOD_MAX LA_SAMP_HAMMERSLEY
 
 /* Raytracing settings */
 #define EXPP_LAMP_RAYSAMPLES_MIN 1
@@ -184,6 +186,7 @@
 static PyObject *Lamp_getMode( BPy_Lamp * self );
 static PyObject *Lamp_getModesConst( void );
 static PyObject *Lamp_getSamples( BPy_Lamp * self );
+static PyObject *Lamp_getSamplingMethod( BPy_Lamp * self );
 static PyObject *Lamp_getRaySamplesX( BPy_Lamp * self );
 static PyObject *Lamp_getRaySamplesY( BPy_Lamp * self );
 static PyObject *Lamp_getAreaSizeX( BPy_Lamp * self );
@@ -233,6 +236,7 @@
 static int Lamp_setType( BPy_Lamp * self, PyObject * args );
 static int Lamp_setMode( BPy_Lamp * self, PyObject * args );
 static int Lamp_setSamples( BPy_Lamp * self, PyObject * args );
+static int Lamp_setSamplingMethod( BPy_Lamp * self, PyObject * args );
 static int Lamp_setRaySamplesX( BPy_Lamp * self, PyObject * args );
 static int Lamp_setRaySamplesY( BPy_Lamp * self, PyObject * args );
 static int Lamp_setAreaSizeX( BPy_Lamp * self, PyObject * args );
@@ -263,7 +267,7 @@
 /*****************************************************************************/
 static PyMethodDef BPy_Lamp_methods[] = {
 	/* name, method, flags, doc */
-	
+
 	{"getType", ( PyCFunction ) Lamp_getType, METH_NOARGS,
 	 "() - return Lamp type - 'Lamp':0, 'Sun':1, 'Spot':2, 'Hemi':3, 'Area':4, 'Photon':5"},
 	{"getMode", ( PyCFunction ) Lamp_getMode, METH_NOARGS,
@@ -438,6 +442,10 @@
 	 (getter)Lamp_getSamples, (setter)Lamp_setSamples,
 	 "Lamp shadow map samples",
 	 NULL},
+	{"samplingMethod",
+	 (getter)Lamp_getSamplingMethod, (setter)Lamp_setSamplingMethod,
+	 "Lamp raytracing sampling method",
+	 NULL},
 	{"raySamplesX",
 	 (getter)Lamp_getRaySamplesX, (setter)Lamp_setRaySamplesX,
 	 "Lamp raytracing samples on the X axis",
@@ -807,13 +815,31 @@
 	return Falloffs;
 }
 
+static PyObject *Lamp_SamplingMethodsDict( void )
+{			/* create the Blender.Lamp.SamplingMethods constant dict */
+	PyObject *SamplingMethods = PyConstant_New(  );
+
+	if( SamplingMethods ) {
+		BPy_constant *c = ( BPy_constant * ) SamplingMethods;
+
+		PyConstant_Insert( c, "CONSTANT",
+				 PyInt_FromLong( LA_SAMP_CONSTANT ) );
+		PyConstant_Insert( c, "QMC_ADAPTIVE",
+				 PyInt_FromLong( LA_SAMP_HALTON ) );
+		PyConstant_Insert( c, "QMC_CONSTANT",
+				 PyInt_FromLong( LA_SAMP_HAMMERSLEY ) );
+	}
+
+	return SamplingMethods;
+}
+
 /*****************************************************************************/
 /* Function:              Lamp_Init                                          */
 /*****************************************************************************/
 /* Needed by the Blender module, to register the Blender.Lamp submodule */
 PyObject *Lamp_Init( void )
 {
-	PyObject *submodule, *Types, *Modes, *Falloffs;
+	PyObject *submodule, *Types, *Modes, *Falloffs, *SamplingMethods;
 
 	if( PyType_Ready( &Lamp_Type ) < 0)
 		return NULL;
@@ -821,6 +847,7 @@
 	Types = Lamp_TypesDict(  );
 	Modes = Lamp_ModesDict(  );
 	Falloffs = Lamp_FalloffsDict(  );
+	SamplingMethods = Lamp_SamplingMethodsDict(  );
 
 	submodule =
 		Py_InitModule3( "Blender.Lamp", M_Lamp_methods, M_Lamp_doc );
@@ -831,6 +858,8 @@
 		PyModule_AddObject( submodule, "Modes", Modes );
 	if( Falloffs )
 		PyModule_AddObject( submodule, "Falloffs", Falloffs );
+	if( SamplingMethods )
+		PyModule_AddObject( submodule, "SamplingMethods", SamplingMethods );
 
 	PyModule_AddIntConstant( submodule, "RGB",      IPOKEY_RGB );
 	PyModule_AddIntConstant( submodule, "ENERGY",   IPOKEY_ENERGY );
@@ -908,6 +937,11 @@
 	return PyInt_FromLong( self->lamp->samp );
 }
 
+static PyObject *Lamp_getSamplingMethod( BPy_Lamp * self )
+{
+	return PyInt_FromLong( self->lamp->ray_samp_method );
+}
+
 static PyObject *Lamp_getRaySamplesX( BPy_Lamp * self )
 {
 	return PyInt_FromLong( self->lamp->ray_samp );
@@ -1047,6 +1081,12 @@
 								EXPP_LAMP_SAMPLES_MAX, 'h' );
 }
 
+static int Lamp_setSamplingMethod( BPy_Lamp * self, PyObject * value )
+{
+	return EXPP_setIValueClamped ( value, &self->lamp->ray_samp_method,
+								EXPP_LAMP_SAMPLINGMETHOD_MIN,
+								EXPP_LAMP_SAMPLINGMETHOD_MAX, 'h' );
+}
 
 static int Lamp_setRaySamplesX( BPy_Lamp * self, PyObject * value )
 {

Modified: branches/soc-2008-unclezeiv/source/blender/python/api2_2x/doc/Lamp.py
===================================================================
--- branches/soc-2008-unclezeiv/source/blender/python/api2_2x/doc/Lamp.py	2008-06-21 23:00:26 UTC (rev 15300)
+++ branches/soc-2008-unclezeiv/source/blender/python/api2_2x/doc/Lamp.py	2008-06-21 23:55:54 UTC (rev 15301)
@@ -56,6 +56,11 @@
 				if lamp.type == Lamp.Types["Spot"]:  # Lamp type is not a flag
 					lamp.mode &= ~Lamp.Modes["RayShadow"] # Disable RayShadow.
 					lamp.mode |= Lamp.Modes["Shadows"]    # Enable Shadowbuffer shadows
+ at type SamplingMethods: read-only dictionary
+ at var SamplingMethods: Ray tracing sampling methods.
+	- CONSTANT = 0
+	- QMC_ADAPTIVE = 1
+	- QMC_CONSTANT = 2
 """
 
 def New (type = 'Lamp', name = 'LampData'):
@@ -136,6 +141,8 @@
 	@ivar samples:  Lamp shadow map samples.
 	Value is clamped to the range [1,16].
 	@type samples:  int
+	@ivar samplingMethod:  Lamp shadow map samples. See L{SamplingMethods} for values.
+	@type samplingMethod:  int
 	@ivar raySamplesX:  Lamp raytracing X samples (X is used for the Y axis with square area lamps).
 	Value is clamped to the range [1,16].
 	@type raySamplesX:  int





More information about the Bf-blender-cvs mailing list