2003-06-28 07:38:21 +00:00
|
|
|
/*
|
2004-09-18 18:47:03 +00:00
|
|
|
* $Id$
|
2003-06-28 07:38:21 +00:00
|
|
|
*
|
|
|
|
|
* ***** 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,
|
2004-01-23 19:24:45 +00:00
|
|
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
2003-06-28 07:38:21 +00:00
|
|
|
*
|
|
|
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* This is a new part of Blender.
|
|
|
|
|
*
|
Note: this commit includes new functionality to save and restore scripts configure options. This is ongoing work, scripts still have to be updated to use this feature and more tests are needed, though many have been performed. The new Scripts Config Editor script is the main part of this. If anyone wants to check it, only the AC3D importer and exporter have already been updated to use it: simply open them (you can then cancel with ESC) to have the data created, then try the config editor.
Scripts:
- Thanks Jean-Michel Soler (jms) for updated versions of dispaint, fixfromarmature and unweld (also renamed to remove version part).
- Thanks Bart for the upgraded VRML exporter (great doc webpage!). It is available as VRML 97 and the original VRML 2 is for now still there, to help users testing the new version. For the next release the old one should be removed, of course.
- New script: Scripts Config Editor (Scripts win -> Scripts -> System). Scripts with config options (simple data that is to be set according to user needs or preferences) can use this facility instead of providing a gui and writing config files to disk themselves.
- Added new menu: System, available in the Scripts win.
- Updated sys_info.py, help_browse.py and the AC3D importer and exporter.
- Removed use of the Scrollbar and added arrow keys and mouse wheel support instead in Daniel Dunbar's old doc_browser.py. The scrollbar events handling doesn't exist, Ton suggested removing the scrollbar from the API months ago. For now its ref doc is gone and no bundled script uses it, until we get time to implement it properly.
- Added module BPyRegistry.py with functions to handle reading / writing config files automatically to the scripts/bpydata/config dir.
- Removing dir release/bpydata and its contents (moved earlier to release/scripts/bpydata/)
- Bug #2379: made small changes to bevel_center's ui to fix a problem reported by Alexander Ewering (intrr):
http://projects.blender.org/tracker/?func=detail&atid=125&aid=2379&group_id=9
BPython:
- Thanks Campbell Barton for new functionality: Blender.Get() now can also return all the paths from the user prefs -> file paths win and there is a new function: Blender.sys.expandpath() to transform Blender paths (those starting with '//' and ending with '#') to absolute paths.
- Added function Blender.ShowHelp(), to open the Scripts Help Browser with a given help page -- just a time saver for scripts.
- Improved function Blender.Run() to also work with gui and file select scripts.
- Found a (new?) crash related to NMesh.PutRaw when creating a new object while in edit mode. Leaving / entering edit mode fixes the problem, so a check for obj created, edit mode and leaving / re-entering it were added to the code for now (gdb didn't help much, no backtrace)
- doc updates, including splitting intro page in two, with bpython related stuff (registering / documenting / configuring scripts and command line mode (thanks Chris Want for "use system variables to pass parameters to scripts" idea).
- Registry: functions have been updated to support writing to / reading from disk, for the config editor -- only simple config data supported, for large amounts coders should write to a file themselves. This is done with a new parameter: Registry.GetKey(keyname, True) will also search for the key on the config dir, if not already loaded; equiv. for Registry.SetKey(keyname, dict, True). Data is only written to / read from disk when needed and only scripts already used (assuming they support this functionality) will have config data saved.
2005-04-16 05:25:42 +00:00
|
|
|
* Contributor(s): Willian P. Germano, Campbell Barton
|
2003-06-28 07:38:21 +00:00
|
|
|
*
|
|
|
|
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
|
|
|
|
*/
|
|
|
|
|
|
2005-07-18 03:50:37 +00:00
|
|
|
#include "Sys.h" /*This must come first*/
|
2004-10-07 19:25:40 +00:00
|
|
|
|
2005-07-18 03:50:37 +00:00
|
|
|
#include "BKE_utildefines.h"
|
|
|
|
|
#include "BKE_global.h"
|
|
|
|
|
#include "BLI_blenlib.h"
|
|
|
|
|
#include "DNA_scene_types.h" /* G.scene-"r.cfra */
|
|
|
|
|
#include "PIL_time.h"
|
|
|
|
|
#include "gen_utils.h"
|
2004-06-10 15:14:49 +00:00
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/* Python API function prototypes for the sys module. */
|
|
|
|
|
/*****************************************************************************/
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_basename( PyObject * self, PyObject * args );
|
|
|
|
|
static PyObject *M_sys_dirname( PyObject * self, PyObject * args );
|
|
|
|
|
static PyObject *M_sys_join( PyObject * self, PyObject * args );
|
|
|
|
|
static PyObject *M_sys_splitext( PyObject * self, PyObject * args );
|
|
|
|
|
static PyObject *M_sys_makename( PyObject * self, PyObject * args,
|
Note: this commit includes new functionality to save and restore scripts configure options. This is ongoing work, scripts still have to be updated to use this feature and more tests are needed, though many have been performed. The new Scripts Config Editor script is the main part of this. If anyone wants to check it, only the AC3D importer and exporter have already been updated to use it: simply open them (you can then cancel with ESC) to have the data created, then try the config editor.
Scripts:
- Thanks Jean-Michel Soler (jms) for updated versions of dispaint, fixfromarmature and unweld (also renamed to remove version part).
- Thanks Bart for the upgraded VRML exporter (great doc webpage!). It is available as VRML 97 and the original VRML 2 is for now still there, to help users testing the new version. For the next release the old one should be removed, of course.
- New script: Scripts Config Editor (Scripts win -> Scripts -> System). Scripts with config options (simple data that is to be set according to user needs or preferences) can use this facility instead of providing a gui and writing config files to disk themselves.
- Added new menu: System, available in the Scripts win.
- Updated sys_info.py, help_browse.py and the AC3D importer and exporter.
- Removed use of the Scrollbar and added arrow keys and mouse wheel support instead in Daniel Dunbar's old doc_browser.py. The scrollbar events handling doesn't exist, Ton suggested removing the scrollbar from the API months ago. For now its ref doc is gone and no bundled script uses it, until we get time to implement it properly.
- Added module BPyRegistry.py with functions to handle reading / writing config files automatically to the scripts/bpydata/config dir.
- Removing dir release/bpydata and its contents (moved earlier to release/scripts/bpydata/)
- Bug #2379: made small changes to bevel_center's ui to fix a problem reported by Alexander Ewering (intrr):
http://projects.blender.org/tracker/?func=detail&atid=125&aid=2379&group_id=9
BPython:
- Thanks Campbell Barton for new functionality: Blender.Get() now can also return all the paths from the user prefs -> file paths win and there is a new function: Blender.sys.expandpath() to transform Blender paths (those starting with '//' and ending with '#') to absolute paths.
- Added function Blender.ShowHelp(), to open the Scripts Help Browser with a given help page -- just a time saver for scripts.
- Improved function Blender.Run() to also work with gui and file select scripts.
- Found a (new?) crash related to NMesh.PutRaw when creating a new object while in edit mode. Leaving / entering edit mode fixes the problem, so a check for obj created, edit mode and leaving / re-entering it were added to the code for now (gdb didn't help much, no backtrace)
- doc updates, including splitting intro page in two, with bpython related stuff (registering / documenting / configuring scripts and command line mode (thanks Chris Want for "use system variables to pass parameters to scripts" idea).
- Registry: functions have been updated to support writing to / reading from disk, for the config editor -- only simple config data supported, for large amounts coders should write to a file themselves. This is done with a new parameter: Registry.GetKey(keyname, True) will also search for the key on the config dir, if not already loaded; equiv. for Registry.SetKey(keyname, dict, True). Data is only written to / read from disk when needed and only scripts already used (assuming they support this functionality) will have config data saved.
2005-04-16 05:25:42 +00:00
|
|
|
PyObject * kw );
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_exists( PyObject * self, PyObject * args );
|
|
|
|
|
static PyObject *M_sys_time( PyObject * self );
|
|
|
|
|
static PyObject *M_sys_sleep( PyObject * self, PyObject * args );
|
Note: this commit includes new functionality to save and restore scripts configure options. This is ongoing work, scripts still have to be updated to use this feature and more tests are needed, though many have been performed. The new Scripts Config Editor script is the main part of this. If anyone wants to check it, only the AC3D importer and exporter have already been updated to use it: simply open them (you can then cancel with ESC) to have the data created, then try the config editor.
Scripts:
- Thanks Jean-Michel Soler (jms) for updated versions of dispaint, fixfromarmature and unweld (also renamed to remove version part).
- Thanks Bart for the upgraded VRML exporter (great doc webpage!). It is available as VRML 97 and the original VRML 2 is for now still there, to help users testing the new version. For the next release the old one should be removed, of course.
- New script: Scripts Config Editor (Scripts win -> Scripts -> System). Scripts with config options (simple data that is to be set according to user needs or preferences) can use this facility instead of providing a gui and writing config files to disk themselves.
- Added new menu: System, available in the Scripts win.
- Updated sys_info.py, help_browse.py and the AC3D importer and exporter.
- Removed use of the Scrollbar and added arrow keys and mouse wheel support instead in Daniel Dunbar's old doc_browser.py. The scrollbar events handling doesn't exist, Ton suggested removing the scrollbar from the API months ago. For now its ref doc is gone and no bundled script uses it, until we get time to implement it properly.
- Added module BPyRegistry.py with functions to handle reading / writing config files automatically to the scripts/bpydata/config dir.
- Removing dir release/bpydata and its contents (moved earlier to release/scripts/bpydata/)
- Bug #2379: made small changes to bevel_center's ui to fix a problem reported by Alexander Ewering (intrr):
http://projects.blender.org/tracker/?func=detail&atid=125&aid=2379&group_id=9
BPython:
- Thanks Campbell Barton for new functionality: Blender.Get() now can also return all the paths from the user prefs -> file paths win and there is a new function: Blender.sys.expandpath() to transform Blender paths (those starting with '//' and ending with '#') to absolute paths.
- Added function Blender.ShowHelp(), to open the Scripts Help Browser with a given help page -- just a time saver for scripts.
- Improved function Blender.Run() to also work with gui and file select scripts.
- Found a (new?) crash related to NMesh.PutRaw when creating a new object while in edit mode. Leaving / entering edit mode fixes the problem, so a check for obj created, edit mode and leaving / re-entering it were added to the code for now (gdb didn't help much, no backtrace)
- doc updates, including splitting intro page in two, with bpython related stuff (registering / documenting / configuring scripts and command line mode (thanks Chris Want for "use system variables to pass parameters to scripts" idea).
- Registry: functions have been updated to support writing to / reading from disk, for the config editor -- only simple config data supported, for large amounts coders should write to a file themselves. This is done with a new parameter: Registry.GetKey(keyname, True) will also search for the key on the config dir, if not already loaded; equiv. for Registry.SetKey(keyname, dict, True). Data is only written to / read from disk when needed and only scripts already used (assuming they support this functionality) will have config data saved.
2005-04-16 05:25:42 +00:00
|
|
|
static PyObject *M_sys_expandpath( PyObject *self, PyObject *args);
|
2004-06-10 15:14:49 +00:00
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/* The following string definitions are used for documentation strings. */
|
|
|
|
|
/* In Python these will be written to the console when doing a */
|
|
|
|
|
/* Blender.sys.__doc__ */
|
|
|
|
|
/*****************************************************************************/
|
2004-09-25 20:30:40 +00:00
|
|
|
static char M_sys_doc[] = "The Blender.sys submodule\n\
|
2004-06-10 15:14:49 +00:00
|
|
|
\n\
|
|
|
|
|
This is a minimal system module to supply simple functionality available\n\
|
|
|
|
|
in the default Python module os.";
|
|
|
|
|
|
|
|
|
|
static char M_sys_basename_doc[] =
|
2004-09-25 20:30:40 +00:00
|
|
|
"(path) - Split 'path' in dir and filename.\n\
|
2004-06-10 15:14:49 +00:00
|
|
|
Return the filename.";
|
|
|
|
|
|
|
|
|
|
static char M_sys_dirname_doc[] =
|
2004-09-25 20:30:40 +00:00
|
|
|
"(path) - Split 'path' in dir and filename.\n\
|
2004-06-10 15:14:49 +00:00
|
|
|
Return the dir.";
|
|
|
|
|
|
2004-06-24 15:03:08 +00:00
|
|
|
static char M_sys_join_doc[] =
|
2004-09-25 20:30:40 +00:00
|
|
|
"(dir, file) - Join dir and file to form a full filename.\n\
|
2004-06-24 15:03:08 +00:00
|
|
|
Return the filename.";
|
|
|
|
|
|
2004-06-10 15:14:49 +00:00
|
|
|
static char M_sys_splitext_doc[] =
|
2004-09-25 20:30:40 +00:00
|
|
|
"(path) - Split 'path' in root and extension:\n\
|
2004-06-10 15:14:49 +00:00
|
|
|
/this/that/file.ext -> ('/this/that/file','.ext').\n\
|
|
|
|
|
Return the pair (root, extension).";
|
|
|
|
|
|
2004-06-15 04:16:30 +00:00
|
|
|
static char M_sys_makename_doc[] =
|
2004-09-25 20:30:40 +00:00
|
|
|
"(path = Blender.Get('filename'), ext = \"\", strip = 0) -\n\
|
2004-06-15 04:16:30 +00:00
|
|
|
Strip dir and extension from path, leaving only a name, then append 'ext'\n\
|
|
|
|
|
to it (if given) and return the resulting string.\n\n\
|
|
|
|
|
(path) - string: a pathname -- Blender.Get('filename') if 'path' isn't given;\n\
|
|
|
|
|
(ext = \"\") - string: the extension to append.\n\
|
|
|
|
|
(strip = 0) - int: strip dirname from 'path' if given and non-zero.\n\
|
|
|
|
|
Ex: makename('/path/to/file/myfile.foo','-01.abc') returns 'myfile-01.abc'\n\
|
|
|
|
|
Ex: makename(ext='.txt') returns 'untitled.txt' if Blender.Get('filename')\n\
|
|
|
|
|
returns a path to the file 'untitled.blend'";
|
|
|
|
|
|
2004-06-10 15:14:49 +00:00
|
|
|
static char M_sys_time_doc[] =
|
2004-09-25 20:30:40 +00:00
|
|
|
"() - Return a float representing time elapsed in seconds.\n\
|
2004-06-10 15:14:49 +00:00
|
|
|
Each successive call is garanteed to return values greater than or\n\
|
|
|
|
|
equal to the previous call.";
|
|
|
|
|
|
2004-07-16 03:08:43 +00:00
|
|
|
static char M_sys_sleep_doc[] =
|
2004-09-25 20:30:40 +00:00
|
|
|
"(milliseconds = 10) - Sleep for the specified time.\n\
|
2004-07-16 03:08:43 +00:00
|
|
|
(milliseconds = 10) - the amount of time in milliseconds to sleep.\n\
|
|
|
|
|
This function can be necessary in tight 'get event' loops.";
|
|
|
|
|
|
2004-06-10 15:14:49 +00:00
|
|
|
static char M_sys_exists_doc[] =
|
2004-09-25 20:30:40 +00:00
|
|
|
"(path) - Check if the given pathname exists.\n\
|
New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
Thanks to them for the new contributions!
(I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'. Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work. G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A). Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode. It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender. Loading after the program is up has no such problems. When I finish I'll post examples of demo mode scripts.
2004-07-03 05:17:04 +00:00
|
|
|
The return value is as follows:\n\
|
|
|
|
|
\t 0: path doesn't exist;\n\
|
|
|
|
|
\t 1: path is an existing filename;\n\
|
|
|
|
|
\t 2: path is an existing dirname;\n\
|
|
|
|
|
\t-1: path exists but is neither a regular file nor a dir.";
|
2004-06-10 15:14:49 +00:00
|
|
|
|
Note: this commit includes new functionality to save and restore scripts configure options. This is ongoing work, scripts still have to be updated to use this feature and more tests are needed, though many have been performed. The new Scripts Config Editor script is the main part of this. If anyone wants to check it, only the AC3D importer and exporter have already been updated to use it: simply open them (you can then cancel with ESC) to have the data created, then try the config editor.
Scripts:
- Thanks Jean-Michel Soler (jms) for updated versions of dispaint, fixfromarmature and unweld (also renamed to remove version part).
- Thanks Bart for the upgraded VRML exporter (great doc webpage!). It is available as VRML 97 and the original VRML 2 is for now still there, to help users testing the new version. For the next release the old one should be removed, of course.
- New script: Scripts Config Editor (Scripts win -> Scripts -> System). Scripts with config options (simple data that is to be set according to user needs or preferences) can use this facility instead of providing a gui and writing config files to disk themselves.
- Added new menu: System, available in the Scripts win.
- Updated sys_info.py, help_browse.py and the AC3D importer and exporter.
- Removed use of the Scrollbar and added arrow keys and mouse wheel support instead in Daniel Dunbar's old doc_browser.py. The scrollbar events handling doesn't exist, Ton suggested removing the scrollbar from the API months ago. For now its ref doc is gone and no bundled script uses it, until we get time to implement it properly.
- Added module BPyRegistry.py with functions to handle reading / writing config files automatically to the scripts/bpydata/config dir.
- Removing dir release/bpydata and its contents (moved earlier to release/scripts/bpydata/)
- Bug #2379: made small changes to bevel_center's ui to fix a problem reported by Alexander Ewering (intrr):
http://projects.blender.org/tracker/?func=detail&atid=125&aid=2379&group_id=9
BPython:
- Thanks Campbell Barton for new functionality: Blender.Get() now can also return all the paths from the user prefs -> file paths win and there is a new function: Blender.sys.expandpath() to transform Blender paths (those starting with '//' and ending with '#') to absolute paths.
- Added function Blender.ShowHelp(), to open the Scripts Help Browser with a given help page -- just a time saver for scripts.
- Improved function Blender.Run() to also work with gui and file select scripts.
- Found a (new?) crash related to NMesh.PutRaw when creating a new object while in edit mode. Leaving / entering edit mode fixes the problem, so a check for obj created, edit mode and leaving / re-entering it were added to the code for now (gdb didn't help much, no backtrace)
- doc updates, including splitting intro page in two, with bpython related stuff (registering / documenting / configuring scripts and command line mode (thanks Chris Want for "use system variables to pass parameters to scripts" idea).
- Registry: functions have been updated to support writing to / reading from disk, for the config editor -- only simple config data supported, for large amounts coders should write to a file themselves. This is done with a new parameter: Registry.GetKey(keyname, True) will also search for the key on the config dir, if not already loaded; equiv. for Registry.SetKey(keyname, dict, True). Data is only written to / read from disk when needed and only scripts already used (assuming they support this functionality) will have config data saved.
2005-04-16 05:25:42 +00:00
|
|
|
static char M_sys_expandpath_doc[] =
|
|
|
|
|
"(path) - Expand this Blender internal path to a proper file system path.\n\
|
|
|
|
|
(path) - the string path to convert.\n\n\
|
|
|
|
|
Note: internally Blender paths can contain two special character sequences:\n\
|
|
|
|
|
- '//' (at start) for base path directory (the current .blend's dir path);\n\
|
|
|
|
|
- '#' (at ending) for current frame number.\n\n\
|
|
|
|
|
This function expands these to their actual content, returning a valid path.\n\
|
|
|
|
|
If the special chars are not found in the given path, it is simply returned.";
|
|
|
|
|
|
2004-06-10 15:14:49 +00:00
|
|
|
/*****************************************************************************/
|
|
|
|
|
/* Python method structure definition for Blender.sys module: */
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
struct PyMethodDef M_sys_methods[] = {
|
2004-09-25 20:30:40 +00:00
|
|
|
{"basename", M_sys_basename, METH_VARARGS, M_sys_basename_doc},
|
|
|
|
|
{"dirname", M_sys_dirname, METH_VARARGS, M_sys_dirname_doc},
|
|
|
|
|
{"join", M_sys_join, METH_VARARGS, M_sys_join_doc},
|
|
|
|
|
{"splitext", M_sys_splitext, METH_VARARGS, M_sys_splitext_doc},
|
|
|
|
|
{"makename", ( PyCFunction ) M_sys_makename,
|
|
|
|
|
METH_VARARGS | METH_KEYWORDS,
|
|
|
|
|
M_sys_makename_doc},
|
|
|
|
|
{"exists", M_sys_exists, METH_VARARGS, M_sys_exists_doc},
|
|
|
|
|
{"sleep", M_sys_sleep, METH_VARARGS, M_sys_sleep_doc},
|
|
|
|
|
{"time", ( PyCFunction ) M_sys_time, METH_NOARGS, M_sys_time_doc},
|
Note: this commit includes new functionality to save and restore scripts configure options. This is ongoing work, scripts still have to be updated to use this feature and more tests are needed, though many have been performed. The new Scripts Config Editor script is the main part of this. If anyone wants to check it, only the AC3D importer and exporter have already been updated to use it: simply open them (you can then cancel with ESC) to have the data created, then try the config editor.
Scripts:
- Thanks Jean-Michel Soler (jms) for updated versions of dispaint, fixfromarmature and unweld (also renamed to remove version part).
- Thanks Bart for the upgraded VRML exporter (great doc webpage!). It is available as VRML 97 and the original VRML 2 is for now still there, to help users testing the new version. For the next release the old one should be removed, of course.
- New script: Scripts Config Editor (Scripts win -> Scripts -> System). Scripts with config options (simple data that is to be set according to user needs or preferences) can use this facility instead of providing a gui and writing config files to disk themselves.
- Added new menu: System, available in the Scripts win.
- Updated sys_info.py, help_browse.py and the AC3D importer and exporter.
- Removed use of the Scrollbar and added arrow keys and mouse wheel support instead in Daniel Dunbar's old doc_browser.py. The scrollbar events handling doesn't exist, Ton suggested removing the scrollbar from the API months ago. For now its ref doc is gone and no bundled script uses it, until we get time to implement it properly.
- Added module BPyRegistry.py with functions to handle reading / writing config files automatically to the scripts/bpydata/config dir.
- Removing dir release/bpydata and its contents (moved earlier to release/scripts/bpydata/)
- Bug #2379: made small changes to bevel_center's ui to fix a problem reported by Alexander Ewering (intrr):
http://projects.blender.org/tracker/?func=detail&atid=125&aid=2379&group_id=9
BPython:
- Thanks Campbell Barton for new functionality: Blender.Get() now can also return all the paths from the user prefs -> file paths win and there is a new function: Blender.sys.expandpath() to transform Blender paths (those starting with '//' and ending with '#') to absolute paths.
- Added function Blender.ShowHelp(), to open the Scripts Help Browser with a given help page -- just a time saver for scripts.
- Improved function Blender.Run() to also work with gui and file select scripts.
- Found a (new?) crash related to NMesh.PutRaw when creating a new object while in edit mode. Leaving / entering edit mode fixes the problem, so a check for obj created, edit mode and leaving / re-entering it were added to the code for now (gdb didn't help much, no backtrace)
- doc updates, including splitting intro page in two, with bpython related stuff (registering / documenting / configuring scripts and command line mode (thanks Chris Want for "use system variables to pass parameters to scripts" idea).
- Registry: functions have been updated to support writing to / reading from disk, for the config editor -- only simple config data supported, for large amounts coders should write to a file themselves. This is done with a new parameter: Registry.GetKey(keyname, True) will also search for the key on the config dir, if not already loaded; equiv. for Registry.SetKey(keyname, dict, True). Data is only written to / read from disk when needed and only scripts already used (assuming they support this functionality) will have config data saved.
2005-04-16 05:25:42 +00:00
|
|
|
{"expandpath", M_sys_expandpath, METH_VARARGS, M_sys_expandpath_doc},
|
2004-09-25 20:30:40 +00:00
|
|
|
{NULL, NULL, 0, NULL}
|
2004-06-10 15:14:49 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Module Functions */
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *g_sysmodule = NULL; /* pointer to Blender.sys module */
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
PyObject *sys_Init( void )
|
2003-06-28 07:38:21 +00:00
|
|
|
{
|
2004-09-25 20:30:40 +00:00
|
|
|
PyObject *submodule, *dict, *sep;
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
submodule = Py_InitModule3( "Blender.sys", M_sys_methods, M_sys_doc );
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-01-23 19:24:45 +00:00
|
|
|
g_sysmodule = submodule;
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
dict = PyModule_GetDict( submodule );
|
2003-06-28 07:38:21 +00:00
|
|
|
|
|
|
|
|
#ifdef WIN32
|
2006-09-16 10:05:57 +00:00
|
|
|
sep = PyString_FromString( "\\" );
|
2003-06-28 07:38:21 +00:00
|
|
|
#else
|
2006-09-16 10:05:57 +00:00
|
|
|
sep = PyString_FromString( "/" );
|
2003-06-28 07:38:21 +00:00
|
|
|
#endif
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( sep ) {
|
|
|
|
|
Py_INCREF( sep );
|
2005-11-30 08:18:06 +00:00
|
|
|
EXPP_dict_set_item_str( dict, "dirsep", sep );
|
|
|
|
|
EXPP_dict_set_item_str( dict, "sep", sep );
|
2004-01-23 19:24:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return submodule;
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_basename( PyObject * self, PyObject * args )
|
2004-01-23 19:24:45 +00:00
|
|
|
{
|
|
|
|
|
PyObject *c;
|
|
|
|
|
|
2006-09-16 10:05:57 +00:00
|
|
|
char *name, *p, basename[FILE_MAXDIR + FILE_MAXFILE];
|
2004-01-23 19:24:45 +00:00
|
|
|
char sep;
|
|
|
|
|
int n, len;
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( !PyArg_ParseTuple( args, "s", &name ) )
|
|
|
|
|
return EXPP_ReturnPyObjError( PyExc_TypeError,
|
|
|
|
|
"expected string argument" );
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
len = strlen( name );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
c = PyObject_GetAttrString( g_sysmodule, "dirsep" );
|
|
|
|
|
sep = PyString_AsString( c )[0];
|
|
|
|
|
Py_DECREF( c );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
p = strrchr( name, sep );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( p ) {
|
|
|
|
|
n = name + len - p - 1; /* - 1 because we don't want the sep */
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2006-09-16 10:05:57 +00:00
|
|
|
if( n > FILE_MAXDIR + FILE_MAXFILE )
|
2004-09-25 20:30:40 +00:00
|
|
|
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
|
|
|
|
|
"path too long" );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
BLI_strncpy( basename, p + 1, n + 1 );
|
2006-09-16 10:05:57 +00:00
|
|
|
return PyString_FromString( basename );
|
|
|
|
|
|
2004-01-23 19:24:45 +00:00
|
|
|
}
|
|
|
|
|
|
2006-09-16 10:05:57 +00:00
|
|
|
return PyString_FromString( name );
|
2003-06-28 07:38:21 +00:00
|
|
|
}
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_dirname( PyObject * self, PyObject * args )
|
2003-06-28 07:38:21 +00:00
|
|
|
{
|
2004-01-23 19:24:45 +00:00
|
|
|
PyObject *c;
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2006-09-16 10:05:57 +00:00
|
|
|
char *name, *p, dirname[FILE_MAXDIR + FILE_MAXFILE];
|
2004-01-23 19:24:45 +00:00
|
|
|
char sep;
|
|
|
|
|
int n;
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( !PyArg_ParseTuple( args, "s", &name ) )
|
|
|
|
|
return EXPP_ReturnPyObjError( PyExc_TypeError,
|
|
|
|
|
"expected string argument" );
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
c = PyObject_GetAttrString( g_sysmodule, "dirsep" );
|
|
|
|
|
sep = PyString_AsString( c )[0];
|
|
|
|
|
Py_DECREF( c );
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
p = strrchr( name, sep );
|
2003-12-14 01:18:09 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( p ) {
|
2003-12-14 01:18:09 +00:00
|
|
|
n = p - name;
|
|
|
|
|
|
2006-09-16 10:05:57 +00:00
|
|
|
if( n > FILE_MAXDIR + FILE_MAXFILE )
|
2004-09-25 20:30:40 +00:00
|
|
|
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
|
|
|
|
|
"path too long" );
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
BLI_strncpy( dirname, name, n + 1 );
|
2006-09-16 10:05:57 +00:00
|
|
|
return PyString_FromString( dirname );
|
2003-12-14 01:18:09 +00:00
|
|
|
}
|
2003-06-28 07:38:21 +00:00
|
|
|
|
2006-09-16 10:05:57 +00:00
|
|
|
return PyString_FromString( "." );
|
2003-06-28 07:38:21 +00:00
|
|
|
}
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_join( PyObject * self, PyObject * args )
|
2004-06-24 15:03:08 +00:00
|
|
|
{
|
|
|
|
|
PyObject *c = NULL;
|
|
|
|
|
char *name = NULL, *path = NULL;
|
2004-09-25 20:30:40 +00:00
|
|
|
char filename[FILE_MAXDIR + FILE_MAXFILE];
|
2004-06-24 15:03:08 +00:00
|
|
|
char sep;
|
|
|
|
|
int pathlen = 0, namelen = 0;
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( !PyArg_ParseTuple( args, "ss", &path, &name ) )
|
|
|
|
|
return EXPP_ReturnPyObjError( PyExc_TypeError,
|
|
|
|
|
"expected string argument" );
|
2004-06-24 15:03:08 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
pathlen = strlen( path ) + 1;
|
|
|
|
|
namelen = strlen( name ) + 1; /* + 1 to account for '\0' for BLI_strncpy */
|
2004-06-24 15:03:08 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( pathlen + namelen > FILE_MAXDIR + FILE_MAXFILE - 1 )
|
|
|
|
|
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
|
|
|
|
|
"filename is too long." );
|
2004-06-24 15:03:08 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
c = PyObject_GetAttrString( g_sysmodule, "dirsep" );
|
|
|
|
|
sep = PyString_AsString( c )[0];
|
|
|
|
|
Py_DECREF( c );
|
2004-06-24 15:03:08 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
BLI_strncpy( filename, path, pathlen );
|
|
|
|
|
|
|
|
|
|
if( filename[pathlen - 2] != sep ) {
|
2004-06-24 15:03:08 +00:00
|
|
|
filename[pathlen - 1] = sep;
|
|
|
|
|
pathlen += 1;
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
BLI_strncpy( filename + pathlen - 1, name, namelen );
|
2004-06-24 15:03:08 +00:00
|
|
|
|
2006-09-16 10:05:57 +00:00
|
|
|
return PyString_FromString( filename );
|
2004-06-24 15:03:08 +00:00
|
|
|
}
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_splitext( PyObject * self, PyObject * args )
|
2004-01-23 19:24:45 +00:00
|
|
|
{
|
|
|
|
|
PyObject *c;
|
|
|
|
|
|
2006-09-16 10:05:57 +00:00
|
|
|
char *name, *dot, *p, path[FILE_MAXDIR + FILE_MAXFILE], ext[FILE_MAXDIR + FILE_MAXFILE];
|
2004-01-23 19:24:45 +00:00
|
|
|
char sep;
|
|
|
|
|
int n, len;
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( !PyArg_ParseTuple( args, "s", &name ) )
|
|
|
|
|
return EXPP_ReturnPyObjError( PyExc_TypeError,
|
|
|
|
|
"expected string argument" );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
len = strlen( name );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
c = PyObject_GetAttrString( g_sysmodule, "dirsep" );
|
|
|
|
|
sep = PyString_AsString( c )[0];
|
|
|
|
|
Py_DECREF( c );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
dot = strrchr( name, '.' );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( !dot )
|
|
|
|
|
return Py_BuildValue( "ss", name, "" );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
p = strrchr( name, sep );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( p ) {
|
|
|
|
|
if( p > dot )
|
|
|
|
|
return Py_BuildValue( "ss", name, "" );
|
2004-01-23 19:24:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
n = name + len - dot;
|
|
|
|
|
|
|
|
|
|
/* loong extensions are supported -- foolish, but Python's os.path.splitext
|
|
|
|
|
* supports them, so ... */
|
2006-05-17 10:09:20 +00:00
|
|
|
|
2006-09-16 10:05:57 +00:00
|
|
|
if( n >= FILE_MAXDIR + FILE_MAXFILE || ( len - n ) >= FILE_MAXDIR + FILE_MAXFILE )
|
2006-05-17 10:09:20 +00:00
|
|
|
return EXPP_ReturnPyObjError( PyExc_RuntimeError, "path too long" );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
BLI_strncpy( ext, dot, n + 1 );
|
|
|
|
|
BLI_strncpy( path, name, dot - name + 1 );
|
2004-01-23 19:24:45 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
return Py_BuildValue( "ss", path, ext );
|
2004-01-23 19:24:45 +00:00
|
|
|
}
|
2004-04-24 20:04:37 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_makename( PyObject * self, PyObject * args,
|
|
|
|
|
PyObject * kw )
|
2004-06-15 04:16:30 +00:00
|
|
|
{
|
|
|
|
|
char *path = G.sce, *ext = NULL;
|
|
|
|
|
int strip = 0;
|
2004-09-25 20:30:40 +00:00
|
|
|
static char *kwlist[] = { "path", "ext", "strip", NULL };
|
2005-02-09 05:19:24 +00:00
|
|
|
char *dot = NULL, *p = NULL, basename[FILE_MAXDIR + FILE_MAXFILE];
|
2004-06-15 04:16:30 +00:00
|
|
|
char sep;
|
|
|
|
|
int n, len, lenext = 0;
|
|
|
|
|
PyObject *c;
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( !PyArg_ParseTupleAndKeywords( args, kw, "|ssi", kwlist,
|
|
|
|
|
&path, &ext, &strip ) )
|
|
|
|
|
return EXPP_ReturnPyObjError( PyExc_TypeError,
|
|
|
|
|
"expected one or two strings and an int (or nothing) as arguments" );
|
2004-06-15 04:16:30 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
len = strlen( path ) + 1; /* + 1 to consider ending '\0' */
|
|
|
|
|
if( ext )
|
|
|
|
|
lenext = strlen( ext ) + 1;
|
2004-06-15 04:16:30 +00:00
|
|
|
|
2005-02-09 05:19:24 +00:00
|
|
|
if( ( len + lenext ) > FILE_MAXDIR + FILE_MAXFILE )
|
2004-09-25 20:30:40 +00:00
|
|
|
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
|
|
|
|
|
"path too long" );
|
2004-06-15 04:16:30 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
c = PyObject_GetAttrString( g_sysmodule, "dirsep" );
|
|
|
|
|
sep = PyString_AsString( c )[0];
|
|
|
|
|
Py_DECREF( c );
|
2004-06-15 04:16:30 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
p = strrchr( path, sep );
|
2004-06-15 04:16:30 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( p && strip ) {
|
2004-06-24 15:03:08 +00:00
|
|
|
n = path + len - p;
|
2004-09-25 20:30:40 +00:00
|
|
|
BLI_strncpy( basename, p + 1, n ); /* + 1 to skip the sep */
|
|
|
|
|
} else
|
|
|
|
|
BLI_strncpy( basename, path, len );
|
2004-06-15 04:16:30 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
dot = strrchr( basename, '.' );
|
2004-06-15 04:16:30 +00:00
|
|
|
|
|
|
|
|
/* now the extension: always remove the one in basename */
|
2004-09-25 20:30:40 +00:00
|
|
|
if( dot || ext ) {
|
|
|
|
|
if( !ext )
|
2004-06-15 04:16:30 +00:00
|
|
|
basename[dot - basename] = '\0';
|
2004-09-25 20:30:40 +00:00
|
|
|
else { /* if user gave an ext, append it */
|
2004-06-15 04:16:30 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( dot )
|
|
|
|
|
n = dot - basename;
|
|
|
|
|
else
|
|
|
|
|
n = strlen( basename );
|
2004-06-15 04:16:30 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
BLI_strncpy( basename + n, ext, lenext );
|
2004-06-15 04:16:30 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
return PyString_FromString( basename );
|
2004-06-15 04:16:30 +00:00
|
|
|
}
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_time( PyObject * self )
|
2006-09-16 10:05:57 +00:00
|
|
|
{
|
|
|
|
|
return PyFloat_FromDouble( PIL_check_seconds_timer( ) );
|
2004-04-24 20:04:37 +00:00
|
|
|
}
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_sleep( PyObject * self, PyObject * args )
|
2004-07-16 03:08:43 +00:00
|
|
|
{
|
|
|
|
|
int millisecs = 10;
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( !PyArg_ParseTuple( args, "|i", &millisecs ) )
|
|
|
|
|
return EXPP_ReturnPyObjError( PyExc_TypeError,
|
|
|
|
|
"expected int argument" );
|
2004-07-16 03:08:43 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
PIL_sleep_ms( millisecs );
|
2004-07-16 03:08:43 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
return EXPP_incr_ret( Py_None );
|
2004-07-16 03:08:43 +00:00
|
|
|
}
|
|
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
static PyObject *M_sys_exists( PyObject * self, PyObject * args )
|
2004-06-10 15:14:49 +00:00
|
|
|
{
|
|
|
|
|
char *fname = NULL;
|
2006-03-19 13:28:01 +00:00
|
|
|
int mode = 0, i = -1;
|
2004-06-10 15:14:49 +00:00
|
|
|
|
2004-09-25 20:30:40 +00:00
|
|
|
if( !PyArg_ParseTuple( args, "s", &fname ) )
|
|
|
|
|
return EXPP_ReturnPyObjError( PyExc_TypeError,
|
|
|
|
|
"expected string (pathname) argument" );
|
2004-06-10 15:14:49 +00:00
|
|
|
|
2006-03-19 13:28:01 +00:00
|
|
|
mode = BLI_exist(fname);
|
|
|
|
|
|
|
|
|
|
if( mode == 0 )
|
2004-09-25 20:30:40 +00:00
|
|
|
i = 0;
|
2006-03-19 13:28:01 +00:00
|
|
|
else if( S_ISREG( mode ) )
|
2004-09-25 20:30:40 +00:00
|
|
|
i = 1;
|
2006-03-19 13:28:01 +00:00
|
|
|
else if( S_ISDIR( mode ) )
|
2004-09-25 20:30:40 +00:00
|
|
|
i = 2;
|
New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
Thanks to them for the new contributions!
(I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'. Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work. G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A). Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode. It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender. Loading after the program is up has no such problems. When I finish I'll post examples of demo mode scripts.
2004-07-03 05:17:04 +00:00
|
|
|
/* i stays as -1 if path exists but is neither a regular file nor a dir */
|
2006-09-16 10:05:57 +00:00
|
|
|
|
|
|
|
|
return PyInt_FromLong(i);
|
2004-06-10 15:14:49 +00:00
|
|
|
}
|
Note: this commit includes new functionality to save and restore scripts configure options. This is ongoing work, scripts still have to be updated to use this feature and more tests are needed, though many have been performed. The new Scripts Config Editor script is the main part of this. If anyone wants to check it, only the AC3D importer and exporter have already been updated to use it: simply open them (you can then cancel with ESC) to have the data created, then try the config editor.
Scripts:
- Thanks Jean-Michel Soler (jms) for updated versions of dispaint, fixfromarmature and unweld (also renamed to remove version part).
- Thanks Bart for the upgraded VRML exporter (great doc webpage!). It is available as VRML 97 and the original VRML 2 is for now still there, to help users testing the new version. For the next release the old one should be removed, of course.
- New script: Scripts Config Editor (Scripts win -> Scripts -> System). Scripts with config options (simple data that is to be set according to user needs or preferences) can use this facility instead of providing a gui and writing config files to disk themselves.
- Added new menu: System, available in the Scripts win.
- Updated sys_info.py, help_browse.py and the AC3D importer and exporter.
- Removed use of the Scrollbar and added arrow keys and mouse wheel support instead in Daniel Dunbar's old doc_browser.py. The scrollbar events handling doesn't exist, Ton suggested removing the scrollbar from the API months ago. For now its ref doc is gone and no bundled script uses it, until we get time to implement it properly.
- Added module BPyRegistry.py with functions to handle reading / writing config files automatically to the scripts/bpydata/config dir.
- Removing dir release/bpydata and its contents (moved earlier to release/scripts/bpydata/)
- Bug #2379: made small changes to bevel_center's ui to fix a problem reported by Alexander Ewering (intrr):
http://projects.blender.org/tracker/?func=detail&atid=125&aid=2379&group_id=9
BPython:
- Thanks Campbell Barton for new functionality: Blender.Get() now can also return all the paths from the user prefs -> file paths win and there is a new function: Blender.sys.expandpath() to transform Blender paths (those starting with '//' and ending with '#') to absolute paths.
- Added function Blender.ShowHelp(), to open the Scripts Help Browser with a given help page -- just a time saver for scripts.
- Improved function Blender.Run() to also work with gui and file select scripts.
- Found a (new?) crash related to NMesh.PutRaw when creating a new object while in edit mode. Leaving / entering edit mode fixes the problem, so a check for obj created, edit mode and leaving / re-entering it were added to the code for now (gdb didn't help much, no backtrace)
- doc updates, including splitting intro page in two, with bpython related stuff (registering / documenting / configuring scripts and command line mode (thanks Chris Want for "use system variables to pass parameters to scripts" idea).
- Registry: functions have been updated to support writing to / reading from disk, for the config editor -- only simple config data supported, for large amounts coders should write to a file themselves. This is done with a new parameter: Registry.GetKey(keyname, True) will also search for the key on the config dir, if not already loaded; equiv. for Registry.SetKey(keyname, dict, True). Data is only written to / read from disk when needed and only scripts already used (assuming they support this functionality) will have config data saved.
2005-04-16 05:25:42 +00:00
|
|
|
|
|
|
|
|
static PyObject *M_sys_expandpath( PyObject * self, PyObject * args )
|
|
|
|
|
{
|
|
|
|
|
char *path = NULL;
|
|
|
|
|
char expanded[FILE_MAXDIR + FILE_MAXFILE];
|
|
|
|
|
|
|
|
|
|
if (!PyArg_ParseTuple( args, "s", &path))
|
|
|
|
|
return EXPP_ReturnPyObjError( PyExc_TypeError,
|
|
|
|
|
"expected string argument" );
|
2006-03-21 22:16:41 +00:00
|
|
|
|
Note: this commit includes new functionality to save and restore scripts configure options. This is ongoing work, scripts still have to be updated to use this feature and more tests are needed, though many have been performed. The new Scripts Config Editor script is the main part of this. If anyone wants to check it, only the AC3D importer and exporter have already been updated to use it: simply open them (you can then cancel with ESC) to have the data created, then try the config editor.
Scripts:
- Thanks Jean-Michel Soler (jms) for updated versions of dispaint, fixfromarmature and unweld (also renamed to remove version part).
- Thanks Bart for the upgraded VRML exporter (great doc webpage!). It is available as VRML 97 and the original VRML 2 is for now still there, to help users testing the new version. For the next release the old one should be removed, of course.
- New script: Scripts Config Editor (Scripts win -> Scripts -> System). Scripts with config options (simple data that is to be set according to user needs or preferences) can use this facility instead of providing a gui and writing config files to disk themselves.
- Added new menu: System, available in the Scripts win.
- Updated sys_info.py, help_browse.py and the AC3D importer and exporter.
- Removed use of the Scrollbar and added arrow keys and mouse wheel support instead in Daniel Dunbar's old doc_browser.py. The scrollbar events handling doesn't exist, Ton suggested removing the scrollbar from the API months ago. For now its ref doc is gone and no bundled script uses it, until we get time to implement it properly.
- Added module BPyRegistry.py with functions to handle reading / writing config files automatically to the scripts/bpydata/config dir.
- Removing dir release/bpydata and its contents (moved earlier to release/scripts/bpydata/)
- Bug #2379: made small changes to bevel_center's ui to fix a problem reported by Alexander Ewering (intrr):
http://projects.blender.org/tracker/?func=detail&atid=125&aid=2379&group_id=9
BPython:
- Thanks Campbell Barton for new functionality: Blender.Get() now can also return all the paths from the user prefs -> file paths win and there is a new function: Blender.sys.expandpath() to transform Blender paths (those starting with '//' and ending with '#') to absolute paths.
- Added function Blender.ShowHelp(), to open the Scripts Help Browser with a given help page -- just a time saver for scripts.
- Improved function Blender.Run() to also work with gui and file select scripts.
- Found a (new?) crash related to NMesh.PutRaw when creating a new object while in edit mode. Leaving / entering edit mode fixes the problem, so a check for obj created, edit mode and leaving / re-entering it were added to the code for now (gdb didn't help much, no backtrace)
- doc updates, including splitting intro page in two, with bpython related stuff (registering / documenting / configuring scripts and command line mode (thanks Chris Want for "use system variables to pass parameters to scripts" idea).
- Registry: functions have been updated to support writing to / reading from disk, for the config editor -- only simple config data supported, for large amounts coders should write to a file themselves. This is done with a new parameter: Registry.GetKey(keyname, True) will also search for the key on the config dir, if not already loaded; equiv. for Registry.SetKey(keyname, dict, True). Data is only written to / read from disk when needed and only scripts already used (assuming they support this functionality) will have config data saved.
2005-04-16 05:25:42 +00:00
|
|
|
BLI_strncpy(expanded, path, FILE_MAXDIR + FILE_MAXFILE);
|
|
|
|
|
BLI_convertstringcode(expanded, G.sce, G.scene->r.cfra);
|
|
|
|
|
|
|
|
|
|
return PyString_FromString(expanded);
|
|
|
|
|
}
|