forked from bartvdbraak/blender
[#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..."
This commit is contained in:
parent
fcc23faa3a
commit
655177aebd
@ -134,6 +134,24 @@ static PyObject *Part_getRenderStep( BPy_PartSys * self );
|
|||||||
static PyObject *Part_getDupOb( BPy_PartSys * self );
|
static PyObject *Part_getDupOb( BPy_PartSys * self );
|
||||||
static PyObject *Part_getDrawAs( BPy_PartSys * self );
|
static PyObject *Part_getDrawAs( BPy_PartSys * self );
|
||||||
static PyObject *Part_GetAge( BPy_PartSys * self, PyObject * args );
|
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: */
|
/* Python Effect_Type callback function prototypes: */
|
||||||
@ -316,6 +334,43 @@ static PyGetSetDef BPy_ParticleSys_getseters[] = {
|
|||||||
(getter)Part_getDrawAs, NULL,
|
(getter)Part_getDrawAs, NULL,
|
||||||
"Get draw type Particle.DRAWAS([ 'NONE' | 'OBJECT' | 'POINT' | ... ] )",
|
"Get draw type Particle.DRAWAS([ 'NONE' | 'OBJECT' | 'POINT' | ... ] )",
|
||||||
NULL},
|
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 */
|
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -710,6 +765,26 @@ static PyObject *Particle_ReactOnDict( void )
|
|||||||
return ReactOn;
|
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 )
|
static PyObject *Particle_DrawAs( void )
|
||||||
{
|
{
|
||||||
PyObject *DrawAs = PyConstant_New( );
|
PyObject *DrawAs = PyConstant_New( );
|
||||||
@ -756,6 +831,8 @@ PyObject *ParticleSys_Init( void ){
|
|||||||
PyObject *EmitFrom;
|
PyObject *EmitFrom;
|
||||||
PyObject *Dist;
|
PyObject *Dist;
|
||||||
PyObject *DrawAs;
|
PyObject *DrawAs;
|
||||||
|
PyObject *ChildTypes;
|
||||||
|
|
||||||
|
|
||||||
if( PyType_Ready( &ParticleSys_Type ) < 0)
|
if( PyType_Ready( &ParticleSys_Type ) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -765,6 +842,7 @@ PyObject *ParticleSys_Init( void ){
|
|||||||
EmitFrom = Particle_EmitFrom();
|
EmitFrom = Particle_EmitFrom();
|
||||||
DrawAs = Particle_DrawAs();
|
DrawAs = Particle_DrawAs();
|
||||||
Dist = Particle_DistrDict();
|
Dist = Particle_DistrDict();
|
||||||
|
ChildTypes = Particle_ChildTypeDict();
|
||||||
|
|
||||||
submodule = Py_InitModule3( "Blender.Particle",
|
submodule = Py_InitModule3( "Blender.Particle",
|
||||||
M_ParticleSys_methods, M_ParticleSys_doc );
|
M_ParticleSys_methods, M_ParticleSys_doc );
|
||||||
@ -779,6 +857,8 @@ PyObject *ParticleSys_Init( void ){
|
|||||||
PyModule_AddObject( submodule, "DISTRIBUTION", Dist );
|
PyModule_AddObject( submodule, "DISTRIBUTION", Dist );
|
||||||
if( DrawAs )
|
if( DrawAs )
|
||||||
PyModule_AddObject( submodule, "DRAWAS", DrawAs );
|
PyModule_AddObject( submodule, "DRAWAS", DrawAs );
|
||||||
|
if( ChildTypes )
|
||||||
|
PyModule_AddObject( submodule, "CHILDTYPE", ChildTypes );
|
||||||
|
|
||||||
return ( submodule );
|
return ( submodule );
|
||||||
}
|
}
|
||||||
@ -2010,3 +2090,138 @@ static PyObject *Part_getDrawAs( BPy_PartSys * self )
|
|||||||
{
|
{
|
||||||
return PyInt_FromLong( (long)( self->psys->part->draw_as ) );
|
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 )) );
|
||||||
|
}
|
||||||
|
@ -42,6 +42,11 @@ This module provides access to the B{Particle} in Blender.
|
|||||||
- OBJECT: Draw object
|
- OBJECT: Draw object
|
||||||
- GROUP: Draw goup
|
- GROUP: Draw goup
|
||||||
- BILLBOARD: Draw as billboard
|
- 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:
|
class Particle:
|
||||||
@ -118,6 +123,24 @@ class Particle:
|
|||||||
@type duplicateObject: Blender Object
|
@type duplicateObject: Blender Object
|
||||||
@ivar drawAs: Get draw type Particle.DRAWAS([ 'NONE' | 'OBJECT' | 'POINT' | ... ]).
|
@ivar drawAs: Get draw type Particle.DRAWAS([ 'NONE' | 'OBJECT' | 'POINT' | ... ]).
|
||||||
@type drawAs: int
|
@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():
|
def freeEdit():
|
||||||
|
Loading…
Reference in New Issue
Block a user