2008-08-01 02:15:25 +00:00
# include "BPy_FrsNoise.h"
2008-07-26 21:47:39 +00:00
2009-03-29 21:50:10 +00:00
# include <sstream>
2008-07-26 21:47:39 +00:00
# ifdef __cplusplus
extern " C " {
# endif
///////////////////////////////////////////////////////////////////////////////////////////
2008-08-01 02:15:25 +00:00
/*--------------- Python API function prototypes for FrsNoise instance -----------*/
static int FrsNoise___init__ ( BPy_FrsNoise * self , PyObject * args , PyObject * kwds ) ;
static void FrsNoise___dealloc__ ( BPy_FrsNoise * self ) ;
static PyObject * FrsNoise___repr__ ( BPy_FrsNoise * self ) ;
static PyObject * FrsNoise_turbulence1 ( BPy_FrsNoise * self , PyObject * args ) ;
static PyObject * FrsNoise_turbulence2 ( BPy_FrsNoise * self , PyObject * args ) ;
static PyObject * FrsNoise_turbulence3 ( BPy_FrsNoise * self , PyObject * args ) ;
static PyObject * FrsNoise_smoothNoise1 ( BPy_FrsNoise * self , PyObject * args ) ;
static PyObject * FrsNoise_smoothNoise2 ( BPy_FrsNoise * self , PyObject * args ) ;
static PyObject * FrsNoise_smoothNoise3 ( BPy_FrsNoise * self , PyObject * args ) ;
/*----------------------FrsNoise instance definitions ----------------------------*/
static PyMethodDef BPy_FrsNoise_methods [ ] = {
{ " turbulence1 " , ( PyCFunction ) FrsNoise_turbulence1 , METH_VARARGS , " (float arg, float freq, float amp, unsigned oct=4)) Returns a noise value for a 1D element " } ,
{ " turbulence2 " , ( PyCFunction ) FrsNoise_turbulence2 , METH_VARARGS , " ([x, y], float freq, float amp, unsigned oct=4)) ) Returns a noise value for a 2D element " } ,
{ " turbulence3 " , ( PyCFunction ) FrsNoise_turbulence3 , METH_VARARGS , " ([x, y, z], float freq, float amp, unsigned oct=4)) ) Returns a noise value for a 3D element " } ,
{ " smoothNoise1 " , ( PyCFunction ) FrsNoise_smoothNoise1 , METH_VARARGS , " (float arg)) Returns a smooth noise value for a 1D element " } ,
{ " smoothNoise2 " , ( PyCFunction ) FrsNoise_smoothNoise2 , METH_VARARGS , " ([x, y])) Returns a smooth noise value for a 2D element " } ,
{ " smoothNoise3 " , ( PyCFunction ) FrsNoise_smoothNoise3 , METH_VARARGS , " ([x, y, z)) Returns a smooth noise value for a 3D element " } ,
2008-07-26 21:47:39 +00:00
{ NULL , NULL , 0 , NULL }
} ;
2008-08-01 02:15:25 +00:00
/*-----------------------BPy_FrsNoise type definition ------------------------------*/
2008-07-26 21:47:39 +00:00
2008-08-01 02:15:25 +00:00
PyTypeObject FrsNoise_Type = {
2008-07-26 21:47:39 +00:00
PyObject_HEAD_INIT ( NULL )
0 , /* ob_size */
2008-08-01 02:15:25 +00:00
" FrsNoise " , /* tp_name */
sizeof ( BPy_FrsNoise ) , /* tp_basicsize */
2008-07-26 21:47:39 +00:00
0 , /* tp_itemsize */
/* methods */
2008-08-01 02:15:25 +00:00
( destructor ) FrsNoise___dealloc__ , /* tp_dealloc */
2008-07-26 21:47:39 +00:00
NULL , /* printfunc tp_print; */
NULL , /* getattrfunc tp_getattr; */
NULL , /* setattrfunc tp_setattr; */
NULL , /* tp_compare */
2008-08-01 02:15:25 +00:00
( reprfunc ) FrsNoise___repr__ , /* tp_repr */
2008-07-26 21:47:39 +00:00
/* Method suites for standard classes */
NULL , /* PyNumberMethods *tp_as_number; */
NULL , /* PySequenceMethods *tp_as_sequence; */
NULL , /* PyMappingMethods *tp_as_mapping; */
/* More standard operations (here for binary compatibility) */
NULL , /* hashfunc tp_hash; */
NULL , /* ternaryfunc tp_call; */
NULL , /* reprfunc tp_str; */
NULL , /* getattrofunc tp_getattro; */
NULL , /* setattrofunc tp_setattro; */
/* Functions to access object as input/output buffer */
NULL , /* PyBufferProcs *tp_as_buffer; */
/*** Flags to define presence of optional/expanded features ***/
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE , /* long tp_flags; */
NULL , /* char *tp_doc; Documentation string */
/*** Assigned meaning in release 2.0 ***/
/* call function for all accessible objects */
NULL , /* traverseproc tp_traverse; */
/* delete references to contained objects */
NULL , /* inquiry tp_clear; */
/*** Assigned meaning in release 2.1 ***/
/*** rich comparisons ***/
NULL , /* richcmpfunc tp_richcompare; */
/*** weak reference enabler ***/
0 , /* long tp_weaklistoffset; */
/*** Added in release 2.2 ***/
/* Iterators */
NULL , /* getiterfunc tp_iter; */
NULL , /* iternextfunc tp_iternext; */
/*** Attribute descriptor and subclassing stuff ***/
2008-08-01 02:15:25 +00:00
BPy_FrsNoise_methods , /* struct PyMethodDef *tp_methods; */
2008-07-26 21:47:39 +00:00
NULL , /* struct PyMemberDef *tp_members; */
NULL , /* struct PyGetSetDef *tp_getset; */
NULL , /* struct _typeobject *tp_base; */
NULL , /* PyObject *tp_dict; */
NULL , /* descrgetfunc tp_descr_get; */
NULL , /* descrsetfunc tp_descr_set; */
0 , /* long tp_dictoffset; */
2008-08-01 02:15:25 +00:00
( initproc ) FrsNoise___init__ , /* initproc tp_init; */
2008-07-26 21:47:39 +00:00
NULL , /* allocfunc tp_alloc; */
PyType_GenericNew , /* newfunc tp_new; */
/* Low-level free-memory routine */
NULL , /* freefunc tp_free; */
/* For PyObject_IS_GC */
NULL , /* inquiry tp_is_gc; */
NULL , /* PyObject *tp_bases; */
/* method resolution order */
NULL , /* PyObject *tp_mro; */
NULL , /* PyObject *tp_cache; */
NULL , /* PyObject *tp_subclasses; */
NULL , /* PyObject *tp_weaklist; */
NULL
} ;
//-------------------MODULE INITIALIZATION--------------------------------
2008-08-01 02:15:25 +00:00
PyMODINIT_FUNC FrsNoise_Init ( PyObject * module )
2008-07-26 21:47:39 +00:00
{
if ( module = = NULL )
return ;
2008-08-01 02:15:25 +00:00
if ( PyType_Ready ( & FrsNoise_Type ) < 0 )
2008-07-26 21:47:39 +00:00
return ;
2008-08-01 02:15:25 +00:00
Py_INCREF ( & FrsNoise_Type ) ;
PyModule_AddObject ( module , " FrsNoise " , ( PyObject * ) & FrsNoise_Type ) ;
2008-07-09 08:24:13 +00:00
}
2008-07-26 21:47:39 +00:00
//------------------------INSTANCE METHODS ----------------------------------
2008-07-09 08:24:13 +00:00
2008-08-01 02:15:25 +00:00
int FrsNoise___init__ ( BPy_FrsNoise * self , PyObject * args , PyObject * kwds )
2008-07-26 21:47:39 +00:00
{
self - > n = new Noise ( ) ;
return 0 ;
2008-07-09 08:24:13 +00:00
}
2008-08-01 02:15:25 +00:00
void FrsNoise___dealloc__ ( BPy_FrsNoise * self )
2008-07-26 21:47:39 +00:00
{
delete self - > n ;
self - > ob_type - > tp_free ( ( PyObject * ) self ) ;
2008-07-09 08:24:13 +00:00
}
2008-08-01 02:15:25 +00:00
PyObject * FrsNoise___repr__ ( BPy_FrsNoise * self )
2008-07-26 21:47:39 +00:00
{
2008-08-01 02:15:25 +00:00
return PyString_FromFormat ( " FrsNoise - address: %p " , self - > n ) ;
2008-07-09 08:24:13 +00:00
}
2008-08-01 02:15:25 +00:00
PyObject * FrsNoise_turbulence1 ( BPy_FrsNoise * self , PyObject * args ) {
2008-07-26 21:47:39 +00:00
float f1 , f2 , f3 ;
2009-03-30 19:25:27 +00:00
unsigned int i = 4 ;
2008-07-09 08:24:13 +00:00
2009-03-29 21:50:10 +00:00
if ( ! ( PyArg_ParseTuple ( args , " fff|I " , & f1 , & f2 , & f3 , & i ) ) )
return NULL ;
2008-07-09 08:24:13 +00:00
2008-07-26 21:47:39 +00:00
return PyFloat_FromDouble ( self - > n - > turbulence1 ( f1 , f2 , f3 , i ) ) ;
2008-07-09 08:24:13 +00:00
}
2008-08-01 02:15:25 +00:00
PyObject * FrsNoise_turbulence2 ( BPy_FrsNoise * self , PyObject * args ) {
2008-07-26 21:47:39 +00:00
PyObject * obj1 ;
float f2 , f3 ;
2009-03-30 19:25:27 +00:00
unsigned int i = 4 ;
2008-07-09 08:24:13 +00:00
2009-03-29 21:50:10 +00:00
if ( ! ( PyArg_ParseTuple ( args , " O!ff|I " , & PyList_Type , & obj1 , & f2 , & f3 , & i ) ) )
return NULL ;
if ( PyList_Size ( obj1 ) ! = 2 ) {
stringstream msg ( " FrsNoise::turbulence2() accepts a list of 2 elements ( " ) ;
msg < < PyList_Size ( obj1 ) < < " found) " ;
PyErr_SetString ( PyExc_TypeError , msg . str ( ) . c_str ( ) ) ;
return NULL ;
2008-07-26 21:47:39 +00:00
}
2008-07-09 08:24:13 +00:00
2008-07-26 21:47:39 +00:00
Vec2f v ( PyFloat_AsDouble ( PyList_GetItem ( obj1 , 0 ) ) , PyFloat_AsDouble ( PyList_GetItem ( obj1 , 1 ) ) ) ;
return PyFloat_FromDouble ( self - > n - > turbulence2 ( v , f2 , f3 , i ) ) ;
2008-07-09 08:24:13 +00:00
}
2008-08-01 02:15:25 +00:00
PyObject * FrsNoise_turbulence3 ( BPy_FrsNoise * self , PyObject * args ) {
2008-07-26 21:47:39 +00:00
PyObject * obj1 ;
float f2 , f3 ;
2009-03-30 19:25:27 +00:00
unsigned int i = 4 ;
2008-07-26 21:47:39 +00:00
2009-03-29 21:50:10 +00:00
if ( ! ( PyArg_ParseTuple ( args , " O!ff|I " , & PyList_Type , & obj1 , & f2 , & f3 , & i ) ) )
return NULL ;
if ( PyList_Size ( obj1 ) ! = 3 ) {
stringstream msg ( " FrsNoise::turbulence3() accepts a list of 3 elements ( " ) ;
msg < < PyList_Size ( obj1 ) < < " found) " ;
PyErr_SetString ( PyExc_TypeError , msg . str ( ) . c_str ( ) ) ;
return NULL ;
2008-07-26 21:47:39 +00:00
}
Vec3f v ( PyFloat_AsDouble ( PyList_GetItem ( obj1 , 0 ) ) ,
PyFloat_AsDouble ( PyList_GetItem ( obj1 , 1 ) ) ,
PyFloat_AsDouble ( PyList_GetItem ( obj1 , 2 ) ) ) ;
return PyFloat_FromDouble ( self - > n - > turbulence3 ( v , f2 , f3 , i ) ) ;
2008-07-09 08:24:13 +00:00
}
2008-08-01 02:15:25 +00:00
PyObject * FrsNoise_smoothNoise1 ( BPy_FrsNoise * self , PyObject * args ) {
2008-07-26 21:47:39 +00:00
float f ;
2008-07-09 08:24:13 +00:00
2009-03-29 21:50:10 +00:00
if ( ! ( PyArg_ParseTuple ( args , " f " , & f ) ) )
return NULL ;
2008-07-26 21:47:39 +00:00
return PyFloat_FromDouble ( self - > n - > smoothNoise1 ( f ) ) ;
2008-07-09 08:24:13 +00:00
}
2008-08-01 02:15:25 +00:00
PyObject * FrsNoise_smoothNoise2 ( BPy_FrsNoise * self , PyObject * args ) {
2008-07-26 21:47:39 +00:00
PyObject * obj ;
2009-03-29 21:50:10 +00:00
if ( ! ( PyArg_ParseTuple ( args , " O " , & PyList_Type , & obj ) ) )
return NULL ;
if ( PyList_Size ( obj ) ! = 2 ) {
stringstream msg ( " FrsNoise::smoothNoise2() accepts a list of 2 elements ( " ) ;
msg < < PyList_Size ( obj ) < < " found) " ;
PyErr_SetString ( PyExc_TypeError , msg . str ( ) . c_str ( ) ) ;
return NULL ;
2008-07-26 21:47:39 +00:00
}
2008-07-09 08:24:13 +00:00
2008-07-26 21:47:39 +00:00
Vec2f v ( PyFloat_AsDouble ( PyList_GetItem ( obj , 0 ) ) , PyFloat_AsDouble ( PyList_GetItem ( obj , 1 ) ) ) ;
return PyFloat_FromDouble ( self - > n - > smoothNoise2 ( v ) ) ;
2008-07-09 08:24:13 +00:00
}
2008-08-01 02:15:25 +00:00
PyObject * FrsNoise_smoothNoise3 ( BPy_FrsNoise * self , PyObject * args ) {
2008-07-26 21:47:39 +00:00
PyObject * obj ;
2009-03-30 19:25:27 +00:00
if ( ! ( PyArg_ParseTuple ( args , " O " , & PyList_Type , & obj ) ) )
2009-03-29 21:50:10 +00:00
return NULL ;
if ( PyList_Size ( obj ) ! = 3 ) {
stringstream msg ( " FrsNoise::smoothNoise3() accepts a list of 3 elements ( " ) ;
msg < < PyList_Size ( obj ) < < " found) " ;
PyErr_SetString ( PyExc_TypeError , msg . str ( ) . c_str ( ) ) ;
return NULL ;
2008-07-26 21:47:39 +00:00
}
2008-07-09 08:24:13 +00:00
2008-07-26 21:47:39 +00:00
Vec3f v ( PyFloat_AsDouble ( PyList_GetItem ( obj , 0 ) ) ,
PyFloat_AsDouble ( PyList_GetItem ( obj , 1 ) ) ,
PyFloat_AsDouble ( PyList_GetItem ( obj , 2 ) ) ) ;
return PyFloat_FromDouble ( self - > n - > smoothNoise3 ( v ) ) ;
2008-07-09 08:24:13 +00:00
}
2008-07-26 21:47:39 +00:00
///////////////////////////////////////////////////////////////////////////////////////////
# ifdef __cplusplus
}
# endif