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 
+...@type CHILDTYPE: readonly dictionary
+...@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():


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to