[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19498] trunk/blender/source/blender/ python/api2_2x: [#18452] Particle children API for python.

Campbell Barton ideasman42 at gmail.com
Thu Apr 2 08:39:09 CEST 2009


Revision: 19498
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19498
Author:   campbellbarton
Date:     2009-04-02 08:39:09 +0200 (Thu, 02 Apr 2009)

Log Message:
-----------
[#18452] Particle children API for python.
from Alberto Santos (dnakhain)

"This patch adds a few new variables relationated with Particle System children such as children amount, render amount,
child clumping..."

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/Particle.c
    trunk/blender/source/blender/python/api2_2x/doc/Particle.py

Modified: trunk/blender/source/blender/python/api2_2x/Particle.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Particle.c	2009-04-02 05:38:05 UTC (rev 19497)
+++ trunk/blender/source/blender/python/api2_2x/Particle.c	2009-04-02 06:39:09 UTC (rev 19498)
@@ -134,6 +134,24 @@
 static PyObject *Part_getDupOb( BPy_PartSys * self );
 static PyObject *Part_getDrawAs( BPy_PartSys * self );
 static PyObject *Part_GetAge( BPy_PartSys * self, PyObject * args );
+static int Part_setChildAmount( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getChildAmount( BPy_PartSys * self );
+static int Part_setChildType( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getChildType( BPy_PartSys * self );
+static int Part_setChildRenderAmount( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getChildRenderAmount( BPy_PartSys * self );
+static int Part_setChildRadius( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getChildRadius( BPy_PartSys * self );
+static int Part_setChildRoundness( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getChildRoundness( BPy_PartSys * self );
+static int Part_setChildClumping( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getChildClumping( BPy_PartSys * self );
+static int Part_setChildShape( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getChildShape( BPy_PartSys * self );
+static int Part_setChildSize( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getChildSize( BPy_PartSys * self );
+static int Part_setChildRandom( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getChildRandom( BPy_PartSys * self );
 
 /*****************************************************************************/
 /* Python Effect_Type callback function prototypes:                           */
@@ -316,6 +334,43 @@
 	 (getter)Part_getDrawAs, NULL,
 	 "Get draw type Particle.DRAWAS([ 'NONE' | 'OBJECT' | 'POINT' | ... ] )",
 	 NULL},
+/* Children */
+	{"childAmount",
+	 (getter)Part_getChildAmount, (setter)Part_setChildAmount,
+	 "The total number of children",
+	 NULL},
+	 {"childType",
+	 (getter)Part_getChildType, (setter)Part_setChildType,
+	 "Type of childrens ( Particle.CHILDTYPE[ 'FACES' | 'PARTICLES' | 'NONE' ] )",
+	 NULL},
+	 {"childRenderAmount",
+	 (getter)Part_getChildRenderAmount, (setter)Part_setChildRenderAmount,
+	 "Amount of children/parent for rendering",
+	 NULL},
+	 {"childRadius",
+	 (getter)Part_getChildRadius, (setter)Part_setChildRadius,
+	 "Radius of children around parent",
+	 NULL},
+	 {"childRound",
+	 (getter)Part_getChildRoundness, (setter)Part_setChildRoundness,
+	 "Roundness of children around parent",
+	 NULL},
+	 {"childClump",
+	 (getter)Part_getChildClumping, (setter)Part_setChildClumping,
+	 "Amount of clumpimg",
+	 NULL},
+	 {"childShape",
+	 (getter)Part_getChildShape, (setter)Part_setChildShape,
+	 "Shape of clumpimg",
+	 NULL},
+	 {"childSize",
+	 (getter)Part_getChildSize, (setter)Part_setChildSize,
+	 "A multiplier for the child particle size",
+	 NULL},
+	 {"childRand",
+	 (getter)Part_getChildRandom, (setter)Part_setChildRandom,
+	 "Random variation to the size of the child particles",
+	 NULL},
 	{NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
 };
 
@@ -710,6 +765,26 @@
 	return ReactOn;
 }
 
+
+/* create the Blender.Particle.ChildType constant dict */
+
+static PyObject *Particle_ChildTypeDict( void )
+{
+	PyObject *ChildTypes = PyConstant_New(  );
+
+	if( ChildTypes ) {
+		BPy_constant *c = ( BPy_constant * ) ChildTypes;
+
+		PyConstant_Insert( c, "FACES",
+				 PyInt_FromLong( 2 ) );
+		PyConstant_Insert( c, "PARTICLES",
+				 PyInt_FromLong( 1 ) );
+		PyConstant_Insert( c, "NONE",
+				 PyInt_FromLong( 0 ) );
+	}
+	return ChildTypes;
+}
+
 static PyObject *Particle_DrawAs( void )
 {
 	PyObject *DrawAs = PyConstant_New(  );
@@ -756,7 +831,9 @@
 	PyObject *EmitFrom;
 	PyObject *Dist;
 	PyObject *DrawAs;
+	PyObject *ChildTypes;
 
+
 	if( PyType_Ready( &ParticleSys_Type ) < 0)
 		return NULL;
 
@@ -765,6 +842,7 @@
 	EmitFrom = Particle_EmitFrom();
 	DrawAs = Particle_DrawAs();
 	Dist = Particle_DistrDict();
+	ChildTypes = Particle_ChildTypeDict();
 
 	submodule = Py_InitModule3( "Blender.Particle", 
 								M_ParticleSys_methods, M_ParticleSys_doc );
@@ -779,6 +857,8 @@
 		PyModule_AddObject( submodule, "DISTRIBUTION", Dist );
 	if( DrawAs )
 		PyModule_AddObject( submodule, "DRAWAS", DrawAs );
+	if( ChildTypes )
+		PyModule_AddObject( submodule, "CHILDTYPE", ChildTypes );
 
 	return ( submodule );
 }
@@ -2010,3 +2090,138 @@
 {
 	return PyInt_FromLong( (long)( self->psys->part->draw_as ) );
 }
+
+static int Part_setChildAmount( BPy_PartSys * self, PyObject * args )
+{
+	int res = EXPP_setIValueRange( args, &self->psys->part->child_nbr,
+			0, MAX_PART_CHILDREN, 'i' );
+
+	psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
+
+	return res;
+}
+
+static PyObject *Part_getChildAmount( BPy_PartSys * self )
+{
+	return PyInt_FromLong( ((int)( self->psys->part->child_nbr )) );
+}
+
+static int Part_setChildType( BPy_PartSys * self, PyObject * args )
+{
+	int res = EXPP_setIValueRange( args, &self->psys->part->childtype,
+			0, 2, 'h' );
+
+	psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
+
+	return res;
+}
+
+static PyObject *Part_getChildType( BPy_PartSys * self )
+{
+	return PyInt_FromLong( (short)( self->psys->part->childtype ) );
+}
+
+static int Part_setChildRenderAmount( BPy_PartSys * self, PyObject * args )
+{
+	int res = EXPP_setIValueRange( args, &self->psys->part->ren_child_nbr,
+			0, MAX_PART_CHILDREN, 'i' );
+
+	psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
+
+	return res;
+}
+
+static PyObject *Part_getChildRenderAmount( BPy_PartSys * self )
+{
+	return PyInt_FromLong( ((int)( self->psys->part->ren_child_nbr )) );
+}
+
+static int Part_setChildRadius( BPy_PartSys * self, PyObject * args )
+{
+	int res = EXPP_setFloatRange( args, &self->psys->part->childrad,
+			0.0, 10.0 );
+
+	psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
+
+	return res;
+}
+
+static PyObject *Part_getChildRadius( BPy_PartSys * self )
+{
+	return PyFloat_FromDouble( ((float)( self->psys->part->childrad )) );
+}
+
+static int Part_setChildRoundness( BPy_PartSys * self, PyObject * args )
+{
+	int res = EXPP_setFloatRange( args, &self->psys->part->childflat,
+			0.0, 1.0 );
+
+	psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
+
+	return res;
+}
+
+static PyObject *Part_getChildRoundness( BPy_PartSys * self )
+{
+	return PyFloat_FromDouble( ((float)( self->psys->part->childflat )) );
+}
+
+static int Part_setChildClumping( BPy_PartSys * self, PyObject * args )
+{
+	int res = EXPP_setFloatRange( args, &self->psys->part->clumpfac,
+			-1.0, 1.0 );
+
+	psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
+
+	return res;
+}
+
+static PyObject *Part_getChildClumping( BPy_PartSys * self )
+{
+	return PyFloat_FromDouble( ((float)( self->psys->part->clumpfac )) );
+}
+
+static int Part_setChildShape( BPy_PartSys * self, PyObject * args )
+{
+	int res = EXPP_setFloatRange( args, &self->psys->part->clumppow,
+			-0.999, 0.999 );
+
+	psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
+
+	return res;
+}
+
+static PyObject *Part_getChildShape( BPy_PartSys * self )
+{
+	return PyFloat_FromDouble( ((float)( self->psys->part->clumppow )) );
+}
+
+static int Part_setChildSize( BPy_PartSys * self, PyObject * args )
+{
+	int res = EXPP_setFloatRange( args, &self->psys->part->childsize,
+			0.01, 100.0 );
+
+	psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
+
+	return res;
+}
+
+static PyObject *Part_getChildSize( BPy_PartSys * self )
+{
+	return PyFloat_FromDouble( ((float)( self->psys->part->childsize )) );
+}
+
+static int Part_setChildRandom( BPy_PartSys * self, PyObject * args )
+{
+	int res = EXPP_setFloatRange( args, &self->psys->part->childrandsize,
+			0.0, 1.0 );
+
+	psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
+
+	return res;
+}
+
+static PyObject *Part_getChildRandom( BPy_PartSys * self )
+{
+	return PyFloat_FromDouble( ((float)( self->psys->part->childrandsize )) );
+}

Modified: trunk/blender/source/blender/python/api2_2x/doc/Particle.py
===================================================================
--- trunk/blender/source/blender/python/api2_2x/doc/Particle.py	2009-04-02 05:38:05 UTC (rev 19497)
+++ trunk/blender/source/blender/python/api2_2x/doc/Particle.py	2009-04-02 06:39:09 UTC (rev 19498)
@@ -42,6 +42,11 @@
 		- OBJECT: Draw object
 		- GROUP: Draw goup
 		- BILLBOARD: Draw as billboard 
+ at type CHILDTYPE: readonly dictionary
+ at var CHILDTYPE: Constant dict used for whith L{Particle.CHILDTYPE}
+		- NONE: set no children
+		- PARTICLES: set children born from particles
+		- FACES: set children born from faces
 """
 
 class Particle:
@@ -118,6 +123,24 @@
 	@type duplicateObject: Blender Object
 	@ivar drawAs: Get draw type Particle.DRAWAS([ 'NONE' | 'OBJECT' | 'POINT' | ... ]).
 	@type drawAs: int
+	@ivar childAmount: The total number of children
+	@type childAmount: int
+	@ivar childType: Type of childrens ( Particle.CHILDTYPE[ 'FACES' | 'PARTICLES' | 'NONE' ] )
+	@type childType: int
+	@ivar childRenderAmount: Amount of children/parent for rendering
+	@type childRenderAmount: int
+	@ivar childRadius: Radius of children around parent
+	@type childRadius: float
+	@ivar childRound: Roundness of children around parent
+	@type childRound: float
+	@ivar childClump: Amount of clumpimg
+	@type childClump: float
+	@ivar childShape: Shape of clumpimg
+	@type childShape: float
+	@ivar childSize: A multiplier for the child particle size
+	@type childSize: float
+	@ivar childRand: Random variation to the size of the child particles
+	@type childRand: float
 	"""
 	
 	def freeEdit():





More information about the Bf-blender-cvs mailing list