BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks); - added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos); - Blender.Image: added image.glFree() to free textures bound by the recently added image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can be used to load textures for scripts); - Blender.Sound: removed for now at least a few get/set methods of vars that can't be accessed via interface; - renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for now), same in Blender.Sound: renamed makeActive to setCurrent. Stephen Swaney pointed this some weeks ago, we should stick to one naming convention. - added documentation for Sound and Window.Theme modules and the other added functions, made other small updates. - Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix: after reading a discussion on blender.org's Python forum where eeshlo mentioned the pre 2.34 default was worldspace, I took a better look at Blender's relevant code, confirmed, talked to Theeth about this and as he suggested am changing the default back to 'worldspace'.
This commit is contained in:
parent
f2f004af2d
commit
fa9135385a
@ -46,7 +46,7 @@ struct _object; // forward declaration for PyObject !
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void BPY_start_python( void );
|
void BPY_start_python( int argc, char **argv );
|
||||||
void BPY_end_python( void );
|
void BPY_end_python( void );
|
||||||
void BPY_post_start_python( void );
|
void BPY_post_start_python( void );
|
||||||
int BPY_Err_getLinenumber( void );
|
int BPY_Err_getLinenumber( void );
|
||||||
@ -75,7 +75,7 @@ extern "C" {
|
|||||||
void BPY_clear_script( struct Script *script );
|
void BPY_clear_script( struct Script *script );
|
||||||
void BPY_free_finished_script( struct Script *script );
|
void BPY_free_finished_script( struct Script *script );
|
||||||
|
|
||||||
void init_syspath( void );
|
void init_syspath( int first_time );
|
||||||
void syspath_append( char *dir );
|
void syspath_append( char *dir );
|
||||||
char *bpy_gethome( void );
|
char *bpy_gethome( void );
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* This is a new part of Blender.
|
* This is a new part of Blender.
|
||||||
*
|
*
|
||||||
* Contributor(s): Michel Selten, Willian P. Germano, Stephen Swaney,
|
* Contributor(s): Michel Selten, Willian P. Germano, Stephen Swaney,
|
||||||
* Chris Keith
|
* Chris Keith, Chris Want
|
||||||
*
|
*
|
||||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||||
*/
|
*/
|
||||||
@ -114,14 +114,26 @@ PyObject *blender_import( PyObject * self, PyObject * args );
|
|||||||
* api variations.
|
* api variations.
|
||||||
* Notes: Currently only the api for 2.2x will be initialised.
|
* Notes: Currently only the api for 2.2x will be initialised.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
void BPY_start_python( void )
|
void BPY_start_python( int argc, char **argv )
|
||||||
{
|
{
|
||||||
bpy_registryDict = PyDict_New( ); /* check comment at start of this file */
|
static int argc_copy = 0;
|
||||||
|
static char **argv_copy = NULL;
|
||||||
|
int first_time = argc;
|
||||||
|
|
||||||
|
/* we keep a copy of the values of argc and argv so that the game engine
|
||||||
|
* can call BPY_start_python(0, NULL) whenever a game ends, without having
|
||||||
|
* to know argc and argv there (in source/blender/src/space.c) */
|
||||||
|
|
||||||
|
if( first_time ) {
|
||||||
|
argc_copy = argc;
|
||||||
|
argv_copy = argv;
|
||||||
|
}
|
||||||
|
|
||||||
|
bpy_registryDict = PyDict_New( );/* check comment at start of this file */
|
||||||
|
|
||||||
if( !bpy_registryDict )
|
if( !bpy_registryDict )
|
||||||
printf( "Error: Couldn't create the Registry Python Dictionary!" );
|
printf( "Error: Couldn't create the Registry Python Dictionary!" );
|
||||||
|
|
||||||
/* TODO: Shouldn't "blender" be replaced by PACKAGE ?? (config.h) */
|
|
||||||
Py_SetProgramName( "blender" );
|
Py_SetProgramName( "blender" );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -130,16 +142,19 @@ void BPY_start_python( void )
|
|||||||
* rest of our init msgs.
|
* rest of our init msgs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
printf( "Checking for Python install...\n" );
|
if( first_time ) { /* so it only prints msg on first_time */
|
||||||
fflush( stdout );
|
printf( "Checking for Python install...\n" );
|
||||||
|
fflush( stdout );
|
||||||
|
}
|
||||||
|
|
||||||
Py_Initialize( );
|
Py_Initialize( );
|
||||||
|
PySys_SetArgv( argc_copy, argv_copy );
|
||||||
|
|
||||||
init_ourImport( );
|
init_ourImport( );
|
||||||
|
|
||||||
initBlenderApi2_2x( );
|
initBlenderApi2_2x( );
|
||||||
|
|
||||||
init_syspath( );
|
init_syspath( first_time ); /* not first_time: some msgs are suppressed */
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -187,7 +202,7 @@ void syspath_append( char *dirname )
|
|||||||
Py_DECREF( mod_sys );
|
Py_DECREF( mod_sys );
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_syspath( void )
|
void init_syspath( int first_time )
|
||||||
{
|
{
|
||||||
PyObject *path;
|
PyObject *path;
|
||||||
PyObject *mod, *d;
|
PyObject *mod, *d;
|
||||||
@ -238,7 +253,7 @@ void init_syspath( void )
|
|||||||
int size = 0;
|
int size = 0;
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
printf( "Installed Python found!\n" );
|
if( first_time ) printf( "Installed Python found!\n" );
|
||||||
|
|
||||||
/* get the value of 'sitedirs' from the module */
|
/* get the value of 'sitedirs' from the module */
|
||||||
|
|
||||||
@ -260,15 +275,16 @@ void init_syspath( void )
|
|||||||
Py_DECREF( mod );
|
Py_DECREF( mod );
|
||||||
} else { /* import 'site' failed */
|
} else { /* import 'site' failed */
|
||||||
PyErr_Clear( );
|
PyErr_Clear( );
|
||||||
printf( "No installed Python found.\n" );
|
if( first_time ) {
|
||||||
printf( "Only built-in modules are available. Some scripts may not run.\n" );
|
printf( "No installed Python found.\n" );
|
||||||
printf( "Continuing happily.\n" );
|
printf( "Only built-in modules are available. Some scripts may not run.\n" );
|
||||||
|
printf( "Continuing happily.\n" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* initialize the sys module
|
* initialize the sys module
|
||||||
* set sys.executable to the Blender exe
|
* set sys.executable to the Blender exe
|
||||||
* set argv[0] to the Blender exe
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
mod = PyImport_ImportModule( "sys" ); /* new ref */
|
mod = PyImport_ImportModule( "sys" ); /* new ref */
|
||||||
@ -277,9 +293,6 @@ void init_syspath( void )
|
|||||||
d = PyModule_GetDict( mod ); /* borrowed ref */
|
d = PyModule_GetDict( mod ); /* borrowed ref */
|
||||||
PyDict_SetItemString( d, "executable",
|
PyDict_SetItemString( d, "executable",
|
||||||
Py_BuildValue( "s", bprogname ) );
|
Py_BuildValue( "s", bprogname ) );
|
||||||
/* in the future this can be extended to have more argv's if needed: */
|
|
||||||
PyDict_SetItemString( d, "argv",
|
|
||||||
Py_BuildValue( "[s]", bprogname ) );
|
|
||||||
Py_DECREF( mod );
|
Py_DECREF( mod );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "BLI_winstuff.h"
|
#include "BLI_winstuff.h"
|
||||||
#endif /* WIN32 */
|
#endif /* WIN32 */
|
||||||
|
|
||||||
|
#include <BDR_drawmesh.h> /* free_realtime_image */
|
||||||
#include <BKE_main.h>
|
#include <BKE_main.h>
|
||||||
#include <BKE_global.h>
|
#include <BKE_global.h>
|
||||||
#include <BKE_library.h>
|
#include <BKE_library.h>
|
||||||
@ -250,6 +251,7 @@ static PyObject *Image_setXRep( BPy_Image * self, PyObject * args );
|
|||||||
static PyObject *Image_setYRep( BPy_Image * self, PyObject * args );
|
static PyObject *Image_setYRep( BPy_Image * self, PyObject * args );
|
||||||
static PyObject *Image_reload( BPy_Image * self ); /* by Campbell */
|
static PyObject *Image_reload( BPy_Image * self ); /* by Campbell */
|
||||||
static PyObject *Image_glLoad( BPy_Image * self );
|
static PyObject *Image_glLoad( BPy_Image * self );
|
||||||
|
static PyObject *Image_glFree( BPy_Image * self );
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Python BPy_Image methods table: */
|
/* Python BPy_Image methods table: */
|
||||||
@ -275,6 +277,9 @@ static PyMethodDef BPy_Image_methods[] = {
|
|||||||
{"glLoad", ( PyCFunction ) Image_glLoad, METH_NOARGS,
|
{"glLoad", ( PyCFunction ) Image_glLoad, METH_NOARGS,
|
||||||
"() - Load the image data in OpenGL texture memory.\n\
|
"() - Load the image data in OpenGL texture memory.\n\
|
||||||
The bindcode (int) is returned."},
|
The bindcode (int) is returned."},
|
||||||
|
{"glFree", ( PyCFunction ) Image_glFree, METH_NOARGS,
|
||||||
|
"() - Free the image data from OpenGL texture memory only,\n\
|
||||||
|
see also image.glLoad()."},
|
||||||
{"setName", ( PyCFunction ) Image_setName, METH_VARARGS,
|
{"setName", ( PyCFunction ) Image_setName, METH_VARARGS,
|
||||||
"(str) - Change Image object name"},
|
"(str) - Change Image object name"},
|
||||||
{"setXRep", ( PyCFunction ) Image_setXRep, METH_VARARGS,
|
{"setXRep", ( PyCFunction ) Image_setXRep, METH_VARARGS,
|
||||||
@ -482,6 +487,14 @@ static PyObject *Image_reload( BPy_Image * self )
|
|||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *Image_glFree( BPy_Image * self )
|
||||||
|
{
|
||||||
|
Image *img = self->image;
|
||||||
|
|
||||||
|
free_realtime_image( img );
|
||||||
|
return EXPP_incr_ret( Py_None );
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *Image_glLoad( BPy_Image * self )
|
static PyObject *Image_glLoad( BPy_Image * self )
|
||||||
{
|
{
|
||||||
Image *img = self->image;
|
Image *img = self->image;
|
||||||
|
@ -196,9 +196,14 @@ hierarchy (faster)"},
|
|||||||
"(i = 0) - Returns list of materials assigned to the object.\n\
|
"(i = 0) - Returns list of materials assigned to the object.\n\
|
||||||
if i is nonzero, empty slots are not ignored: they are returned as None's."},
|
if i is nonzero, empty slots are not ignored: they are returned as None's."},
|
||||||
{"getMatrix", ( PyCFunction ) Object_getMatrix, METH_VARARGS,
|
{"getMatrix", ( PyCFunction ) Object_getMatrix, METH_VARARGS,
|
||||||
"(str = 'localspace') - Returns the object matrix.\n\
|
"(str = 'worldspace') - Returns the object matrix.\n\
|
||||||
(str = 'localspace') - the wanted matrix: worldspace, localspace (default)\n\
|
(str = 'localspace') - the wanted matrix: worldspace (default), localspace\n\
|
||||||
or oldlocal (not updated, it was the only choice before Blender 2.34)."},
|
or old_worldspace.\n\
|
||||||
|
\n\
|
||||||
|
'old_worldspace' was the only behavior before Blender 2.34. With it the\n\
|
||||||
|
matrix is not updated for changes made by the script itself\n\
|
||||||
|
(like obj.LocX = 10) until a redraw happens, either called by the script or\n\
|
||||||
|
automatic when the script finishes."},
|
||||||
{"getName", ( PyCFunction ) Object_getName, METH_NOARGS,
|
{"getName", ( PyCFunction ) Object_getName, METH_NOARGS,
|
||||||
"Returns the name of the object"},
|
"Returns the name of the object"},
|
||||||
{"getParent", ( PyCFunction ) Object_getParent, METH_NOARGS,
|
{"getParent", ( PyCFunction ) Object_getParent, METH_NOARGS,
|
||||||
@ -952,7 +957,7 @@ static PyObject *Object_getMaterials( BPy_Object * self, PyObject * args )
|
|||||||
static PyObject *Object_getMatrix( BPy_Object * self, PyObject * args )
|
static PyObject *Object_getMatrix( BPy_Object * self, PyObject * args )
|
||||||
{
|
{
|
||||||
PyObject *matrix;
|
PyObject *matrix;
|
||||||
char *space = "localspace"; /* default to local */
|
char *space = "worldspace"; /* default to local */
|
||||||
|
|
||||||
if( !PyArg_ParseTuple( args, "|s", &space ) ) {
|
if( !PyArg_ParseTuple( args, "|s", &space ) ) {
|
||||||
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
|
return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
|
||||||
@ -970,13 +975,14 @@ static PyObject *Object_getMatrix( BPy_Object * self, PyObject * args )
|
|||||||
} else if( BLI_streq( space, "localspace" ) ) { /* Localspace matrix */
|
} else if( BLI_streq( space, "localspace" ) ) { /* Localspace matrix */
|
||||||
object_to_mat4( self->object,
|
object_to_mat4( self->object,
|
||||||
*( ( MatrixObject * ) matrix )->matrix );
|
*( ( MatrixObject * ) matrix )->matrix );
|
||||||
} else if( BLI_streq( space, "oldlocal" ) ) { /* old behavior, prior to 2.34 */
|
/* old behavior, prior to 2.34, check this method's doc string: */
|
||||||
|
} else if( BLI_streq( space, "old_worldspace" ) ) {
|
||||||
Mat4CpyMat4( *( ( MatrixObject * ) matrix )->matrix,
|
Mat4CpyMat4( *( ( MatrixObject * ) matrix )->matrix,
|
||||||
self->object->obmat );
|
self->object->obmat );
|
||||||
} else {
|
} else {
|
||||||
return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
|
return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
|
||||||
"wrong parameter, expected nothing or either 'localspace' (default),\n\
|
"wrong parameter, expected nothing or either 'worldspace' (default),\n\
|
||||||
'worldspace' or 'oldlocal'" ) );
|
'localspace' or 'old_worldspace'" ) );
|
||||||
}
|
}
|
||||||
return matrix;
|
return matrix;
|
||||||
}
|
}
|
||||||
@ -2199,7 +2205,7 @@ static PyObject *Object_getAttr( BPy_Object * obj, char *name )
|
|||||||
}
|
}
|
||||||
if( StringEqual( name, "mat" ) || StringEqual( name, "matrix" ) )
|
if( StringEqual( name, "mat" ) || StringEqual( name, "matrix" ) )
|
||||||
return ( Object_getMatrix
|
return ( Object_getMatrix
|
||||||
( obj, Py_BuildValue( "(s)", "localspace" ) ) );
|
( obj, Py_BuildValue( "(s)", "worldspace" ) ) );
|
||||||
if( StringEqual( name, "matrixWorld" ) )
|
if( StringEqual( name, "matrixWorld" ) )
|
||||||
return ( Object_getMatrix
|
return ( Object_getMatrix
|
||||||
( obj, Py_BuildValue( "(s)", "worldspace" ) ) );
|
( obj, Py_BuildValue( "(s)", "worldspace" ) ) );
|
||||||
|
@ -48,11 +48,16 @@
|
|||||||
/* Python BPy_Sound defaults: */
|
/* Python BPy_Sound defaults: */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#define EXPP_SND_volume_MIN 0.0
|
||||||
|
#define EXPP_SND_volume_MAX 1.0
|
||||||
|
#define EXPP_SND_pitch_MIN -12.0
|
||||||
|
#define EXPP_SND_pitch_MAX 12.0
|
||||||
|
#define EXPP_SND_attenuation_MIN 0.0
|
||||||
|
#define EXPP_SND_attenuation_MAX 5.0
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Python API function prototypes for the Sound module. */
|
/* Python API function prototypes for the Sound module. */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
static PyObject *M_Sound_New( PyObject * self, PyObject * args,
|
|
||||||
PyObject * keywords );
|
|
||||||
static PyObject *M_Sound_Get( PyObject * self, PyObject * args );
|
static PyObject *M_Sound_Get( PyObject * self, PyObject * args );
|
||||||
static PyObject *M_Sound_Load( PyObject * self, PyObject * args );
|
static PyObject *M_Sound_Load( PyObject * self, PyObject * args );
|
||||||
|
|
||||||
@ -63,26 +68,20 @@ static PyObject *M_Sound_Load( PyObject * self, PyObject * args );
|
|||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
static char M_Sound_doc[] = "The Blender Sound module\n\n";
|
static char M_Sound_doc[] = "The Blender Sound module\n\n";
|
||||||
|
|
||||||
static char M_Sound_New_doc[] =
|
|
||||||
"() - return a new Sound object -- unimplemented";
|
|
||||||
|
|
||||||
static char M_Sound_Get_doc[] =
|
static char M_Sound_Get_doc[] =
|
||||||
"(name) - return the sound with the name 'name', \
|
"(name) - return the sound with the name 'name', \
|
||||||
returns None if not found.\n If 'name' is not specified, \
|
returns None if not found.\n If 'name' is not specified, \
|
||||||
it returns a list of all sounds in the\ncurrent scene.";
|
it returns a list of all sounds in the\ncurrent scene.";
|
||||||
|
|
||||||
static char M_Sound_Load_doc[] =
|
static char M_Sound_Load_doc[] =
|
||||||
"(filename, redraw = 0) - return sound from file filename as Sound Object,\n\
|
"(filename) - return sound from file filename as a Sound Object,\n\
|
||||||
returns None if not found.";
|
returns None if not found.";
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Python method structure definition for Blender.Sound module: */
|
/* Python method structure definition for Blender.Sound module: */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
struct PyMethodDef M_Sound_methods[] = {
|
struct PyMethodDef M_Sound_methods[] = {
|
||||||
{"New", ( PyCFunction ) M_Sound_New, METH_VARARGS | METH_KEYWORDS,
|
|
||||||
M_Sound_New_doc},
|
|
||||||
{"Get", M_Sound_Get, METH_VARARGS, M_Sound_Get_doc},
|
{"Get", M_Sound_Get, METH_VARARGS, M_Sound_Get_doc},
|
||||||
{"get", M_Sound_Get, METH_VARARGS, M_Sound_Get_doc},
|
|
||||||
{"Load", M_Sound_Load, METH_VARARGS, M_Sound_Load_doc},
|
{"Load", M_Sound_Load, METH_VARARGS, M_Sound_Load_doc},
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
@ -109,7 +108,8 @@ static PyObject *Sound_set ## funcname(BPy_Sound *self, PyObject *args) { \
|
|||||||
if (!PyArg_ParseTuple(args, "f", &f)) \
|
if (!PyArg_ParseTuple(args, "f", &f)) \
|
||||||
return (EXPP_ReturnPyObjError (PyExc_TypeError, \
|
return (EXPP_ReturnPyObjError (PyExc_TypeError, \
|
||||||
"expected float argument")); \
|
"expected float argument")); \
|
||||||
self->sound->varname = f; \
|
self->sound->varname = EXPP_ClampFloat(f,\
|
||||||
|
EXPP_SND_##varname##_MIN, EXPP_SND_##varname##_MAX);\
|
||||||
Py_INCREF(Py_None); \
|
Py_INCREF(Py_None); \
|
||||||
return Py_None; \
|
return Py_None; \
|
||||||
}
|
}
|
||||||
@ -127,14 +127,18 @@ static PyObject *Sound_set ## funcname(BPy_Sound *self, PyObject *args) { \
|
|||||||
static PyObject *Sound_getName( BPy_Sound * self );
|
static PyObject *Sound_getName( BPy_Sound * self );
|
||||||
static PyObject *Sound_getFilename( BPy_Sound * self );
|
static PyObject *Sound_getFilename( BPy_Sound * self );
|
||||||
static PyObject *Sound_play( BPy_Sound * self );
|
static PyObject *Sound_play( BPy_Sound * self );
|
||||||
static PyObject *Sound_makeActive( BPy_Sound * self );
|
static PyObject *Sound_setCurrent( BPy_Sound * self );
|
||||||
|
//static PyObject *Sound_reload ( BPy_Sound * self );
|
||||||
SOUND_FLOAT_METHODS( Volume, volume )
|
SOUND_FLOAT_METHODS( Volume, volume )
|
||||||
SOUND_FLOAT_METHODS( Panning, panning )
|
SOUND_FLOAT_METHODS( Attenuation, attenuation )
|
||||||
SOUND_FLOAT_METHODS( Attenuation, attenuation )
|
SOUND_FLOAT_METHODS( Pitch, pitch )
|
||||||
SOUND_FLOAT_METHODS( Pitch, pitch )
|
/* these can't be set via interface, removed for now */
|
||||||
SOUND_FLOAT_METHODS( MinGain, min_gain )
|
/*
|
||||||
SOUND_FLOAT_METHODS( MaxGain, max_gain )
|
SOUND_FLOAT_METHODS( Panning, panning )
|
||||||
SOUND_FLOAT_METHODS( Distance, distance )
|
SOUND_FLOAT_METHODS( MinGain, min_gain )
|
||||||
|
SOUND_FLOAT_METHODS( MaxGain, max_gain )
|
||||||
|
SOUND_FLOAT_METHODS( Distance, distance )
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Python BPy_Sound methods table: */
|
/* Python BPy_Sound methods table: */
|
||||||
@ -147,15 +151,21 @@ static PyMethodDef BPy_Sound_methods[] = {
|
|||||||
"() - Return Sound object filename"},
|
"() - Return Sound object filename"},
|
||||||
{"play", ( PyCFunction ) Sound_play, METH_NOARGS,
|
{"play", ( PyCFunction ) Sound_play, METH_NOARGS,
|
||||||
"() - play this sound"},
|
"() - play this sound"},
|
||||||
{"makeActive", ( PyCFunction ) Sound_makeActive, METH_NOARGS,
|
{"setCurrent", ( PyCFunction ) Sound_setCurrent, METH_NOARGS,
|
||||||
"() - make this the active sound in the sound buttons win (also redraws)"},
|
"() - make this the active sound in the sound buttons win (also redraws)"},
|
||||||
|
//{"reload", ( PyCFunction ) Sound_setCurrent, METH_NOARGS,
|
||||||
|
//"() - reload this Sound object's sample.\n\
|
||||||
|
//This is only useful if the original sound file has changed."},
|
||||||
SOUND_FLOAT_METHOD_FUNCS( Volume )
|
SOUND_FLOAT_METHOD_FUNCS( Volume )
|
||||||
SOUND_FLOAT_METHOD_FUNCS( Panning )
|
SOUND_FLOAT_METHOD_FUNCS( Attenuation )
|
||||||
SOUND_FLOAT_METHOD_FUNCS( Attenuation )
|
SOUND_FLOAT_METHOD_FUNCS( Pitch )
|
||||||
SOUND_FLOAT_METHOD_FUNCS( Pitch )
|
/*
|
||||||
SOUND_FLOAT_METHOD_FUNCS( MinGain )
|
SOUND_FLOAT_METHOD_FUNCS( Panning )
|
||||||
SOUND_FLOAT_METHOD_FUNCS( MaxGain )
|
SOUND_FLOAT_METHOD_FUNCS( MinGain )
|
||||||
SOUND_FLOAT_METHOD_FUNCS( Distance ) {NULL, NULL, 0, NULL}
|
SOUND_FLOAT_METHOD_FUNCS( MaxGain )
|
||||||
|
SOUND_FLOAT_METHOD_FUNCS( Distance )
|
||||||
|
*/
|
||||||
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@ -185,19 +195,6 @@ PyTypeObject Sound_Type = {
|
|||||||
0, /* tp_members */
|
0, /* tp_members */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/* Function: M_Sound_New */
|
|
||||||
/* Python equivalent: Blender.Sound.New */
|
|
||||||
/*****************************************************************************/
|
|
||||||
static PyObject *M_Sound_New( PyObject * self, PyObject * args,
|
|
||||||
PyObject * keywords )
|
|
||||||
{
|
|
||||||
printf( "In Sound_New() - unimplemented in 2.34\n" );
|
|
||||||
|
|
||||||
Py_INCREF( Py_None );
|
|
||||||
return Py_None;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* NOTE: these were copied and modified from image.h. To Be Done TBD:
|
/* NOTE: these were copied and modified from image.h. To Be Done TBD:
|
||||||
* macro-ize them, or C++ templates eventually?
|
* macro-ize them, or C++ templates eventually?
|
||||||
*/
|
*/
|
||||||
@ -417,7 +414,7 @@ static PyObject *Sound_play( BPy_Sound * self )
|
|||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *Sound_makeActive( BPy_Sound * self )
|
static PyObject *Sound_setCurrent( BPy_Sound * self )
|
||||||
{
|
{
|
||||||
bSound *snd_ptr = self->sound;
|
bSound *snd_ptr = self->sound;
|
||||||
|
|
||||||
@ -433,6 +430,19 @@ static PyObject *Sound_makeActive( BPy_Sound * self )
|
|||||||
Py_INCREF( Py_None );
|
Py_INCREF( Py_None );
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
static PyObject *Sound_reload( BPy_Sound * self)
|
||||||
|
{
|
||||||
|
sound_free_sample();
|
||||||
|
|
||||||
|
if (sound->snd_sound) {
|
||||||
|
SND_RemoveSound(ghSoundScene, sound->snd_sound);
|
||||||
|
sound->snd_sound = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXPP_incr_ret( Py_None );
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Function: Sound_getAttr */
|
/* Function: Sound_getAttr */
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
*
|
*
|
||||||
* This is a new part of Blender.
|
* This is a new part of Blender.
|
||||||
*
|
*
|
||||||
* Contributor(s): Willian P. Germano
|
* Contributor(s): Willian P. Germano, Tom Musgrove
|
||||||
*
|
*
|
||||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||||
*/
|
*/
|
||||||
@ -47,6 +47,7 @@
|
|||||||
#include <BIF_screen.h>
|
#include <BIF_screen.h>
|
||||||
#include <BIF_space.h>
|
#include <BIF_space.h>
|
||||||
#include <BIF_drawtext.h>
|
#include <BIF_drawtext.h>
|
||||||
|
#include <BIF_mywindow.h> /* L/M/R_MOUSE bitflags */
|
||||||
#include <BIF_spacetypes.h>
|
#include <BIF_spacetypes.h>
|
||||||
#include <mydevice.h>
|
#include <mydevice.h>
|
||||||
#include <DNA_view3d_types.h>
|
#include <DNA_view3d_types.h>
|
||||||
@ -85,6 +86,7 @@ static PyObject *M_Window_SetViewQuat( PyObject * self, PyObject * args );
|
|||||||
static PyObject *M_Window_GetViewOffset( PyObject * self );
|
static PyObject *M_Window_GetViewOffset( PyObject * self );
|
||||||
static PyObject *M_Window_SetViewOffset( PyObject * self, PyObject * args );
|
static PyObject *M_Window_SetViewOffset( PyObject * self, PyObject * args );
|
||||||
static PyObject *M_Window_GetViewMatrix( PyObject * self );
|
static PyObject *M_Window_GetViewMatrix( PyObject * self );
|
||||||
|
static PyObject *M_Window_GetPerspMatrix( PyObject * self );
|
||||||
static PyObject *M_Window_FileSelector( PyObject * self, PyObject * args );
|
static PyObject *M_Window_FileSelector( PyObject * self, PyObject * args );
|
||||||
static PyObject *M_Window_ImageSelector( PyObject * self, PyObject * args );
|
static PyObject *M_Window_ImageSelector( PyObject * self, PyObject * args );
|
||||||
static PyObject *M_Window_EditMode( PyObject * self, PyObject * args );
|
static PyObject *M_Window_EditMode( PyObject * self, PyObject * args );
|
||||||
@ -164,6 +166,9 @@ static char M_Window_GetViewVector_doc[] =
|
|||||||
static char M_Window_GetViewMatrix_doc[] =
|
static char M_Window_GetViewMatrix_doc[] =
|
||||||
"() - Get the current 3d view matrix.";
|
"() - Get the current 3d view matrix.";
|
||||||
|
|
||||||
|
static char M_Window_GetPerspMatrix_doc[] =
|
||||||
|
"() - Get the current 3d Persp matrix.";
|
||||||
|
|
||||||
static char M_Window_EditMode_doc[] =
|
static char M_Window_EditMode_doc[] =
|
||||||
"() - Get the current status -- 0: not in edit mode; 1: in edit mode.\n\
|
"() - Get the current status -- 0: not in edit mode; 1: in edit mode.\n\
|
||||||
(status) - if 1: enter edit mode; if 0: leave edit mode.\n\
|
(status) - if 1: enter edit mode; if 0: leave edit mode.\n\
|
||||||
@ -228,7 +233,7 @@ static char M_Window_SetMouseCoords_doc[] =
|
|||||||
(x,y) - ints ([x, y] also accepted): the new x, y coordinates.";
|
(x,y) - ints ([x, y] also accepted): the new x, y coordinates.";
|
||||||
|
|
||||||
static char M_Window_GetMouseButtons_doc[] =
|
static char M_Window_GetMouseButtons_doc[] =
|
||||||
"() - Get the current mouse button state (see Blender.Draw.LEFTMOUSE, etc).";
|
"() - Get the current mouse button state (see Blender.Window.MButs dict).";
|
||||||
|
|
||||||
static char M_Window_GetKeyQualifiers_doc[] =
|
static char M_Window_GetKeyQualifiers_doc[] =
|
||||||
"() - Get the current qualifier keys state.\n\
|
"() - Get the current qualifier keys state.\n\
|
||||||
@ -306,6 +311,8 @@ struct PyMethodDef M_Window_methods[] = {
|
|||||||
M_Window_SetViewOffset_doc},
|
M_Window_SetViewOffset_doc},
|
||||||
{"GetViewMatrix", ( PyCFunction ) M_Window_GetViewMatrix, METH_NOARGS,
|
{"GetViewMatrix", ( PyCFunction ) M_Window_GetViewMatrix, METH_NOARGS,
|
||||||
M_Window_GetViewMatrix_doc},
|
M_Window_GetViewMatrix_doc},
|
||||||
|
{"GetPerspMatrix", ( PyCFunction ) M_Window_GetPerspMatrix, METH_NOARGS,
|
||||||
|
M_Window_GetPerspMatrix_doc},
|
||||||
{"EditMode", ( PyCFunction ) M_Window_EditMode, METH_VARARGS,
|
{"EditMode", ( PyCFunction ) M_Window_EditMode, METH_VARARGS,
|
||||||
M_Window_EditMode_doc},
|
M_Window_EditMode_doc},
|
||||||
{"ViewLayer", ( PyCFunction ) M_Window_ViewLayer, METH_VARARGS,
|
{"ViewLayer", ( PyCFunction ) M_Window_ViewLayer, METH_VARARGS,
|
||||||
@ -784,6 +791,30 @@ static PyObject *M_Window_GetViewMatrix( PyObject * self )
|
|||||||
return viewmat;
|
return viewmat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Function: M_Window_GetPerspMatrix */
|
||||||
|
/* Python equivalent: Blender.Window.GetPerspMatrix */
|
||||||
|
/*****************************************************************************/
|
||||||
|
static PyObject *M_Window_GetPerspMatrix( PyObject * self )
|
||||||
|
{
|
||||||
|
PyObject *perspmat;
|
||||||
|
|
||||||
|
if( !G.vd ) {
|
||||||
|
Py_INCREF( Py_None );
|
||||||
|
return Py_None;
|
||||||
|
}
|
||||||
|
|
||||||
|
perspmat =
|
||||||
|
( PyObject * ) newMatrixObject( ( float * ) G.vd->persmat, 4,
|
||||||
|
4 );
|
||||||
|
|
||||||
|
if( !perspmat )
|
||||||
|
return EXPP_ReturnPyObjError( PyExc_MemoryError,
|
||||||
|
"GetPerspMatrix: couldn't create matrix pyobject" );
|
||||||
|
|
||||||
|
return perspmat;
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *M_Window_EditMode( PyObject * self, PyObject * args )
|
static PyObject *M_Window_EditMode( PyObject * self, PyObject * args )
|
||||||
{
|
{
|
||||||
short status = -1;
|
short status = -1;
|
||||||
@ -1214,7 +1245,7 @@ static PyObject *M_Window_GetScreenInfo( PyObject * self, PyObject * args,
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
PyObject *Window_Init( void )
|
PyObject *Window_Init( void )
|
||||||
{
|
{
|
||||||
PyObject *submodule, *Types, *Qual, *dict;
|
PyObject *submodule, *Types, *Qual, *MButs, *dict;
|
||||||
|
|
||||||
submodule =
|
submodule =
|
||||||
Py_InitModule3( "Blender.Window", M_Window_methods,
|
Py_InitModule3( "Blender.Window", M_Window_methods,
|
||||||
@ -1226,6 +1257,7 @@ PyObject *Window_Init( void )
|
|||||||
|
|
||||||
Types = M_constant_New( );
|
Types = M_constant_New( );
|
||||||
Qual = M_constant_New( );
|
Qual = M_constant_New( );
|
||||||
|
MButs = M_constant_New( );
|
||||||
|
|
||||||
if( Types ) {
|
if( Types ) {
|
||||||
BPy_constant *d = ( BPy_constant * ) Types;
|
BPy_constant *d = ( BPy_constant * ) Types;
|
||||||
@ -1264,5 +1296,15 @@ PyObject *Window_Init( void )
|
|||||||
PyModule_AddObject( submodule, "Qual", Qual );
|
PyModule_AddObject( submodule, "Qual", Qual );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( MButs ) {
|
||||||
|
BPy_constant *d = ( BPy_constant * ) MButs;
|
||||||
|
|
||||||
|
constant_insert( d, "L", PyInt_FromLong( L_MOUSE ) );
|
||||||
|
constant_insert( d, "M", PyInt_FromLong( M_MOUSE ) );
|
||||||
|
constant_insert( d, "R", PyInt_FromLong( R_MOUSE ) );
|
||||||
|
|
||||||
|
PyModule_AddObject( submodule, "MButs", MButs );
|
||||||
|
}
|
||||||
|
|
||||||
return submodule;
|
return submodule;
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ static PyObject *World_setMist( BPy_World * self, PyObject * args );
|
|||||||
static PyObject *World_getScriptLinks( BPy_World * self, PyObject * args );
|
static PyObject *World_getScriptLinks( BPy_World * self, PyObject * args );
|
||||||
static PyObject *World_addScriptLink( BPy_World * self, PyObject * args );
|
static PyObject *World_addScriptLink( BPy_World * self, PyObject * args );
|
||||||
static PyObject *World_clearScriptLinks( BPy_World * self );
|
static PyObject *World_clearScriptLinks( BPy_World * self );
|
||||||
static PyObject *World_makeActive( BPy_World * self );
|
static PyObject *World_setCurrent( BPy_World * self );
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@ -94,7 +94,7 @@ static PyObject *World_makeActive( BPy_World * self );
|
|||||||
static PyObject *M_World_New( PyObject * self, PyObject * args,
|
static PyObject *M_World_New( PyObject * self, PyObject * args,
|
||||||
PyObject * keywords );
|
PyObject * keywords );
|
||||||
static PyObject *M_World_Get( PyObject * self, PyObject * args );
|
static PyObject *M_World_Get( PyObject * self, PyObject * args );
|
||||||
static PyObject *M_World_GetActive( PyObject * self );
|
static PyObject *M_World_GetCurrent( PyObject * self );
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@ -123,7 +123,7 @@ static char M_World_Get_doc[] =
|
|||||||
"(name) - return the world with the name 'name', \
|
"(name) - return the world with the name 'name', \
|
||||||
returns None if not found.\n If 'name' is not specified, \
|
returns None if not found.\n If 'name' is not specified, \
|
||||||
it returns a list of all worlds in the\ncurrent scene.";
|
it returns a list of all worlds in the\ncurrent scene.";
|
||||||
static char M_World_GetActive_doc[] = "() - returns the current world, or \
|
static char M_World_GetCurrent_doc[] = "() - returns the current world, or \
|
||||||
None if the Scene has no world";
|
None if the Scene has no world";
|
||||||
|
|
||||||
|
|
||||||
@ -135,8 +135,10 @@ struct PyMethodDef M_World_methods[] = {
|
|||||||
{"New", ( PyCFunction ) M_World_New, METH_VARARGS | METH_KEYWORDS,
|
{"New", ( PyCFunction ) M_World_New, METH_VARARGS | METH_KEYWORDS,
|
||||||
M_World_New_doc},
|
M_World_New_doc},
|
||||||
{"Get", M_World_Get, METH_VARARGS, M_World_Get_doc},
|
{"Get", M_World_Get, METH_VARARGS, M_World_Get_doc},
|
||||||
{"GetActive", ( PyCFunction ) M_World_GetActive, METH_NOARGS,
|
{"GetActive", ( PyCFunction ) M_World_GetCurrent, METH_NOARGS,
|
||||||
M_World_GetActive_doc},
|
M_World_GetCurrent_doc},
|
||||||
|
{"GetCurrent", ( PyCFunction ) M_World_GetCurrent, METH_NOARGS,
|
||||||
|
M_World_GetCurrent_doc},
|
||||||
{"get", M_World_Get, METH_VARARGS, M_World_Get_doc},
|
{"get", M_World_Get, METH_VARARGS, M_World_Get_doc},
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
@ -200,8 +202,10 @@ static PyMethodDef BPy_World_methods[] = {
|
|||||||
{"clearScriptLinks", ( PyCFunction ) World_clearScriptLinks,
|
{"clearScriptLinks", ( PyCFunction ) World_clearScriptLinks,
|
||||||
METH_NOARGS,
|
METH_NOARGS,
|
||||||
"() - Delete all scriptlinks from this world :)."},
|
"() - Delete all scriptlinks from this world :)."},
|
||||||
{"makeActive", ( PyCFunction ) World_makeActive, METH_NOARGS,
|
{"setCurrent", ( PyCFunction ) World_setCurrent, METH_NOARGS,
|
||||||
"() - Makes this world the active world for the current scene."},
|
"() - Makes this world the active world for the current scene."},
|
||||||
|
{"makeActive", ( PyCFunction ) World_setCurrent, METH_NOARGS,
|
||||||
|
"please use setCurrent instead, this alias will be removed."},
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -357,7 +361,7 @@ static PyObject *M_World_Get( PyObject * self, PyObject * args )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static PyObject *M_World_GetActive( PyObject * self )
|
static PyObject *M_World_GetCurrent( PyObject * self )
|
||||||
{
|
{
|
||||||
BPy_World *w = NULL;
|
BPy_World *w = NULL;
|
||||||
if( !G.scene->world ) {
|
if( !G.scene->world ) {
|
||||||
@ -864,8 +868,8 @@ static PyObject *World_getScriptLinks( BPy_World * self, PyObject * args )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* world.makeActive */
|
/* world.setCurrent */
|
||||||
static PyObject *World_makeActive( BPy_World * self )
|
static PyObject *World_setCurrent( BPy_World * self )
|
||||||
{
|
{
|
||||||
World *world = self->world;
|
World *world = self->world;
|
||||||
/* If there is a world then it now has one less user */
|
/* If there is a world then it now has one less user */
|
||||||
|
@ -34,11 +34,13 @@ The Blender Python API Reference
|
|||||||
- L{Scene} (*)
|
- L{Scene} (*)
|
||||||
- L{Radio}
|
- L{Radio}
|
||||||
- L{Render}
|
- L{Render}
|
||||||
|
- L{Sound} (new)
|
||||||
- L{Text}
|
- L{Text}
|
||||||
- L{Texture}
|
- L{Texture}
|
||||||
- L{Types}
|
- L{Types}
|
||||||
- L{Window}
|
- L{Window} (*)
|
||||||
- L{World}
|
- L{Theme} (new)
|
||||||
|
- L{World} (*)
|
||||||
- L{sys<Sys>}
|
- L{sys<Sys>}
|
||||||
|
|
||||||
(*) - marks updated.
|
(*) - marks updated.
|
||||||
|
@ -74,6 +74,9 @@ Example::
|
|||||||
#
|
#
|
||||||
Draw.Register(show_win, ev, None) # start the main loop
|
Draw.Register(show_win, ev, None) # start the main loop
|
||||||
|
|
||||||
|
@note: you can use the L{Image} module and L{Image.Image} bpy object to load
|
||||||
|
and set textures. See L{Image.Image.glLoad} and L{Image.Image.glFree},
|
||||||
|
for example.
|
||||||
@see: U{www.opengl.org}
|
@see: U{www.opengl.org}
|
||||||
@see: U{nehe.gamedev.net}
|
@see: U{nehe.gamedev.net}
|
||||||
"""
|
"""
|
||||||
|
@ -6,7 +6,7 @@ The Blender.Image submodule.
|
|||||||
Image
|
Image
|
||||||
=====
|
=====
|
||||||
|
|
||||||
B{New}: L{Image.reload}, L{Image.getBindCode}.
|
B{New}: L{Image.glLoad}, L{Image.glFree}.
|
||||||
|
|
||||||
This module provides access to B{Image} objects in Blender.
|
This module provides access to B{Image} objects in Blender.
|
||||||
|
|
||||||
@ -110,8 +110,8 @@ class Image:
|
|||||||
|
|
||||||
def getBindCode():
|
def getBindCode():
|
||||||
"""
|
"""
|
||||||
Get the Image's bindcode. This is for texture loading using BGL calls,
|
Get the Image's bindcode. This is for texture loading using BGL calls.
|
||||||
see for example L{BGL.glBindTexture}.
|
See, for example, L{BGL.glBindTexture} and L{glLoad}.
|
||||||
@rtype: int
|
@rtype: int
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -125,6 +125,29 @@ class Image:
|
|||||||
@returns: None
|
@returns: None
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def glLoad():
|
||||||
|
"""
|
||||||
|
Load this image's data into OpenGL texture memory, if it is not already
|
||||||
|
loaded (image.bindcode is 0 if it is not loaded yet).
|
||||||
|
@note: Usually you don't need to call this method. It is only necessary
|
||||||
|
if you want to draw textured objects in the Scripts window and the
|
||||||
|
image's bind code is zero at that moment, otherwise Blender itself can
|
||||||
|
take care of binding / unbinding textures. Calling this method for an
|
||||||
|
image with nonzero bind code simply returns the image's bind code value
|
||||||
|
(see L{getBindCode}).
|
||||||
|
@rtype: int
|
||||||
|
@returns: the texture's bind code.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def glFree():
|
||||||
|
"""
|
||||||
|
Delete this image's data from OpenGL texture memory, only (the image itself
|
||||||
|
is not removed from Blender's memory). Internally, glDeleteTextures (see
|
||||||
|
L{BGL.glDeleteTextures}) is used, but this method also updates Blender's
|
||||||
|
Image object so that its bind code is set to 0. See also L{Image.glLoad},
|
||||||
|
L{Image.getBindCode}.
|
||||||
|
"""
|
||||||
|
|
||||||
def setName(name):
|
def setName(name):
|
||||||
"""
|
"""
|
||||||
Set the name of this Image object.
|
Set the name of this Image object.
|
||||||
|
@ -3,7 +3,8 @@
|
|||||||
"""
|
"""
|
||||||
The Blender.Object submodule
|
The Blender.Object submodule
|
||||||
|
|
||||||
B{New}: 'oldlocal' parameter in L{Object.Object.getMatrix}.
|
B{New}: 'old_worldspace' parameter in L{Object.Object.getMatrix}, which now
|
||||||
|
defaults to 'worldspace'.
|
||||||
|
|
||||||
Object
|
Object
|
||||||
======
|
======
|
||||||
@ -146,7 +147,7 @@ class Object:
|
|||||||
@cvar data: The data of the object. (Read-only)
|
@cvar data: The data of the object. (Read-only)
|
||||||
@cvar ipo: The ipo data associated with the object. (Read-only)
|
@cvar ipo: The ipo data associated with the object. (Read-only)
|
||||||
@cvar mat: The matrix of the object relative to its parent. (Read-only)
|
@cvar mat: The matrix of the object relative to its parent. (Read-only)
|
||||||
@cvar matrix: The matrix of the object relative to its parent. (Read-only)
|
@cvar matrix: The matrix of the object in world space. (Read-only)
|
||||||
@cvar matrixLocal: The matrix of the object relative to its parent. (Read-only)
|
@cvar matrixLocal: The matrix of the object relative to its parent. (Read-only)
|
||||||
@cvar matrixWorld: The matrix of the object in world space. (Read-only)
|
@cvar matrixWorld: The matrix of the object in world space. (Read-only)
|
||||||
@cvar colbits: The Material usage mask. A set bit #n means: the Material
|
@cvar colbits: The Material usage mask. A set bit #n means: the Material
|
||||||
@ -287,17 +288,17 @@ class Object:
|
|||||||
@return: list of Material Objects assigned to the object.
|
@return: list of Material Objects assigned to the object.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def getMatrix(space = 'localspace'):
|
def getMatrix(space = 'worldspace'):
|
||||||
"""
|
"""
|
||||||
Returns the object matrix.
|
Returns the object matrix.
|
||||||
@type space: string
|
@type space: string
|
||||||
@param space: The desired matrix:
|
@param space: The desired matrix:
|
||||||
- localspace (default): relative to the object's parent;
|
- worldspace (default): absolute, taking vertex parents, tracking and
|
||||||
- worldspace: absolute, taking vertex parents, tracking and ipo's into
|
ipo's into account;
|
||||||
account;
|
- localspace: relative to the object's parent;
|
||||||
- oldlocal: old behavior, prior to Blender 2.34, where eventual changes
|
- old_worldspace: old behavior, prior to Blender 2.34, where eventual
|
||||||
made by the script itself were not taken into account until the
|
changes made by the script itself were not taken into account until
|
||||||
script finished executing.
|
a redraw happened, either called by the script or upon its exit.
|
||||||
Returns the object matrix.
|
Returns the object matrix.
|
||||||
@rtype: Py_Matrix
|
@rtype: Py_Matrix
|
||||||
@return: a python 4x4 matrix object
|
@return: a python 4x4 matrix object
|
||||||
|
112
source/blender/python/api2_2x/doc/Sound.py
Normal file
112
source/blender/python/api2_2x/doc/Sound.py
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
# Blender.Sound module and the Sound PyType object
|
||||||
|
|
||||||
|
"""
|
||||||
|
The Blender.Sound submodule.
|
||||||
|
|
||||||
|
Sound
|
||||||
|
=====
|
||||||
|
|
||||||
|
This module provides access to B{Sound} objects in Blender.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
import Blender
|
||||||
|
from Blender import Sound
|
||||||
|
#
|
||||||
|
sound = Sound.Load("/path/to/my/sound.wav") # load a sound file
|
||||||
|
print "Sound from", sound.getFilename(),
|
||||||
|
print "loaded to obj", sound.getName())
|
||||||
|
print "All Sounds available now:", Sound.Get()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def Load (filename):
|
||||||
|
"""
|
||||||
|
Load the sound called 'filename' into a Sound object.
|
||||||
|
@type filename: string
|
||||||
|
@param filename: The full path to the sound file.
|
||||||
|
@rtype: Blender Sound
|
||||||
|
@return: A Blender Sound object with the data from I{filename}.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def Get (name = None):
|
||||||
|
"""
|
||||||
|
Get the Sound object(s) from Blender.
|
||||||
|
@type name: string
|
||||||
|
@param name: The name of the Sound object.
|
||||||
|
@rtype: Blender Sound or a list of Blender Sounds
|
||||||
|
@return: It depends on the I{name} parameter:
|
||||||
|
- (name): The Sound object called I{name}, None if not found;
|
||||||
|
- (): A list with all Sound objects in the current scene.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Sound:
|
||||||
|
"""
|
||||||
|
The Sound object
|
||||||
|
================
|
||||||
|
This object gives access to Sounds in Blender.
|
||||||
|
@cvar name: The name of this Sound object.
|
||||||
|
@cvar filename: The filename (path) to the sound file loaded into this Sound
|
||||||
|
object.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def getName():
|
||||||
|
"""
|
||||||
|
Get the name of this Sound object.
|
||||||
|
@rtype: string
|
||||||
|
"""
|
||||||
|
|
||||||
|
def getFilename():
|
||||||
|
"""
|
||||||
|
Get the filename of the sound file loaded into this Sound object.
|
||||||
|
@rtype: string
|
||||||
|
"""
|
||||||
|
|
||||||
|
def play():
|
||||||
|
"""
|
||||||
|
Play this sound.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def setCurrent():
|
||||||
|
"""
|
||||||
|
Make this the active sound in the sound buttons window (also redraws).
|
||||||
|
"""
|
||||||
|
|
||||||
|
def getVolume():
|
||||||
|
"""
|
||||||
|
Get this sound's volume.
|
||||||
|
rtype: float
|
||||||
|
"""
|
||||||
|
|
||||||
|
def setVolume(f):
|
||||||
|
"""
|
||||||
|
Set this sound's volume.
|
||||||
|
@type f: float
|
||||||
|
@param f: the new volume value in the range [0.0, 1.0].
|
||||||
|
"""
|
||||||
|
|
||||||
|
def getAttenuation():
|
||||||
|
"""
|
||||||
|
Get this sound's attenuation value.
|
||||||
|
rtype: float
|
||||||
|
"""
|
||||||
|
|
||||||
|
def setAttenuation(f):
|
||||||
|
"""
|
||||||
|
Set this sound's attenuation.
|
||||||
|
@type f: float
|
||||||
|
@param f: the new attenuation value in the range [0.0, 5.0].
|
||||||
|
"""
|
||||||
|
|
||||||
|
def getPitch():
|
||||||
|
"""
|
||||||
|
Get this sound's pitch value.
|
||||||
|
rtype: float
|
||||||
|
"""
|
||||||
|
|
||||||
|
def setPitch(f):
|
||||||
|
"""
|
||||||
|
Set this sound's pitch.
|
||||||
|
@type f: float
|
||||||
|
@param f: the new pitch value in the range [-12.0, 12.0].
|
||||||
|
"""
|
||||||
|
|
188
source/blender/python/api2_2x/doc/Theme.py
Normal file
188
source/blender/python/api2_2x/doc/Theme.py
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
# Blender.Window.Theme submodule and the Theme PyType object
|
||||||
|
|
||||||
|
"""
|
||||||
|
The Blender.Window.Theme submodule.
|
||||||
|
|
||||||
|
Theme
|
||||||
|
=====
|
||||||
|
|
||||||
|
This module provides access to B{Theme} objects in Blender.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
# this is a simplified version of the save_theme.py script
|
||||||
|
# shipped with Blender:
|
||||||
|
import Blender
|
||||||
|
from Blender.Window import Theme, FileSelector
|
||||||
|
|
||||||
|
theme = Theme.Get()[0] # get current theme
|
||||||
|
|
||||||
|
def write_theme(filename):
|
||||||
|
"Write the current theme as a bpython script"
|
||||||
|
|
||||||
|
f = file(filename, "w")
|
||||||
|
|
||||||
|
f.write("import Blender")
|
||||||
|
f.write("from Blender.Window import Theme")
|
||||||
|
f.write("theme = Theme.New('%s')" % theme.name)
|
||||||
|
|
||||||
|
for tsp in theme.get(): # write each theme space
|
||||||
|
command = "\\n%s = theme.get('%s')" % (tsp, tsp)
|
||||||
|
f.write(command + "\\n")
|
||||||
|
exec(command)
|
||||||
|
exec("vars = dir(%s)" % tsp)
|
||||||
|
vars.remove('theme')
|
||||||
|
|
||||||
|
for var in vars: # write each variable from each theme space
|
||||||
|
v = "%s.%s" % (tsp, var)
|
||||||
|
exec("value = %s" % v)
|
||||||
|
f.write("%s = %s\\n" % (v, value))
|
||||||
|
|
||||||
|
f.write('\\nBlender.Redraw(-1)') # redraw to update the screen
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
FileSelector(write_theme, "Save Current Theme", default_fname)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def New (name = "New Theme", theme = '<default>'):
|
||||||
|
"""
|
||||||
|
Create a new Theme object.
|
||||||
|
@type name: string
|
||||||
|
@param name: The name of the new theme.
|
||||||
|
@type theme: Blender Theme
|
||||||
|
@param theme: a base theme to copy all data from. It defaults to the current
|
||||||
|
one.
|
||||||
|
@rtype: Blender Theme
|
||||||
|
@return: A new Blender Theme object.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def Get (name = None):
|
||||||
|
"""
|
||||||
|
Get the Theme object(s) from Blender.
|
||||||
|
@type name: string
|
||||||
|
@param name: The name of the Theme object.
|
||||||
|
@rtype: Blender Theme or a list of Blender Themes
|
||||||
|
@return: It depends on the I{name} parameter:
|
||||||
|
- (name): The Theme object called I{name}, None if not found;
|
||||||
|
- (): A list with all Theme objects currently in Blender.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Theme:
|
||||||
|
"""
|
||||||
|
The Theme object
|
||||||
|
================
|
||||||
|
This object gives access to Themes in Blender. Each Theme object is
|
||||||
|
composed of one UI (Use Interface) theme and many Space themes
|
||||||
|
(3d view, Text Editor, Buttons window, etc).
|
||||||
|
@cvar name: The name of this Theme object.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def getName():
|
||||||
|
"""
|
||||||
|
Get the name of this Theme object.
|
||||||
|
@rtype: string
|
||||||
|
@return: the name of this Theme object.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def setName(s):
|
||||||
|
"""
|
||||||
|
Rename this theme.
|
||||||
|
@type s: string
|
||||||
|
@param s: the new name.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get(t = None):
|
||||||
|
"""
|
||||||
|
Get a space or the ui (sub)theme from this Theme.
|
||||||
|
@type t: string, int or None
|
||||||
|
@param t: the wanted sub-theme as either:
|
||||||
|
- int: -1 for UI or the types in L{Window.Types} for the others;
|
||||||
|
- string: use get() to know them (they are case insensitive);
|
||||||
|
- nothing: as written above, get() returns a list of names.
|
||||||
|
@rtype: Blender ThemeSpace or ThemeUI or list of sub-theme types as strings.
|
||||||
|
@return: It depends on the given parameter:
|
||||||
|
- (): a list with all available types, as strings;
|
||||||
|
- (type): the chosen sub-theme.
|
||||||
|
"""
|
||||||
|
|
||||||
|
class ThemeUI:
|
||||||
|
"""
|
||||||
|
The User Interface sub-theme
|
||||||
|
============================
|
||||||
|
This can be accessed with theme.get(t), where t can be 'ui' or -1.
|
||||||
|
The available variables follow the internal (C coded) ThemeUI struct in
|
||||||
|
Blender. Most of them represent rgba (red, green, blue, alpha) colors,
|
||||||
|
with each component in the range [0, 255]. There is more than one way to
|
||||||
|
access them.
|
||||||
|
|
||||||
|
Examples::
|
||||||
|
print outline.R
|
||||||
|
outline.r = 180 # it's case insensitive
|
||||||
|
outline[0] = 94 # 0 for red, 1 for green, ...
|
||||||
|
outline = [200, 200, 200, 255] # setting all components at once
|
||||||
|
@type theme: string
|
||||||
|
@cvar theme: the parent Theme for this object.
|
||||||
|
@cvar outline: theme rgba var.
|
||||||
|
@cvar neutral: theme rgba var.
|
||||||
|
@cvar action: theme rgba var.
|
||||||
|
@cvar setting: theme rgba var.
|
||||||
|
@cvar setting1: theme rgba var.
|
||||||
|
@cvar setting2: theme rgba var.
|
||||||
|
@cvar num: theme rgba var.
|
||||||
|
@cvar textfield: theme rgba var.
|
||||||
|
@cvar popup: theme rgba var.
|
||||||
|
@cvar text: theme rgba var.
|
||||||
|
@cvar text_hi: theme rgba var.
|
||||||
|
@cvar menu_back: theme rgba var.
|
||||||
|
@cvar menu_item: theme rgba var.
|
||||||
|
@cvar menu_hilite: theme rgba var.
|
||||||
|
@cvar menu_text: theme rgba var.
|
||||||
|
@cvar menu_text_hi: theme rgba var.
|
||||||
|
@type drawType: int
|
||||||
|
@cvar drawType: the draw type (minimal, rounded, etc) in the range [1, 4].
|
||||||
|
"""
|
||||||
|
|
||||||
|
class ThemeSpace:
|
||||||
|
"""
|
||||||
|
The Space sub-themes
|
||||||
|
====================
|
||||||
|
There is a sub-theme for each space in Blender (except for the Scripts
|
||||||
|
window, but it will be added soon). Please read the information about
|
||||||
|
L{Theme.ThemeUI}, since it is also relevant here. In Blender,
|
||||||
|
all theme spaces share the same C structure. For this reason, all of
|
||||||
|
them here share the same variables, event though some spaces only use
|
||||||
|
a few of them. This lower-level access is acceptable because generally
|
||||||
|
users will prefer to use the interface to change single theme options
|
||||||
|
and only use scripting to save or restore themes. But anyway, checking
|
||||||
|
the Themes tab in the User Preferences space in Blender and using the
|
||||||
|
bundled "Save current theme" script (or its simplified version written
|
||||||
|
on the top of this page) can help you finding out any specific info you
|
||||||
|
may need.
|
||||||
|
@type theme: string
|
||||||
|
@cvar theme: the parent Theme for this object.
|
||||||
|
@cvar back: theme rgba var.
|
||||||
|
@cvar text: theme rgba var.
|
||||||
|
@cvar text_hi: theme rgba var.
|
||||||
|
@cvar header: theme rgba var.
|
||||||
|
@cvar panel: theme rgba var.
|
||||||
|
@cvar shade1: theme rgba var.
|
||||||
|
@cvar shade2: theme rgba var.
|
||||||
|
@cvar hilite: theme rgba var.
|
||||||
|
@cvar grid: theme rgba var.
|
||||||
|
@cvar wire: theme rgba var.
|
||||||
|
@cvar select: theme rgba var.
|
||||||
|
@cvar active: theme rgba var.
|
||||||
|
@cvar transform: theme rgba var.
|
||||||
|
@cvar vertex: theme rgba var.
|
||||||
|
@cvar vertex_select: theme rgba var.
|
||||||
|
@cvar edge: theme rgba var.
|
||||||
|
@cvar edge_select: theme rgba var.
|
||||||
|
@cvar edge_seam: theme rgba var.
|
||||||
|
@cvar edge_facesel: theme rgba var.
|
||||||
|
@cvar face: theme rgba var.
|
||||||
|
@cvar face_select: theme rgba var.
|
||||||
|
@cvar normal: theme rgba var.
|
||||||
|
@type vertex_size: int
|
||||||
|
@cvar vertex_size: size of the vertices dots on screen in the range [1, 10].
|
||||||
|
"""
|
||||||
|
|
@ -8,7 +8,7 @@ Window
|
|||||||
|
|
||||||
This module provides access to B{Window} functions in Blender.
|
This module provides access to B{Window} functions in Blender.
|
||||||
|
|
||||||
B{New}: many new functions related to screens and events.
|
B{New}: L{GetPerspMatrix}.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
--------
|
--------
|
||||||
@ -81,6 +81,12 @@ DrawProgressBar::
|
|||||||
- LSHIFT
|
- LSHIFT
|
||||||
- RSHIFT
|
- RSHIFT
|
||||||
- SHIFT
|
- SHIFT
|
||||||
|
|
||||||
|
@type MButs: readonly dictionary
|
||||||
|
@var MButs: Mouse buttons.
|
||||||
|
- L: left mouse button
|
||||||
|
- M: middle mouse button
|
||||||
|
- R: right mouse button
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def Redraw (spacetype = '<Types.VIEW3D>'):
|
def Redraw (spacetype = '<Types.VIEW3D>'):
|
||||||
@ -201,6 +207,13 @@ def GetViewMatrix ():
|
|||||||
@return: the current matrix.
|
@return: the current matrix.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def GetPerspMatrix ():
|
||||||
|
"""
|
||||||
|
Get the current 3d perspective matrix.
|
||||||
|
@rtype: 4x4 float matrix
|
||||||
|
@return: the current matrix.
|
||||||
|
"""
|
||||||
|
|
||||||
def EditMode(enable = -1, undo_msg = 'From script'):
|
def EditMode(enable = -1, undo_msg = 'From script'):
|
||||||
"""
|
"""
|
||||||
Get and optionally set the current edit mode status: in or out.
|
Get and optionally set the current edit mode status: in or out.
|
||||||
@ -358,7 +371,7 @@ def SetMouseCoords (coords):
|
|||||||
|
|
||||||
def GetMouseButtons ():
|
def GetMouseButtons ():
|
||||||
"""
|
"""
|
||||||
Get the current mouse button state (compare with events from L{Draw}).
|
Get the current mouse button state (see / compare against L{MButs}).
|
||||||
@rtype: int
|
@rtype: int
|
||||||
@return: an or'ed flag with the currently pressed buttons.
|
@return: an or'ed flag with the currently pressed buttons.
|
||||||
"""
|
"""
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"""
|
"""
|
||||||
The Blender.World submodule
|
The Blender.World submodule
|
||||||
|
|
||||||
B{New}: scriptLink methods: L{World.getScriptLinks}, ...
|
B{New}: L{GetCurrent}, L{World.setCurrent}.
|
||||||
|
|
||||||
INTRODUCTION
|
INTRODUCTION
|
||||||
============
|
============
|
||||||
@ -44,7 +44,7 @@ def New (name):
|
|||||||
@type name: string
|
@type name: string
|
||||||
@param name: World's name (optionnal).
|
@param name: World's name (optionnal).
|
||||||
@rtype: Blender World
|
@rtype: Blender World
|
||||||
@return: The created World. If the "name" paraeter has not been provided, it will be automatically be set by blender.
|
@return: The created World. If the "name" parameter has not been provided, it will be automatically be set by blender.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def Get (name):
|
def Get (name):
|
||||||
@ -59,7 +59,7 @@ def Get (name):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def GetActive ():
|
def GetCurrent ():
|
||||||
"""
|
"""
|
||||||
Get the active world of the scene.
|
Get the active world of the scene.
|
||||||
@rtype: Blender World or None
|
@rtype: Blender World or None
|
||||||
@ -315,7 +315,7 @@ class World:
|
|||||||
@param event: "FrameChanged" or "Redraw".
|
@param event: "FrameChanged" or "Redraw".
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def makeActive ():
|
def setCurrent ():
|
||||||
"""
|
"""
|
||||||
Make this world active in the current scene.
|
Make this world active in the current scene.
|
||||||
@rtype: PyNone
|
@rtype: PyNone
|
||||||
|
@ -67,8 +67,12 @@ static PyObject *M_Theme_Get( PyObject * self, PyObject * args );
|
|||||||
static char M_Theme_doc[] = "The Blender Theme module\n\n\
|
static char M_Theme_doc[] = "The Blender Theme module\n\n\
|
||||||
This module provides access to UI Theme data in Blender";
|
This module provides access to UI Theme data in Blender";
|
||||||
|
|
||||||
static char M_Theme_New_doc[] = "Theme.New (name = 'New Theme'):\n\
|
static char M_Theme_New_doc[] = "Theme.New (name = 'New Theme',\
|
||||||
Return a new Theme Data object with the given type and name.";
|
theme = <default>):\n\
|
||||||
|
Return a new Theme Data object.\n\
|
||||||
|
(name) - string: the Theme's name, it defaults to 'New Theme';\n\
|
||||||
|
(theme) - bpy Theme: a base Theme to copy all data from, it defaults to the\n\
|
||||||
|
current one.";
|
||||||
|
|
||||||
static char M_Theme_Get_doc[] = "Theme.Get (name = None):\n\
|
static char M_Theme_Get_doc[] = "Theme.Get (name = None):\n\
|
||||||
Return the theme data with the given 'name', None if not found, or\n\
|
Return the theme data with the given 'name', None if not found, or\n\
|
||||||
|
@ -473,7 +473,7 @@ void start_game(void)
|
|||||||
|
|
||||||
/* Restart BPY - unload the game engine modules. */
|
/* Restart BPY - unload the game engine modules. */
|
||||||
BPY_end_python();
|
BPY_end_python();
|
||||||
BPY_start_python();
|
BPY_start_python(0, NULL); /* argc, argv stored there already */
|
||||||
BPY_post_start_python(); /* userpref path and menus init */
|
BPY_post_start_python(); /* userpref path and menus init */
|
||||||
|
|
||||||
restore_all_scene_cfra(scene_cfra_store);
|
restore_all_scene_cfra(scene_cfra_store);
|
||||||
|
@ -440,7 +440,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BPY_start_python();
|
BPY_start_python(argc, argv);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NOTE: sound_init_audio() *must be* after start_python,
|
* NOTE: sound_init_audio() *must be* after start_python,
|
||||||
@ -452,7 +452,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
BPY_start_python();
|
BPY_start_python(argc, argv);
|
||||||
|
|
||||||
// (ton) Commented out. I have no idea whats thisfor... will mail around!
|
// (ton) Commented out. I have no idea whats thisfor... will mail around!
|
||||||
// SYS_WriteCommandLineInt(syshandle,"noaudio",1);
|
// SYS_WriteCommandLineInt(syshandle,"noaudio",1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user