Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWillian Padovani Germano <wpgermano@gmail.com>2004-04-25 18:43:21 +0400
committerWillian Padovani Germano <wpgermano@gmail.com>2004-04-25 18:43:21 +0400
commit2d24298b91f895f8f894591c0a7c9b857213be94 (patch)
treecbf963f6abfc02d83eab2380e53e0a029de77f7a
parent395c1152c80d781b386125ca8da605f3893aa322 (diff)
BPython:
-- epydoc Documentation for eeshlo's Noise module + small typo fix in Noise.c -- BPY_end_python closes .blend file opened by Library module when script doesn't do it by itself.
-rw-r--r--source/blender/python/BPY_interface.c837
-rw-r--r--source/blender/python/api2_2x/EXPP_interface.h3
-rw-r--r--source/blender/python/api2_2x/Library.c17
-rw-r--r--source/blender/python/api2_2x/Noise.c37
-rw-r--r--source/blender/python/api2_2x/doc/Blender.py11
-rw-r--r--source/blender/python/api2_2x/doc/Library.py4
-rw-r--r--source/blender/python/api2_2x/doc/Noise.py300
7 files changed, 783 insertions, 426 deletions
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index 3ff3a9599b9..433e7c750fa 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -17,7 +17,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
@@ -72,216 +72,219 @@
#include "api2_2x/constant.h"
/* bpy_registryDict is declared in api2_2x/Registry.h and defined
- * here. This Python dictionary will be used to store data that scripts
+ * here. This Python dictionary will be used to store data that scripts
* choose to preserve after they are executed, so user changes can be
* restored next time the script is used. Check the Blender.Registry module. */
extern PyObject *bpy_registryDict;
/*****************************************************************************/
-/* Structure definitions */
+/* Structure definitions */
/*****************************************************************************/
#define FILENAME_LENGTH 24
typedef struct _ScriptError {
- char filename[FILENAME_LENGTH];
- int lineno;
+ char filename[FILENAME_LENGTH];
+ int lineno;
} ScriptError;
/*****************************************************************************/
-/* Global variables */
+/* Global variables */
/*****************************************************************************/
ScriptError g_script_error;
/*****************************************************************************/
-/* Function prototypes */
+/* Function prototypes */
/*****************************************************************************/
PyObject *RunPython(Text *text, PyObject *globaldict);
-char *GetName(Text *text);
+char *GetName(Text *text);
PyObject *CreateGlobalDictionary (void);
-void ReleaseGlobalDictionary (PyObject * dict);
-void DoAllScriptsFromList (ListBase * list, short event);
+void ReleaseGlobalDictionary (PyObject * dict);
+void DoAllScriptsFromList (ListBase * list, short event);
PyObject *importText(char *name);
void init_ourImport(void);
PyObject *blender_import(PyObject *self, PyObject *args);
/*****************************************************************************/
/* Description: This function will initialise Python and all the implemented */
-/* api variations. */
-/* Notes: Currently only the api for 2.2x will be initialised. */
+/* api variations. */
+/* Notes: Currently only the api for 2.2x will be initialised. */
/*****************************************************************************/
void BPY_start_python(void)
{
- bpy_registryDict = PyDict_New(); /* check comment at start of this file */
+ bpy_registryDict = PyDict_New(); /* check comment at start of this file */
- if (!bpy_registryDict)
- printf("Error: Couldn't create the Registry Python Dictionary!");
+ if (!bpy_registryDict)
+ 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");
- Py_Initialize ();
+ Py_Initialize ();
- init_ourImport ();
+ init_ourImport ();
- initBlenderApi2_2x ();
+ initBlenderApi2_2x ();
- init_syspath();
+ init_syspath();
- return;
+ return;
}
/*****************************************************************************/
-/* Description: This function will terminate the Python interpreter */
+/* Description: This function will terminate the Python interpreter */
/*****************************************************************************/
void BPY_end_python(void)
{
- if (bpy_registryDict) {
- Py_DECREF (bpy_registryDict);
- bpy_registryDict = NULL;
- }
+ if (bpy_registryDict) {
+ Py_DECREF (bpy_registryDict);
+ bpy_registryDict = NULL;
+ }
- Py_Finalize();
+ Py_Finalize();
BPyMenu_RemoveAllEntries(); /* freeing bpymenu mem */
- return;
+ /* a script might've opened a .blend file but didn't close it, so: */
+ EXPP_Library_Close();
+
+ return;
}
void syspath_append(char *dirname)
{
- PyObject *mod_sys, *dict, *path, *dir;
+ PyObject *mod_sys, *dict, *path, *dir;
- PyErr_Clear();
+ PyErr_Clear();
dir = Py_BuildValue("s", dirname);
- mod_sys = PyImport_ImportModule("sys"); /* new ref */
- dict = PyModule_GetDict(mod_sys); /* borrowed ref */
- path = PyDict_GetItemString(dict, "path"); /* borrowed ref */
+ mod_sys = PyImport_ImportModule("sys"); /* new ref */
+ dict = PyModule_GetDict(mod_sys); /* borrowed ref */
+ path = PyDict_GetItemString(dict, "path"); /* borrowed ref */
- if (!PyList_Check(path)) return;
+ if (!PyList_Check(path)) return;
- PyList_Append(path, dir);
+ PyList_Append(path, dir);
- if (PyErr_Occurred()) Py_FatalError("could not build sys.path");
+ if (PyErr_Occurred()) Py_FatalError("could not build sys.path");
- Py_DECREF(mod_sys);
+ Py_DECREF(mod_sys);
}
void init_syspath(void)
{
- PyObject *path;
- PyObject *mod, *d;
- PyObject *p;
- char *c, *progname;
- char execdir[FILE_MAXDIR + FILE_MAXFILE];/*defines from DNA_space_types.h*/
+ PyObject *path;
+ PyObject *mod, *d;
+ PyObject *p;
+ char *c, *progname;
+ char execdir[FILE_MAXDIR + FILE_MAXFILE];/*defines from DNA_space_types.h*/
- int n;
+ int n;
- path = Py_BuildValue("s", bprogname);
+ path = Py_BuildValue("s", bprogname);
- mod = PyImport_ImportModule("Blender.sys");
+ mod = PyImport_ImportModule("Blender.sys");
- if (mod) {
- d = PyModule_GetDict(mod);
- PyDict_SetItemString(d, "progname", path);
- Py_DECREF(mod);
- }
- else
- printf("Warning: could not set Blender.sys.progname\n");
+ if (mod) {
+ d = PyModule_GetDict(mod);
+ PyDict_SetItemString(d, "progname", path);
+ Py_DECREF(mod);
+ }
+ else
+ printf("Warning: could not set Blender.sys.progname\n");
- progname = BLI_last_slash(bprogname); /* looks for the last dir separator */
+ progname = BLI_last_slash(bprogname); /* looks for the last dir separator */
- c = Py_GetPath(); /* get python system path */
- PySys_SetPath(c); /* initialize */
+ c = Py_GetPath(); /* get python system path */
+ PySys_SetPath(c); /* initialize */
- n = progname - bprogname;
- if (n > 0) {
- strncpy(execdir, bprogname, n);
- if (execdir[n-1] == '.') n--; /*fix for when run as ./blender */
- execdir[n] = '\0';
+ n = progname - bprogname;
+ if (n > 0) {
+ strncpy(execdir, bprogname, n);
+ if (execdir[n-1] == '.') n--; /*fix for when run as ./blender */
+ execdir[n] = '\0';
- syspath_append(execdir); /* append to module search path */
+ syspath_append(execdir); /* append to module search path */
- /* set Blender.sys.progname */
- }
- else
- printf ("Warning: could not determine argv[0] path\n");
+ /* set Blender.sys.progname */
+ }
+ else
+ printf ("Warning: could not determine argv[0] path\n");
- /*
- * bring in the site module so we can add
- * site-package dirs to sys.path
- */
+ /*
+ * bring in the site module so we can add
+ * site-package dirs to sys.path
+ */
- mod = PyImport_ImportModule("site"); /* new ref */
+ mod = PyImport_ImportModule("site"); /* new ref */
- if (mod) {
- PyObject* item;
- int size = 0;
- int index;
+ if (mod) {
+ PyObject* item;
+ int size = 0;
+ int index;
- /* get the value of 'sitedirs' from the module */
+ /* get the value of 'sitedirs' from the module */
- /* the ref man says GetDict() never fails!!! */
- d = PyModule_GetDict (mod); /* borrowed ref */
- p = PyDict_GetItemString (d, "sitedirs"); /* borrowed ref */
+ /* the ref man says GetDict() never fails!!! */
+ d = PyModule_GetDict (mod); /* borrowed ref */
+ p = PyDict_GetItemString (d, "sitedirs"); /* borrowed ref */
- if( p ) { /* we got our string */
- /* append each item in sitedirs list to path */
- size = PyList_Size (p);
+ if( p ) { /* we got our string */
+ /* append each item in sitedirs list to path */
+ size = PyList_Size (p);
- for (index = 0; index < size; index++) {
- item = PySequence_GetItem (p, index); /* new ref */
+ for (index = 0; index < size; index++) {
+ item = PySequence_GetItem (p, index); /* new ref */
if( item )
- syspath_append (PyString_AsString(item));
- }
- }
- Py_DECREF(mod);
- }
- else { /* import 'site' failed */
- PyErr_Clear();
- printf("sys_init:warning - no sitedirs added from site module.\n");
- }
-
- /*
- * initialize the sys module
- * set sys.executable to the Blender exe
- * set argv[0] to the Blender exe
- */
-
- mod = PyImport_ImportModule("sys"); /* new ref */
-
- if (mod) {
- d = PyModule_GetDict(mod); /* borrowed ref */
- PyDict_SetItemString(d, "executable", 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);
- }
+ syspath_append (PyString_AsString(item));
+ }
+ }
+ Py_DECREF(mod);
+ }
+ else { /* import 'site' failed */
+ PyErr_Clear();
+ printf("sys_init:warning - no sitedirs added from site module.\n");
+ }
+
+ /*
+ * initialize the sys module
+ * set sys.executable to the Blender exe
+ * set argv[0] to the Blender exe
+ */
+
+ mod = PyImport_ImportModule("sys"); /* new ref */
+
+ if (mod) {
+ d = PyModule_GetDict(mod); /* borrowed ref */
+ PyDict_SetItemString(d, "executable", 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);
+ }
}
/*****************************************************************************/
-/* Description: This function finishes Python initialization in Blender. */
-/* Because U.pythondir (user defined dir for scripts) isn't */
-/* initialized when BPY_start_Python needs to be executed, we */
-/* postpone adding U.pythondir to sys.path and also BPyMenus */
-/* (mechanism to register scripts in Blender menus) for when */
-/* that dir info is available. */
+/* Description: This function finishes Python initialization in Blender. */
+/* Because U.pythondir (user defined dir for scripts) isn't */
+/* initialized when BPY_start_Python needs to be executed, we */
+/* postpone adding U.pythondir to sys.path and also BPyMenus */
+/* (mechanism to register scripts in Blender menus) for when */
+/* that dir info is available. */
/*****************************************************************************/
void BPY_post_start_python(void)
{
- if (U.pythondir && U.pythondir[0] != '\0')
- syspath_append(U.pythondir); /* append to module search path */
+ if (U.pythondir && U.pythondir[0] != '\0')
+ syspath_append(U.pythondir); /* append to module search path */
BPyMenu_Init(0); /* get dynamic menus (registered scripts) data */
}
/*****************************************************************************/
-/* Description: This function will return the linenumber on which an error */
-/* has occurred in the Python script. */
+/* Description: This function will return the linenumber on which an error */
+/* has occurred in the Python script. */
/*****************************************************************************/
int BPY_Err_getLinenumber(void)
{
- return g_script_error.lineno;
+ return g_script_error.lineno;
}
/*****************************************************************************/
@@ -289,112 +292,112 @@ int BPY_Err_getLinenumber(void)
/*****************************************************************************/
const char *BPY_Err_getFilename(void)
{
- return g_script_error.filename;
+ return g_script_error.filename;
}
/*****************************************************************************/
-/* Description: Return PyString filename from a traceback object */
+/* Description: Return PyString filename from a traceback object */
/*****************************************************************************/
PyObject *traceback_getFilename(PyObject *tb)
{
- PyObject *v;
+ PyObject *v;
/* co_filename is in f_code, which is in tb_frame, which is in tb */
- v = PyObject_GetAttrString(tb, "tb_frame"); Py_XDECREF(v);
- v = PyObject_GetAttrString(v, "f_code"); Py_XDECREF(v);
- v = PyObject_GetAttrString(v, "co_filename");
+ v = PyObject_GetAttrString(tb, "tb_frame"); Py_XDECREF(v);
+ v = PyObject_GetAttrString(v, "f_code"); Py_XDECREF(v);
+ v = PyObject_GetAttrString(v, "co_filename");
- return v;
+ return v;
}
/*****************************************************************************/
-/* Description: Blender Python error handler. This catches the error and */
-/* stores filename and line number in a global */
+/* Description: Blender Python error handler. This catches the error and */
+/* stores filename and line number in a global */
/*****************************************************************************/
void BPY_Err_Handle(char *script_name)
{
- PyObject *exception, *err, *tb, *v;
+ PyObject *exception, *err, *tb, *v;
if (!script_name) {
printf("Error: script has NULL name\n");
return;
}
- PyErr_Fetch(&exception, &err, &tb);
-
- if (!exception && !tb) {
- printf("FATAL: spurious exception\n");
- return;
- }
-
- strcpy(g_script_error.filename, script_name);
-
- if (exception && PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError)) {
- /* no traceback available when SyntaxError */
- PyErr_Restore(exception, err, tb); /* takes away reference! */
- PyErr_Print();
- v = PyObject_GetAttrString(err, "lineno");
- g_script_error.lineno = PyInt_AsLong(v);
- Py_XDECREF(v);
- /* this avoids an abort in Python 2.3's garbage collecting: */
- PyErr_Clear();
- return;
- } else {
- PyErr_NormalizeException(&exception, &err, &tb);
- PyErr_Restore(exception, err, tb); // takes away reference!
- PyErr_Print();
- tb = PySys_GetObject("last_traceback");
-
- if (!tb) {
- printf("\nCan't get traceback\n");
- return;
- }
-
- Py_INCREF(tb);
+ PyErr_Fetch(&exception, &err, &tb);
+
+ if (!exception && !tb) {
+ printf("FATAL: spurious exception\n");
+ return;
+ }
+
+ strcpy(g_script_error.filename, script_name);
+
+ if (exception && PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError)) {
+ /* no traceback available when SyntaxError */
+ PyErr_Restore(exception, err, tb); /* takes away reference! */
+ PyErr_Print();
+ v = PyObject_GetAttrString(err, "lineno");
+ g_script_error.lineno = PyInt_AsLong(v);
+ Py_XDECREF(v);
+ /* this avoids an abort in Python 2.3's garbage collecting: */
+ PyErr_Clear();
+ return;
+ } else {
+ PyErr_NormalizeException(&exception, &err, &tb);
+ PyErr_Restore(exception, err, tb); // takes away reference!
+ PyErr_Print();
+ tb = PySys_GetObject("last_traceback");
+
+ if (!tb) {
+ printf("\nCan't get traceback\n");
+ return;
+ }
+
+ Py_INCREF(tb);
/* From old bpython BPY_main.c:
* 'check traceback objects and look for last traceback in the
- * same text file. This is used to jump to the line of where the
- * error occured. "If the error occured in another text file or module,
- * the last frame in the current file is adressed."' */
-
- while (1) {
- v = PyObject_GetAttrString(tb, "tb_next");
-
- if (v == Py_None || strcmp(PyString_AsString(traceback_getFilename(v)),
- script_name)) {
- break;
- }
-
- Py_DECREF(tb);
- tb = v;
- }
-
- v = PyObject_GetAttrString(tb, "tb_lineno");
- g_script_error.lineno = PyInt_AsLong(v);
- Py_XDECREF(v);
- v = traceback_getFilename(tb);
- strncpy(g_script_error.filename, PyString_AsString(v), FILENAME_LENGTH);
- Py_XDECREF(v);
- Py_DECREF(tb);
- }
-
- return;
+ * same text file. This is used to jump to the line of where the
+ * error occured. "If the error occured in another text file or module,
+ * the last frame in the current file is adressed."' */
+
+ while (1) {
+ v = PyObject_GetAttrString(tb, "tb_next");
+
+ if (v == Py_None || strcmp(PyString_AsString(traceback_getFilename(v)),
+ script_name)) {
+ break;
+ }
+
+ Py_DECREF(tb);
+ tb = v;
+ }
+
+ v = PyObject_GetAttrString(tb, "tb_lineno");
+ g_script_error.lineno = PyInt_AsLong(v);
+ Py_XDECREF(v);
+ v = traceback_getFilename(tb);
+ strncpy(g_script_error.filename, PyString_AsString(v), FILENAME_LENGTH);
+ Py_XDECREF(v);
+ Py_DECREF(tb);
+ }
+
+ return;
}
/*****************************************************************************/
-/* Description: This function executes the script passed by st. */
-/* Notes: It is called by blender/src/drawtext.c when a Blender user */
-/* presses ALT+PKEY in the script's text window. */
+/* Description: This function executes the script passed by st. */
+/* Notes: It is called by blender/src/drawtext.c when a Blender user */
+/* presses ALT+PKEY in the script's text window. */
/*****************************************************************************/
int BPY_txt_do_python_Text(struct Text* text)
{
- PyObject *py_dict, *py_result;
+ PyObject *py_dict, *py_result;
BPy_constant *info;
Script *script = G.main->script.first;
- if (!text) return 0;
+ if (!text) return 0;
/* check if this text is already running */
while (script) {
@@ -435,19 +438,19 @@ int BPY_txt_do_python_Text(struct Text* text)
PyDict_SetItemString(py_dict, "__script__", (PyObject *)info);
}
- clearScriptLinks ();
+ clearScriptLinks ();
- py_result = RunPython (text, py_dict); /* Run the script */
+ py_result = RunPython (text, py_dict); /* Run the script */
if (!py_result) { /* Failed execution of the script */
- BPY_Err_Handle(GetName(text));
+ BPY_Err_Handle(GetName(text));
ReleaseGlobalDictionary(py_dict);
free_libblock(&G.main->script, script);
- //BPY_end_python();
- //BPY_start_python();
+ //BPY_end_python();
+ //BPY_start_python();
- return 0;
+ return 0;
}
else {
Py_DECREF (py_result);
@@ -459,14 +462,14 @@ int BPY_txt_do_python_Text(struct Text* text)
}
}
- return 1; /* normal return */
+ return 1; /* normal return */
}
/*****************************************************************************/
-/* Description: The original function of this name has been refactored */
-/* into BPY_txt_do_python_Text. That version is needed for the command */
-/* line support for Python. This is here to keep the interface the */
-/* same and reduce code changes elsewhere. */
+/* Description: The original function of this name has been refactored */
+/* into BPY_txt_do_python_Text. That version is needed for the command */
+/* line support for Python. This is here to keep the interface the */
+/* same and reduce code changes elsewhere. */
/*****************************************************************************/
int BPY_txt_do_python(struct SpaceText* st)
{
@@ -486,14 +489,14 @@ void BPY_run_python_script(char *fn)
return;
}
- text = add_text(fn);
- if (text == NULL) {
+ text = add_text(fn);
+ if (text == NULL) {
printf("Error in BPY_run_python_script: couldn't create Blender text "
"from %s\n", fn);
// On Windows if I continue I just get a segmentation
// violation. To get a baseline file I exit here.
exit(2);
- }
+ }
if (BPY_txt_do_python_Text(text) != 1) {
printf( "\nError executing Python script:\n"
@@ -504,15 +507,15 @@ void BPY_run_python_script(char *fn)
}
/*****************************************************************************/
-/* Description: This function executes the script chosen from a menu. */
-/* Notes: It is called by the ui code in src/header_???.c when a user */
-/* clicks on a menu entry that refers to a script. */
-/* Scripts are searched in the BPyMenuTable, using the given */
-/* menutype and event values to know which one was chosen. */
+/* Description: This function executes the script chosen from a menu. */
+/* Notes: It is called by the ui code in src/header_???.c when a user */
+/* clicks on a menu entry that refers to a script. */
+/* Scripts are searched in the BPyMenuTable, using the given */
+/* menutype and event values to know which one was chosen. */
/*****************************************************************************/
int BPY_menu_do_python(short menutype, int event)
{
- PyObject *py_dict, *py_res, *pyarg = NULL;
+ PyObject *py_dict, *py_res, *pyarg = NULL;
BPy_constant *info;
BPyMenu *pym;
BPySubMenu *pysm;
@@ -596,7 +599,7 @@ int BPY_menu_do_python(short menutype, int event)
PyDict_SetItemString(py_dict, "__script__", (PyObject *)info);
}
- clearScriptLinks ();
+ clearScriptLinks ();
/* Previously we used PyRun_File to run directly the code on a FILE object,
* but as written in the Python/C API Ref Manual, chapter 2,
@@ -643,15 +646,15 @@ int BPY_menu_do_python(short menutype, int event)
if (!py_res) { /* Failed execution of the script */
- BPY_Err_Handle(script->id.name+2);
+ BPY_Err_Handle(script->id.name+2);
PyErr_Print();
ReleaseGlobalDictionary(py_dict);
free_libblock(&G.main->script, script);
- // BPY_end_python();
- // BPY_start_python();
+ // BPY_end_python();
+ // BPY_start_python();
error ("Python script error: check console");
- return 0;
+ return 0;
}
else {
Py_DECREF (py_res);
@@ -673,24 +676,24 @@ int BPY_menu_do_python(short menutype, int event)
}
}
- return 1; /* normal return */
+ return 1; /* normal return */
}
/*****************************************************************************/
-/* Description: */
-/* Notes: */
+/* Description: */
+/* Notes: */
/*****************************************************************************/
void BPY_free_compiled_text(struct Text* text)
{
- if (!text->compiled) return;
- Py_DECREF((PyObject*) text->compiled);
- text->compiled = NULL;
+ if (!text->compiled) return;
+ Py_DECREF((PyObject*) text->compiled);
+ text->compiled = NULL;
- return;
+ return;
}
/*****************************************************************************/
-/* Description: This function frees a finished (flags == 0) script. */
+/* Description: This function frees a finished (flags == 0) script. */
/*****************************************************************************/
void BPY_free_finished_script(Script *script)
{
@@ -743,8 +746,8 @@ void BPY_clear_script (Script *script)
dict = script->py_globaldict;
if (dict) {
- PyDict_Clear (dict);
- Py_DECREF (dict); /* Release dictionary. */
+ PyDict_Clear (dict);
+ Py_DECREF (dict); /* Release dictionary. */
script->py_globaldict = NULL;
}
@@ -752,305 +755,305 @@ void BPY_clear_script (Script *script)
}
/*****************************************************************************/
-/* ScriptLinks */
+/* ScriptLinks */
/*****************************************************************************/
/*****************************************************************************/
-/* Description: */
-/* Notes: Not implemented yet */
+/* Description: */
+/* Notes: Not implemented yet */
/*****************************************************************************/
void BPY_clear_bad_scriptlinks(struct Text *byebye)
{
/*
- BPY_clear_bad_scriptlist(getObjectList(), byebye);
- BPY_clear_bad_scriptlist(getLampList(), byebye);
- BPY_clear_bad_scriptlist(getCameraList(), byebye);
- BPY_clear_bad_scriptlist(getMaterialList(), byebye);
- BPY_clear_bad_scriptlist(getWorldList(), byebye);
- BPY_clear_bad_scriptlink(&scene_getCurrent()->id, byebye);
-
- allqueue(REDRAWBUTSSCRIPT, 0);
+ BPY_clear_bad_scriptlist(getObjectList(), byebye);
+ BPY_clear_bad_scriptlist(getLampList(), byebye);
+ BPY_clear_bad_scriptlist(getCameraList(), byebye);
+ BPY_clear_bad_scriptlist(getMaterialList(), byebye);
+ BPY_clear_bad_scriptlist(getWorldList(), byebye);
+ BPY_clear_bad_scriptlink(&scene_getCurrent()->id, byebye);
+
+ allqueue(REDRAWBUTSSCRIPT, 0);
*/
- return;
+ return;
}
/*****************************************************************************/
-/* Description: Loop through all scripts of a list of object types, and */
-/* execute these scripts. */
-/* For the scene, only the current active scene the scripts are */
-/* executed (if any). */
+/* Description: Loop through all scripts of a list of object types, and */
+/* execute these scripts. */
+/* For the scene, only the current active scene the scripts are */
+/* executed (if any). */
/*****************************************************************************/
void BPY_do_all_scripts(short event)
{
- DoAllScriptsFromList (&(G.main->object), event);
- DoAllScriptsFromList (&(G.main->lamp), event);
- DoAllScriptsFromList (&(G.main->camera), event);
- DoAllScriptsFromList (&(G.main->mat), event);
- DoAllScriptsFromList (&(G.main->world), event);
+ DoAllScriptsFromList (&(G.main->object), event);
+ DoAllScriptsFromList (&(G.main->lamp), event);
+ DoAllScriptsFromList (&(G.main->camera), event);
+ DoAllScriptsFromList (&(G.main->mat), event);
+ DoAllScriptsFromList (&(G.main->world), event);
- BPY_do_pyscript (&(G.scene->id), event);
+ BPY_do_pyscript (&(G.scene->id), event);
- return;
+ return;
}
/*****************************************************************************/
/* Description: Execute a Python script when an event occurs. The following */
-/* events are possible: frame changed, load script and redraw. */
-/* Only events happening to one of the following object types */
-/* are handled: Object, Lamp, Camera, Material, World and */
-/* Scene. */
+/* events are possible: frame changed, load script and redraw. */
+/* Only events happening to one of the following object types */
+/* are handled: Object, Lamp, Camera, Material, World and */
+/* Scene. */
/*****************************************************************************/
void BPY_do_pyscript(struct ID *id, short event)
{
- ScriptLink * scriptlink;
- int index;
- PyObject * dict;
- PyObject * ret;
-
- scriptlink = setScriptLinks (id, event);
-
- if (scriptlink == NULL) return;
-
- for (index = 0; index < scriptlink->totscript; index++)
- {
- if ((scriptlink->flag[index] == event) &&
- (scriptlink->scripts[index] != NULL))
- {
- dict = CreateGlobalDictionary();
- ret = RunPython ((Text*) scriptlink->scripts[index], dict);
- ReleaseGlobalDictionary (dict);
- if (!ret)
- {
- /* Failed execution of the script */
- BPY_Err_Handle (scriptlink->scripts[index]->name+2);
- BPY_end_python ();
- BPY_start_python ();
- }
- else
- {
- Py_DECREF (ret);
- }
- }
- }
-
- return;
+ ScriptLink * scriptlink;
+ int index;
+ PyObject * dict;
+ PyObject * ret;
+
+ scriptlink = setScriptLinks (id, event);
+
+ if (scriptlink == NULL) return;
+
+ for (index = 0; index < scriptlink->totscript; index++)
+ {
+ if ((scriptlink->flag[index] == event) &&
+ (scriptlink->scripts[index] != NULL))
+ {
+ dict = CreateGlobalDictionary();
+ ret = RunPython ((Text*) scriptlink->scripts[index], dict);
+ ReleaseGlobalDictionary (dict);
+ if (!ret)
+ {
+ /* Failed execution of the script */
+ BPY_Err_Handle (scriptlink->scripts[index]->name+2);
+ BPY_end_python ();
+ BPY_start_python ();
+ }
+ else
+ {
+ Py_DECREF (ret);
+ }
+ }
+ }
+
+ return;
}
/*****************************************************************************/
-/* Description: */
-/* Notes: */
+/* Description: */
+/* Notes: */
/*****************************************************************************/
void BPY_free_scriptlink(struct ScriptLink *slink)
{
- if (slink->totscript) {
- if(slink->flag) MEM_freeN(slink->flag);
- if(slink->scripts) MEM_freeN(slink->scripts);
- }
+ if (slink->totscript) {
+ if(slink->flag) MEM_freeN(slink->flag);
+ if(slink->scripts) MEM_freeN(slink->scripts);
+ }
- return;
+ return;
}
/*****************************************************************************/
-/* Description: */
-/* Notes: */
+/* Description: */
+/* Notes: */
/*****************************************************************************/
void BPY_copy_scriptlink(struct ScriptLink *scriptlink)
{
- void *tmp;
+ void *tmp;
- if (scriptlink->totscript) {
+ if (scriptlink->totscript) {
- tmp = scriptlink->scripts;
- scriptlink->scripts =
- MEM_mallocN(sizeof(ID*)*scriptlink->totscript, "scriptlistL");
- memcpy(scriptlink->scripts, tmp, sizeof(ID*)*scriptlink->totscript);
+ tmp = scriptlink->scripts;
+ scriptlink->scripts =
+ MEM_mallocN(sizeof(ID*)*scriptlink->totscript, "scriptlistL");
+ memcpy(scriptlink->scripts, tmp, sizeof(ID*)*scriptlink->totscript);
- tmp = scriptlink->flag;
- scriptlink->flag =
- MEM_mallocN(sizeof(short)*scriptlink->totscript, "scriptlistF");
- memcpy(scriptlink->flag, tmp, sizeof(short)*scriptlink->totscript);
- }
+ tmp = scriptlink->flag;
+ scriptlink->flag =
+ MEM_mallocN(sizeof(short)*scriptlink->totscript, "scriptlistF");
+ memcpy(scriptlink->flag, tmp, sizeof(short)*scriptlink->totscript);
+ }
- return;
+ return;
}
/*****************************************************************************/
-/* Description: */
-/* Notes: Not implemented yet */
+/* Description: */
+/* Notes: Not implemented yet */
/*****************************************************************************/
int BPY_call_importloader(char *name)
{ /* XXX Should this function go away from Blender? */
- printf ("In BPY_call_importloader(name=%s)\n",name);
- return (0);
+ printf ("In BPY_call_importloader(name=%s)\n",name);
+ return (0);
}
/*****************************************************************************/
-/* Private functions */
+/* Private functions */
/*****************************************************************************/
/*****************************************************************************/
-/* Description: This function executes the python script passed by text. */
-/* The Python dictionary containing global variables needs to */
-/* be passed in globaldict. */
+/* Description: This function executes the python script passed by text. */
+/* The Python dictionary containing global variables needs to */
+/* be passed in globaldict. */
/*****************************************************************************/
PyObject * RunPython(Text *text, PyObject *globaldict)
{
- char *buf = NULL;
+ char *buf = NULL;
/* The script text is compiled to Python bytecode and saved at text->compiled
* to speed-up execution if the user executes the script multiple times */
- if (!text->compiled) { /* if it wasn't already compiled, do it now */
- buf = txt_to_buf(text);
+ if (!text->compiled) { /* if it wasn't already compiled, do it now */
+ buf = txt_to_buf(text);
- text->compiled = Py_CompileString(buf, GetName(text), Py_file_input);
+ text->compiled = Py_CompileString(buf, GetName(text), Py_file_input);
- MEM_freeN(buf);
+ MEM_freeN(buf);
- if (PyErr_Occurred()) {
- BPY_free_compiled_text(text);
- return NULL;
- }
+ if (PyErr_Occurred()) {
+ BPY_free_compiled_text(text);
+ return NULL;
+ }
- }
+ }
- return PyEval_EvalCode(text->compiled, globaldict, globaldict);
+ return PyEval_EvalCode(text->compiled, globaldict, globaldict);
}
/*****************************************************************************/
-/* Description: This function returns the value of the name field of the */
-/* given Text struct. */
+/* Description: This function returns the value of the name field of the */
+/* given Text struct. */
/*****************************************************************************/
char * GetName(Text *text)
{
- return (text->id.name+2);
+ return (text->id.name+2);
}
/*****************************************************************************/
-/* Description: This function creates a new Python dictionary object. */
+/* Description: This function creates a new Python dictionary object. */
/*****************************************************************************/
PyObject * CreateGlobalDictionary (void)
{
- PyObject *dict = PyDict_New();
+ PyObject *dict = PyDict_New();
- PyDict_SetItemString (dict, "__builtins__", PyEval_GetBuiltins());
- PyDict_SetItemString (dict, "__name__", PyString_FromString("__main__"));
+ PyDict_SetItemString (dict, "__builtins__", PyEval_GetBuiltins());
+ PyDict_SetItemString (dict, "__name__", PyString_FromString("__main__"));
- return dict;
+ return dict;
}
/*****************************************************************************/
-/* Description: This function deletes a given Python dictionary object. */
+/* Description: This function deletes a given Python dictionary object. */
/*****************************************************************************/
void ReleaseGlobalDictionary (PyObject * dict)
{
- PyDict_Clear (dict);
- Py_DECREF (dict); /* Release dictionary. */
+ PyDict_Clear (dict);
+ Py_DECREF (dict); /* Release dictionary. */
- return;
+ return;
}
/*****************************************************************************/
-/* Description: This function runs all scripts (if any) present in the */
-/* list argument. The event by which the function has been */
-/* called, is passed in the event argument. */
+/* Description: This function runs all scripts (if any) present in the */
+/* list argument. The event by which the function has been */
+/* called, is passed in the event argument. */
/*****************************************************************************/
void DoAllScriptsFromList (ListBase *list, short event)
{
- ID *id;
+ ID *id;
- id = list->first;
+ id = list->first;
- while (id != NULL) {
- BPY_do_pyscript (id, event);
- id = id->next;
- }
+ while (id != NULL) {
+ BPY_do_pyscript (id, event);
+ id = id->next;
+ }
- return;
+ return;
}
PyObject *importText(char *name)
{
- Text *text;
- char *txtname;
- char *buf = NULL;
- int namelen = strlen(name);
-
- txtname = malloc(namelen+3+1);
- if (!txtname) return NULL;
-
- memcpy(txtname, name, namelen);
- memcpy(&txtname[namelen], ".py", 4);
-
- text = (Text*) &(G.main->text.first);
-
- while(text) {
- if (!strcmp (txtname, GetName(text)))
- break;
- text = text->id.next;
- }
-
- if (!text) {
- free(txtname);
- return NULL;
- }
-
- if (!text->compiled) {
- buf = txt_to_buf(text);
- text->compiled = Py_CompileString(buf, GetName(text), Py_file_input);
- MEM_freeN(buf);
-
- if (PyErr_Occurred()) {
- PyErr_Print();
- BPY_free_compiled_text(text);
- free(txtname);
- return NULL;
- }
- }
-
- free(txtname);
- return PyImport_ExecCodeModule(name, text->compiled);
+ Text *text;
+ char *txtname;
+ char *buf = NULL;
+ int namelen = strlen(name);
+
+ txtname = malloc(namelen+3+1);
+ if (!txtname) return NULL;
+
+ memcpy(txtname, name, namelen);
+ memcpy(&txtname[namelen], ".py", 4);
+
+ text = (Text*) &(G.main->text.first);
+
+ while(text) {
+ if (!strcmp (txtname, GetName(text)))
+ break;
+ text = text->id.next;
+ }
+
+ if (!text) {
+ free(txtname);
+ return NULL;
+ }
+
+ if (!text->compiled) {
+ buf = txt_to_buf(text);
+ text->compiled = Py_CompileString(buf, GetName(text), Py_file_input);
+ MEM_freeN(buf);
+
+ if (PyErr_Occurred()) {
+ PyErr_Print();
+ BPY_free_compiled_text(text);
+ free(txtname);
+ return NULL;
+ }
+ }
+
+ free(txtname);
+ return PyImport_ExecCodeModule(name, text->compiled);
}
static PyMethodDef bimport[] = {
- { "blimport", blender_import, METH_VARARGS, "our own import"}
+ { "blimport", blender_import, METH_VARARGS, "our own import"}
};
PyObject *blender_import(PyObject *self, PyObject *args)
{
- PyObject *exception, *err, *tb;
- char *name;
- PyObject *globals = NULL, *locals = NULL, *fromlist = NULL;
- PyObject *m;
-
- if (!PyArg_ParseTuple(args, "s|OOO:bimport",
- &name, &globals, &locals, &fromlist))
- return NULL;
-
- m = PyImport_ImportModuleEx(name, globals, locals, fromlist);
-
- if (m)
- return m;
- else
- PyErr_Fetch(&exception, &err, &tb); /*restore for probable later use*/
-
- m = importText(name);
- if (m) { /* found module, ignore above exception*/
- PyErr_Clear();
- Py_XDECREF(exception); Py_XDECREF(err); Py_XDECREF(tb);
- printf("imported from text buffer...\n");
- } else {
- PyErr_Restore(exception, err, tb);
- }
- return m;
+ PyObject *exception, *err, *tb;
+ char *name;
+ PyObject *globals = NULL, *locals = NULL, *fromlist = NULL;
+ PyObject *m;
+
+ if (!PyArg_ParseTuple(args, "s|OOO:bimport",
+ &name, &globals, &locals, &fromlist))
+ return NULL;
+
+ m = PyImport_ImportModuleEx(name, globals, locals, fromlist);
+
+ if (m)
+ return m;
+ else
+ PyErr_Fetch(&exception, &err, &tb); /*restore for probable later use*/
+
+ m = importText(name);
+ if (m) { /* found module, ignore above exception*/
+ PyErr_Clear();
+ Py_XDECREF(exception); Py_XDECREF(err); Py_XDECREF(tb);
+ printf("imported from text buffer...\n");
+ } else {
+ PyErr_Restore(exception, err, tb);
+ }
+ return m;
}
void init_ourImport(void)
{
- PyObject *m, *d;
- PyObject *import = PyCFunction_New(bimport, NULL);
+ PyObject *m, *d;
+ PyObject *import = PyCFunction_New(bimport, NULL);
- m = PyImport_AddModule("__builtin__");
- d = PyModule_GetDict(m);
- PyDict_SetItemString(d, "__import__", import);
+ m = PyImport_AddModule("__builtin__");
+ d = PyModule_GetDict(m);
+ PyDict_SetItemString(d, "__import__", import);
}
diff --git a/source/blender/python/api2_2x/EXPP_interface.h b/source/blender/python/api2_2x/EXPP_interface.h
index 87e5d3dd1ea..df319510c37 100644
--- a/source/blender/python/api2_2x/EXPP_interface.h
+++ b/source/blender/python/api2_2x/EXPP_interface.h
@@ -24,7 +24,7 @@
*
* This is a new part of Blender.
*
- * Contributor(s): Michel Selten
+ * Contributor(s): Michel Selten, Willian P. Germano
*
* ***** END GPL/BL DUAL LICENSE BLOCK *****
*/
@@ -37,3 +37,4 @@ void initBlenderApi2_2x (void);
void clearScriptLinks (void);
ScriptLink * setScriptLinks(ID *id, short event);
void discardFromBDict (char *key);
+void EXPP_Library_Close (void); /* in Library.c, used by BPY_end_python */
diff --git a/source/blender/python/api2_2x/Library.c b/source/blender/python/api2_2x/Library.c
index 6a0a958c9d7..3b546d8f4f0 100644
--- a/source/blender/python/api2_2x/Library.c
+++ b/source/blender/python/api2_2x/Library.c
@@ -176,6 +176,23 @@ PyObject *M_Library_Close(PyObject *self)
}
/**
+ * helper function for 'atexit' clean-ups, used by BPY_end_python,
+ * declared in EXPP_interface.h.
+ */
+void EXPP_Library_Close(void)
+{
+ if (bpy_openlib) {
+ BLO_blendhandle_close(bpy_openlib);
+ bpy_openlib = NULL;
+ }
+
+ if (bpy_openlibname) {
+ MEM_freeN (bpy_openlibname);
+ bpy_openlibname = NULL;
+ }
+}
+
+/**
* Get the filename of the currently open library file, if any.
*/
PyObject *M_Library_GetName(PyObject *self)
diff --git a/source/blender/python/api2_2x/Noise.c b/source/blender/python/api2_2x/Noise.c
index 0f48d03e0af..c42b3487131 100644
--- a/source/blender/python/api2_2x/Noise.c
+++ b/source/blender/python/api2_2x/Noise.c
@@ -1,3 +1,38 @@
+/**
+ * $Id$
+ *
+ * Blender.Noise BPython module implementation.
+ * This submodule has functions to generate noise of various types.
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * This is a new part of Blender.
+ *
+ * Contributor(s): eeshlo
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+
/************************/
/* Blender Noise Module */
/************************/
@@ -520,7 +555,7 @@ PyObject *Noise_Init()
BPy_constant *dm = (BPy_constant *)DistanceMetrics;
constant_insert(dm, "DISTANCE", PyInt_FromLong(TEX_DISTANCE));
constant_insert(dm, "DISTANCE_SQUARED", PyInt_FromLong(TEX_DISTANCE_SQUARED));
- constant_insert(dm, "MAHATTAN", PyInt_FromLong(TEX_MANHATTAN));
+ constant_insert(dm, "MANHATTAN", PyInt_FromLong(TEX_MANHATTAN));
constant_insert(dm, "CHEBYCHEV", PyInt_FromLong(TEX_CHEBYCHEV));
constant_insert(dm, "MINKOVSKY_HALF", PyInt_FromLong(TEX_MINKOVSKY_HALF));
constant_insert(dm, "MINKOVSKY_FOUR", PyInt_FromLong(TEX_MINKOVSKY_FOUR));
diff --git a/source/blender/python/api2_2x/doc/Blender.py b/source/blender/python/api2_2x/doc/Blender.py
index 2bdd658a52f..dbda9fa61fa 100644
--- a/source/blender/python/api2_2x/doc/Blender.py
+++ b/source/blender/python/api2_2x/doc/Blender.py
@@ -29,11 +29,12 @@ The Blender Python API Reference
- L{Ipo}
- L{Lamp}
- L{Lattice}
- - L{Library}
+ - L{Library} (new)
- L{Material}
- - L{Mathutils}
+ - L{Mathutils} (new)
- L{Metaball}
- L{NMesh}
+ - L{Noise} (new)
- L{Object}
- L{Registry}
- L{Scene}
@@ -42,7 +43,7 @@ The Blender Python API Reference
- L{Types}
- L{Window}
- L{World}
- - L{sys<Sys>}
+ - L{sys<Sys>} (added time function)
Introduction:
-------------
@@ -58,8 +59,8 @@ The Blender Python API Reference
open-source language.
@author: The Blender Python Team
-@requires: Blender 2.32 or newer.
-@version: 0.4
+@requires: Blender 2.33 or newer.
+@version: 2.33
@see: U{www.blender.org<http://www.blender.org>}
@see: U{projects.blender.org<http://projects.blender.org>}
@see: U{www.python.org<http://www.python.org>}
diff --git a/source/blender/python/api2_2x/doc/Library.py b/source/blender/python/api2_2x/doc/Library.py
index 5f0f754dd78..a5757b0dbef 100644
--- a/source/blender/python/api2_2x/doc/Library.py
+++ b/source/blender/python/api2_2x/doc/Library.py
@@ -25,10 +25,10 @@ Example::
groups = Library.LinkableGroups()
for db in groups:
- print "\nDATABLOCK %s:" % db
+ print "DATABLOCK %s:" % db
for obname in Library.Datablocks(db):
print obname
-
+
if 'Object' in groups:
for obname in Library.Datablocks('Object'):
Library.Load(obname, 'Object', 0) # note the 0...
diff --git a/source/blender/python/api2_2x/doc/Noise.py b/source/blender/python/api2_2x/doc/Noise.py
new file mode 100644
index 00000000000..5a246031fd0
--- /dev/null
+++ b/source/blender/python/api2_2x/doc/Noise.py
@@ -0,0 +1,300 @@
+# Blender.Noise submodule
+
+"""
+The Blender.Noise submodule.
+
+Noise and Turbulence
+====================
+
+This module can be used to generate noise of various types. This can be used
+for terrain generation, to create textures, make animations more 'animated',
+object deformation, etc. As an example, this code segment when scriptlinked
+to a framechanged event, will make the camera sway randomly about, by changing
+parameters this can look like anything from an earthquake to a very nervous or
+maybe even drunk cameraman... (the camera needs an ipo with at least one Loc &
+Rot key for this to work!):
+
+Example::
+ from Blender import Get, Scene, Noise
+ ####################################################
+ # This controls jitter speed
+ sl = 0.025
+ # This controls the amount of position jitter
+ sp = 0.1
+ # This controls the amount of rotation jitter
+ sr = 0.25
+ ####################################################
+
+ time = Get('curtime')
+ ob = Scene.GetCurrent().getCurrentCamera()
+ ps = (sl*time, sl*time, sl*time)
+ # To add jitter only when the camera moves, use this next line instead
+ #ps = (sl*ob.LocX, sl*ob.LocY, sl*ob.LocZ)
+ rv = Noise.vTurbulence(ps, 3, 0, Noise.NoiseTypes.NEWPERLIN)
+ ob.dloc = (sp*rv[0], sp*rv[1], sp*rv[2])
+ ob.drot = (sr*rv[0], sr*rv[1], sr*rv[2])
+
+@type NoiseTypes: readonly dictionary
+@var NoiseTypes: The available noise types.
+ - BLENDER
+ - STDPERLIN
+ - NEWPERLIN
+ - VORONOI_F1
+ - VORONOI_F2
+ - VORONOI_F3
+ - VORONOI_F4
+ - VORONOI_F2F1
+ - VORONOI_CRACKLE
+ - CELLNOISE
+
+@type DistanceMetrics: readonly dictionary
+@var DistanceMetrics: The available distance metrics values for Voronoi.
+ - DISTANCE
+ - DISTANCE_SQUARED
+ - MANHATTAN
+ - CHEBYCHEV
+ - MINKOVSKY_HALF
+ - MINKOVSKY_FOUR
+ - MINKOVISKY
+"""
+
+NoiseTypes = {'BLENDER':0, 'STDPERLIN':1}
+
+DistanceMetrics = {'DISTANCE':0}
+
+def random ():
+ """
+ Returns a random floating point number."
+ @rtype: float
+ @return: a random number in [0, 1).
+ """
+
+def randuvec ():
+ """
+ Returns a random unit vector.
+ @rtype: 3-float list
+ @return: a list of three floats.
+ """
+
+def setRandomSeed (seed):
+ """
+ Initializes the random number generator.
+ @type seed: int
+ @param seed: the seed for the random number generator. If seed = 0, the
+ current time will be used as seed, instead.
+ """
+
+def noise (xyz, type = NoiseTypes['STDPERLIN']):
+ """
+ Returns general noise of the optional specified type.
+ @type xyz: tuple of 3 floats
+ @param xyz: (x,y,z) float values.
+ @type type: int
+ @param type: the type of noise to return. See L{NoiseTypes}.
+ @rtype: float
+ @return: the generated noise value.
+ """
+
+def vNoise (xyz, type = NoiseTypes['STDPERLIN']):
+ """
+ Returns noise vector of the optional specified type.
+ @type xyz: tuple of 3 floats
+ @param xyz: (x,y,z) float values.
+ @type type: int
+ @param type: the type of noise to return. See L{NoiseTypes}.
+ @rtype: 3-float list
+ @return: the generated noise vector.
+ """
+
+def turbulence (xyz, octaves, hard, basis = NoiseTypes['STDPERLIN'],
+ ampscale = 0.5, freqscale = 2.0):
+ """
+ Returns general turbulence value using the optional specified noise 'basis'
+ function.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @type octaves: int
+ @param octaves: number of noise values added.
+ @type hard: bool
+ @param hard: noise hardness: 0 - soft noise; 1 - hard noise. (Returned value
+ is always positive.)
+ @type basis: int
+ @param basis: type of noise used for turbulence, see L{NoiseTypes}.
+ @type ampscale: float
+ @param ampscale: amplitude scale value of the noise frequencies added.
+ @type freqscale: float
+ @param freqscale: frequency scale factor.
+ @rtype: float
+ @return: the generated turbulence value.
+ """
+
+def vTurbulence (xyz, octaves, hard, basis = NoiseTypes['STDPERLIN'],
+ ampscale = 0.5, freqscale = 2.0):
+ """
+ Returns general turbulence vector using the optional specified noise basis
+function.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @type octaves: int
+ @param octaves: number of noise values added.
+ @type hard: bool
+ @param hard: noise hardness: 0 - soft noise; 1 - hard noise. (Returned
+ vector is always positive.)
+ @type basis: int
+ @param basis: type of noise used for turbulence, see L{NoiseTypes}.
+ @type ampscale: float
+ @param ampscale: amplitude scale value of the noise frequencies added.
+ @type freqscale: float
+ @param freqscale: frequency scale factor.
+ @rtype: 3-float list
+ @return: the generated turbulence vector.
+ """
+
+def fBm (xyz, H, lacunarity, octaves, basis = NoiseTypes['STDPERLIN']):
+ """
+ Returns Fractal Brownian Motion noise value (fBm).
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @type H: float
+ @param H: the fractal increment parameter.
+ @type lacunarity: float
+ @param lacunarity: the gap between successive frequencies.
+ @type octaves: float
+ @param octaves: the number of frequencies in the fBm.
+ @type basis: int
+ @param basis: type of noise used for the turbulence, see L{NoiseTypes}.
+ @rtype: float
+ @return: the generated noise value.
+ """
+
+def multiFractal (xyz, H, lacunarity, octaves, basis = NoiseTypes['STDPERLIN']):
+ """
+ Returns Multifractal noise value.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @type H: float
+ @param H: the highest fractal dimension.
+ @type lacunarity: float
+ @param lacunarity: the gap between successive frequencies.
+ @type octaves: float
+ @param octaves: the number of frequencies in the fBm.
+ @type basis: int
+ @param basis: type of noise used for the turbulence, see L{NoiseTypes}.
+ @rtype: float
+ @return: the generated noise value.
+ """
+
+def vlNoise (xyz, distortion, type1 = NoiseTypes['STDPERLIN'],
+ type2 = NoiseTypes['STDPERLIN']):
+ """
+ Returns Variable Lacunarity Noise value, a distorted variety of noise.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @type distortion: float
+ @param distortion: the amount of distortion.
+ @type type1: int
+ @type type2: int
+ @param type1: sets the noise type to distort.
+ @param type2: sets the noise type used for the distortion.
+ @rtype: float
+ @return: the generated noise value.
+ """
+
+def heteroTerrain (xyz, H, lacunarity, octaves, offset,
+ basis = NoiseTypes['STDPERLIN']):
+ """
+ Returns Heterogeneous Terrain value.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @type H: float
+ @param H: fractal dimension of the roughest areas.
+ @type lacunarity: float
+ @param lacunarity: gap between successive frequencies.
+ @type octaves: float
+ @param octaves: number of frequencies in the fBm.
+ @type offset: float
+ @param offset: it raises the terrain from 'sea level'.
+ @type basis: int
+ @param basis: noise basis determines the type of noise used for the
+ turbulence, see L{NoiseTypes}.
+ @rtype: float
+ @return: the generated value.
+ """
+
+def hybridMFractal (xyz, H, lacunarity, octaves, offset, gain,
+ basis = NoiseTypes['STDPERLIN']):
+ """
+ Returns Hybrid Multifractal value.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @type H: float
+ @param H: fractal dimension of the roughest areas.
+ @type lacunarity: float
+ @param lacunarity: gap between successive frequencies.
+ @type octaves: float
+ @param octaves: number of frequencies in the fBm.
+ @type offset: float
+ @param offset: it raises the terrain from 'sea level'.
+ @type gain: float
+ @param gain: scale factor.
+ @type basis: int
+ @param basis: noise basis determines the type of noise used for the
+ turbulence, see L{NoiseTypes}.
+ @rtype: float
+ @return: the generated value.
+ """
+
+def ridgedMFractal (xyz, H, lacunarity, octaves, offset, gain,
+ basis = NoiseTypes['STDPERLIN']):
+ """
+ Returns Ridged Multifractal value.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @type H: float
+ @param H: fractal dimension of the roughest areas.
+ @type lacunarity: float
+ @param lacunarity: gap between successive frequencies.
+ @type octaves: float
+ @param octaves: number of frequencies in the fBm.
+ @type offset: float
+ @param offset: it raises the terrain from 'sea level'.
+ @type gain: float
+ @param gain: scale factor.
+ @type basis: int
+ @param basis: noise basis determines the type of noise used for the
+ turbulence, see L{NoiseTypes}.
+ @rtype: float
+ @return: the generated value.
+ """
+
+def voronoi(xyz, distance_metric = DistanceMetrics['DISTANCE'], exponent = 2.5):
+ """
+ Returns Voronoi diagrams-related data.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @type distance_metric: int
+ @param distance_metric: see L{DistanceMetrics}
+ @type exponent: float
+ @param exponent: only used with MINKOVSKY, default is 2.5.
+ @rtype: list
+ @return: a list containing a list of distances in order of closest feature,
+ and a list containing the positions of the four closest features.
+ """
+
+def cellNoise (xyz):
+ """
+ Returns cellnoise.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @rtype: float
+ @return: the generated value.
+ """
+
+def cellNoiseV (xyz):
+ """
+ Returns cellnoise vector/point/color.
+ @type xyz: 3-float tuple
+ @param xyz: (x,y,z) float values.
+ @rtype: 3-float list
+ @return: the generated vector.
+ """