- Finally added Blender.Load function for loading .blend files, useful for demos, for example.
- Moved data from Blender.h to Blender.c.  We'll keep doing this where it applies and someday remove all unused files at once.
This commit is contained in:
2004-05-18 03:23:45 +00:00
parent fba0e401c9
commit 022bff122f
2 changed files with 135 additions and 80 deletions

View File

@@ -29,10 +29,91 @@
* ***** END GPL/BL DUAL LICENSE BLOCK *****
*/
//#include "BKE_utildefines.h"
#include "BIF_usiblender.h"
#include <Python.h>
#include <stdio.h>
#include "Blender.h"
#include <BIF_usiblender.h>
#include <BLI_blenlib.h>
#include <BKE_global.h>
#include <BPI_script.h>
#include <BSE_headerbuttons.h>
#include <DNA_ID.h>
#include <DNA_object_types.h>
#include <DNA_scene_types.h>
#include <DNA_screen_types.h> /* for SPACE_VIEW3D */
#include <DNA_userdef_types.h>
#include <BKE_ipo.h>
#include "gen_utils.h"
#include "modules.h"
/* From Window.h, used here by Blender_Redraw */
PyObject *M_Window_Redraw(PyObject *self, PyObject *args);
/**********************************************************/
/* Python API function prototypes for the Blender module. */
/**********************************************************/
static PyObject *Blender_Set (PyObject *self, PyObject *args);
static PyObject *Blender_Get (PyObject *self, PyObject *args);
static PyObject *Blender_Redraw(PyObject *self, PyObject *args);
static PyObject *Blender_ReleaseGlobalDict(PyObject *self, PyObject *args);
static PyObject *Blender_Quit(PyObject *self);
static PyObject *Blender_Load(PyObject *self, PyObject *args);
/*****************************************************************************/
/* The following string definitions are used for documentation strings. */
/* In Python these will be written to the console when doing a */
/* Blender.__doc__ */
/*****************************************************************************/
static char Blender_Set_doc[] =
"(request, data) - Update settings in Blender\n\
\n\
(request) A string identifying the setting to change\n\
'curframe' - Sets the current frame using the number in data";
static char Blender_Get_doc[] =
"(request) - Retrieve settings from Blender\n\
\n\
(request) A string indentifying the data to be returned\n\
'curframe' - Returns the current animation frame\n\
'curtime' - Returns the current animation time\n\
'staframe' - Returns the start frame of the animation\n\
'endframe' - Returns the end frame of the animation\n\
'filename' - Returns the name of the last file read or written\n\
'version' - Returns the Blender version number";
static char Blender_Redraw_doc[] = "() - Redraw all 3D windows";
static char Blender_ReleaseGlobalDict_doc[] =
"Deprecated, please use the Blender.Registry module solution instead.";
static char Blender_Quit_doc[] =
"() - Quit Blender. The current data is saved as 'quit.blend' before leaving.";
static char Blender_Load_doc[] =
"(filename) - Load the given .blend file. If succesful, the script is ended\n\
immediately.\n\
Notes:\n\
1 - () - an empty argument loads the default .B.blend file;\n\
2 - if the substring '.B.blend' occurs inside 'filename', the default\n\
.B.blend file is loaded;\n\
3 - The current data is always preserved as an autosave file, for safety;\n\
4 - This function only works if the script where it's executed is the\n\
only one running.";
/*****************************************************************************/
/* Python method structure definition. */
/*****************************************************************************/
static struct PyMethodDef Blender_methods[] = {
{"Set", Blender_Set, METH_VARARGS, Blender_Set_doc},
{"Get", Blender_Get, METH_VARARGS, Blender_Get_doc},
{"Redraw", Blender_Redraw, METH_VARARGS, Blender_Redraw_doc},
{"Quit", (PyCFunction)Blender_Quit, METH_NOARGS, Blender_Quit_doc},
{"Load", Blender_Load, METH_VARARGS, Blender_Load_doc},
{"ReleaseGlobalDict", &Blender_ReleaseGlobalDict,
METH_VARARGS, Blender_ReleaseGlobalDict_doc},
{NULL, NULL}
};
/*****************************************************************************/
/* Global variables */
@@ -43,7 +124,7 @@ PyObject *g_blenderdict;
/* Function: Blender_Set */
/* Python equivalent: Blender.Set */
/*****************************************************************************/
PyObject *Blender_Set (PyObject *self, PyObject *args)
static PyObject *Blender_Set (PyObject *self, PyObject *args)
{
char * name;
PyObject * arg;
@@ -79,7 +160,7 @@ PyObject *Blender_Set (PyObject *self, PyObject *args)
/* Function: Blender_Get */
/* Python equivalent: Blender.Get */
/*****************************************************************************/
PyObject *Blender_Get (PyObject *self, PyObject *args)
static PyObject *Blender_Get (PyObject *self, PyObject *args)
{
PyObject * object;
PyObject * dict;
@@ -158,7 +239,7 @@ PyObject *Blender_Get (PyObject *self, PyObject *args)
/* Function: Blender_Redraw */
/* Python equivalent: Blender.Redraw */
/*****************************************************************************/
PyObject *Blender_Redraw(PyObject *self, PyObject *args)
static PyObject *Blender_Redraw(PyObject *self, PyObject *args)
{
int wintype = SPACE_VIEW3D;
@@ -176,7 +257,7 @@ PyObject *Blender_Redraw(PyObject *self, PyObject *args)
/* Python equivalent: Blender.ReleaseGlobalDict */
/* Description: Deprecated function. */
/*****************************************************************************/
PyObject *Blender_ReleaseGlobalDict(PyObject *self, PyObject *args)
static PyObject *Blender_ReleaseGlobalDict(PyObject *self, PyObject *args)
{
Py_INCREF(Py_None);
return Py_None;
@@ -186,9 +267,54 @@ PyObject *Blender_ReleaseGlobalDict(PyObject *self, PyObject *args)
/* Function: Blender_Quit */
/* Python equivalent: Blender.Quit */
/*****************************************************************************/
PyObject *Blender_Quit(PyObject *self)
static PyObject *Blender_Quit(PyObject *self)
{
exit_usiblender();
BIF_write_autosave(); /* save the current data first */
exit_usiblender(); /* renames last autosave to quit.blend */
Py_INCREF(Py_None);
return Py_None;
}
static PyObject *Blender_Load(PyObject *self, PyObject *args)
{
char *fname = NULL;
Script *script = NULL;
if (!PyArg_ParseTuple(args, "|s", &fname))
return EXPP_ReturnPyObjError(PyExc_TypeError,
"expected filename string or nothing (for default file) as argument");
if (fname && !BLI_exists(fname))
return EXPP_ReturnPyObjError(PyExc_AttributeError,
"requested file doesn't exist!");
/* We won't let a new .blend file be loaded if there are still other
* scripts running, since loading a new file will close and remove them. */
if (G.main->script.first != G.main->script.last)
return EXPP_ReturnPyObjError(PyExc_RuntimeError,
"there are other scripts running at the Scripts win, close them first!");
/* trick: mark the script so that its script struct won't be freed after
* the script is executed (to avoid a double free warning on exit): */
script = G.main->script.first;
script->flags |= SCRIPT_GUI;
BIF_write_autosave(); /* for safety let's preserve the current data */
/* for safety, any filename with .B.blend is considered the default one.
* It doesn't seem necessary to compare file attributes (like st_ino and
* st_dev, according to the glibc info pages) to find out if the given
* filename, that may have been given with a twisted misgiving path, is the
* default one for sure. Taking any .B.blend file as the default is good
* enough here. Note: the default file requires extra clean-up done by
* BIF_read_homefile: freeing the user theme data. */
if (!fname || strstr(fname, ".B.blend"))
BIF_read_homefile();
else
BIF_read_file(fname);
Py_INCREF(Py_None);
return Py_None;

View File

@@ -31,75 +31,4 @@
#ifndef EXPP_BLENDER_H
#define EXPP_BLENDER_H
#include <Python.h>
#include <stdio.h>
#include <BKE_global.h>
#include <BSE_headerbuttons.h>
#include <DNA_ID.h>
#include <DNA_object_types.h>
#include <DNA_scene_types.h>
#include <DNA_screen_types.h> /* for SPACE_VIEW3D */
#include <DNA_userdef_types.h>
#include <BKE_ipo.h>
#include "gen_utils.h"
#include "modules.h"
/* From Window.h, used here by Blender_Redraw */
PyObject *M_Window_Redraw(PyObject *self, PyObject *args);
/*****************************************************************************/
/* Python API function prototypes for the Blender module. */
/*****************************************************************************/
PyObject *Blender_Set (PyObject *self, PyObject *args);
PyObject *Blender_Get (PyObject *self, PyObject *args);
PyObject *Blender_Redraw(PyObject *self, PyObject *args);
PyObject *Blender_ReleaseGlobalDict(PyObject *self, PyObject *args);
PyObject *Blender_Quit(PyObject *self);
/*****************************************************************************/
/* The following string definitions are used for documentation strings. */
/* In Python these will be written to the console when doing a */
/* Blender.__doc__ */
/*****************************************************************************/
char Blender_Set_doc[] =
"(request, data) - Update settings in Blender\n\
\n\
(request) A string identifying the setting to change\n\
'curframe' - Sets the current frame using the number in data";
char Blender_Get_doc[] =
"(request) - Retrieve settings from Blender\n\
\n\
(request) A string indentifying the data to be returned\n\
'curframe' - Returns the current animation frame\n\
'curtime' - Returns the current animation time\n\
'staframe' - Returns the start frame of the animation\n\
'endframe' - Returns the end frame of the animation\n\
'filename' - Returns the name of the last file read or written\n\
'version' - Returns the Blender version number";
char Blender_Redraw_doc[] = "() - Redraw all 3D windows";
char Blender_ReleaseGlobalDict_doc[] =
"Deprecated, please use the Blender.Registry module solution instead.";
char Blender_Quit_doc[] =
"() - Quit Blender. Experimental, please use with caution.";
/*****************************************************************************/
/* Python method structure definition. */
/*****************************************************************************/
struct PyMethodDef Blender_methods[] = {
{"Set", Blender_Set, METH_VARARGS, Blender_Set_doc},
{"Get", Blender_Get, METH_VARARGS, Blender_Get_doc},
{"Redraw", Blender_Redraw, METH_VARARGS, Blender_Redraw_doc},
{"Quit", (PyCFunction)Blender_Quit, METH_NOARGS, Blender_Quit_doc},
{"ReleaseGlobalDict", &Blender_ReleaseGlobalDict,
METH_VARARGS, Blender_ReleaseGlobalDict_doc},
{NULL, NULL}
};
#endif /* EXPP_BLENDER_H */