Blender's debug mode only worked on startup:
authorWillian Padovani Germano <wpgermano@gmail.com>
Fri, 23 Jan 2004 19:24:45 +0000 (19:24 +0000)
committerWillian Padovani Germano <wpgermano@gmail.com>
Fri, 23 Jan 2004 19:24:45 +0000 (19:24 +0000)
- G.f's G_DEBUG flag was being erased in blenkernel/intern/blender.c's
  setup_app_data:

G.f= bfd->globalf

// added a line above it to fix this:

if (G.f & G_DEBUG) bfd->globalf |=G_DEBUG;
G.f= bfd->globalf;

BPython:
- debug info now only shown if Blender is started with '-d' option
- added ~/.blender/scripts to modules sys.path
- added two new functions to Blender.sys: basename and splitext
- added doc for Blender.sys, updated other docs

source/blender/blenkernel/intern/blender.c
source/blender/python/BPY_extern.h
source/blender/python/BPY_interface.c
source/blender/python/BPY_menus.c
source/blender/python/api2_2x/Sys.c
source/blender/python/api2_2x/Sys.h
source/blender/python/api2_2x/doc/Blender.py
source/blender/python/api2_2x/doc/Object.py
source/blender/python/api2_2x/doc/Registry.py
source/blender/python/api2_2x/doc/Sys.py [new file with mode: 0644]

index aed93fad8c253585599dbc0048a2d0ba3dd690eb..822d37b271a69473e44b88e4d5bf23ae3af72619 100644 (file)
@@ -283,6 +283,7 @@ static void setup_app_data(BlendFileData *bfd, char *filename) {
        R.displaymode= bfd->displaymode;
        G.curscreen= bfd->curscreen;
        G.fileflags= bfd->fileflags;
+       if (G.f & G_DEBUG) bfd->globalf |=G_DEBUG;
        G.f= bfd->globalf;
        G.scene= G.curscreen->scene;
        
index b55d55b0ffe8efe3055100613ce6c1344d6c4d1b..66fd86a57a49f32745f19a7649debc99749f2df3 100644 (file)
@@ -73,3 +73,4 @@ void BPY_clear_script(struct Script *script);
 void BPY_free_finished_script(struct Script *script);
 
 void init_syspath(void);
+void syspath_append(char *dir);
index 3a1fd5c26a06853a019bcc815f383da4c1e69ce0..225821dd8c5d94a69a6c18311ab88623d63480e2 100644 (file)
@@ -146,12 +146,14 @@ void BPY_end_python(void)
   return;
 }
 
-void syspath_append(PyObject *dir)
+void syspath_append(char *dirname)
 {
-  PyObject *mod_sys, *dict, *path;
+  PyObject *mod_sys, *dict, *path, *dir;
 
   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 */
@@ -198,19 +200,13 @@ void init_syspath(void)
     if (execdir[n-1] == '.') n--; /*fix for when run as ./blender */
     execdir[n] = '\0';
 
-    p = Py_BuildValue("s", execdir);
-    syspath_append(p);  /* 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");
 
-  if (U.pythondir && U.pythondir[0] != '\0') {
-    p = Py_BuildValue("s", U.pythondir);
-    syspath_append(p);  /* append to module search path */
-  }
-
   /* 
    * bring in the site module so we can add 
    * site-package dirs to sys.path 
@@ -236,7 +232,7 @@ void init_syspath(void)
       for (index = 0; index < size; index++) {
        item  = PySequence_GetItem (p, index);  /* new ref */
        if( item )
-         syspath_append (item);
+         syspath_append (PyString_AsString(item));
       }
     }
     Py_DECREF(mod);
@@ -273,7 +269,9 @@ void init_syspath(void)
 /*****************************************************************************/
 void BPY_post_start_python(void)
 {
-  syspath_append(Py_BuildValue("s", U.pythondir));
+  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 */
 }
 
index 070b32557a72d99dd89db4d4827e3eedd596d0b6..a9210f73933b97d60a3f4bc7d63d429c0fc2a2d6 100644 (file)
@@ -52,6 +52,7 @@
 #include <direct.h>
 #endif 
 
+#include "BKE_global.h"
 #include "BKE_utildefines.h"
 #include "BLI_blenlib.h"
 #include "MEM_guardedalloc.h"
@@ -65,6 +66,8 @@
 
 #define BPYMENU_DATAFILE "Bpymenus"
 
+static int DEBUG;
+
 /* BPyMenuTable holds all registered pymenus, as linked lists for each menu
  * where they can appear (see PYMENUHOOKS enum in BPY_menus.h).
 */
@@ -231,11 +234,13 @@ static BPyMenu *bpymenu_AddEntry (short group, short version, char *name,
                        next = menu->next;
                }
                else { /* they are in the same dir */
-                       printf("\nWarning: script %s's menu name is already in use.\n", fname);
-                       printf ("Edit the script and change its Name: '%s' field, please.\n"
+                       if (DEBUG) {
+                               printf("\nWarning: script %s's menu name is already in use.\n", fname);
+                               printf ("Edit the script and change its Name: '%s' field, please.\n"
                                                        "Note: if you really want two scripts in the same menu with\n"
                                                        "the same name, keep one in the default dir and the other in\n"
                                                        "the user defined dir, where it will take precedence.\n", name);
+                       }
                        return NULL;
                }
        }
@@ -309,7 +314,7 @@ static int bpymenu_CreateFromFile (void)
        fp = fopen(line, "rb");
 
        if (!fp) {
-               printf("BPyMenus error: couldn't open config file %s.\n", line);
+               if (DEBUG) printf("BPyMenus error: couldn't open config file %s.\n", line);
                return -1;
        }
 
@@ -340,7 +345,7 @@ static int bpymenu_CreateFromFile (void)
 
                if (parsing == 1) { /* got menu group string */
                        group = bpymenu_group_atoi(w1);
-                       if (group < 0) { /* invalid type */
+                       if (group < 0 && DEBUG) { /* invalid type */
                                printf("BPyMenus error parsing config file: wrong group: %s, "
                                        "will use 'Misc'.\n", w1);
                        }
@@ -395,7 +400,7 @@ static void bpymenu_WriteDataFile(void)
 
        fp = fopen(fname, "w");
        if (!fp) {
-               printf("BPyMenus error: couldn't write %s file.", fname);
+               if (DEBUG) printf("BPyMenus error: couldn't write %s file.", fname);
                return;
        }
 
@@ -498,7 +503,7 @@ static int bpymenu_CreateFromDir (char *dirname, int whichdir)
                fp = fopen(str, "rb");
 
                if (!fp) {
-                       printf("BPyMenus error: couldn't open %s.\n", str);
+                       if (DEBUG) printf("BPyMenus error: couldn't open %s.\n", str);
                        continue;
                }
 
@@ -542,7 +547,7 @@ static int bpymenu_CreateFromDir (char *dirname, int whichdir)
                /* first the name: */
                res = fscanf(fp, "%[^']'%[^'\r\n]'\n", w, name);
                if ((res != 2) || (w[0] != 'n' && w[0] != 'N')) {
-                       printf("BPyMenus error: wrong 'name' line in %s.\n", str);
+                       if (DEBUG) printf("BPyMenus error: wrong 'name' line in %s.\n", str);
                        goto discard;
                }
 
@@ -551,26 +556,26 @@ static int bpymenu_CreateFromDir (char *dirname, int whichdir)
                /* minimal Blender version: */
                res = fscanf(fp, "%s %d\n", w, &version);
                if ((res != 2) || (w[0] != 'b' && w[0] != 'B')) {
-                       printf("BPyMenus error: wrong 'blender' line in %s.\n", str);
+                       if (DEBUG) printf("BPyMenus error: wrong 'blender' line in %s.\n", str);
                        goto discard;
                }
 
                /* the group: */
                res = fscanf(fp, "%[^']'%[^'\r\n]'\n", w, line);
                if ((res != 2) || (w[0] != 'g' && w[0] != 'G')) {
-                       printf("BPyMenus error: wrong 'group' line in %s.\n", str);
+                       if (DEBUG) printf("BPyMenus error: wrong 'group' line in %s.\n", str);
                        goto discard;
                }
 
                res = bpymenu_group_atoi(line);
                if (res < 0) {
-                       printf("BPyMenus error: unknown 'group' %s in %s.\n", line, str);
+                       if (DEBUG) printf("BPyMenus error: unknown 'group' %s in %s.\n", line, str);
                        goto discard;
                }
 
                pymenu = bpymenu_AddEntry(res, (short)version, name, fname, whichdir, NULL);
                if (!pymenu) {
-                       printf("BPyMenus error: couldn't create entry for %s.\n", str);
+                       if (DEBUG) printf("BPyMenus error: couldn't create entry for %s.\n", str);
                        fclose(fp);
                        closedir(dir);
                        return -2;
@@ -617,7 +622,7 @@ static int bpymenu_GetStatMTime(char *name, int is_file, time_t* mtime)
 
 /* BPyMenu_Init:
  * import the bpython menus data to Blender, either from:
- * - the BPYMENU_DATAFILE file (~/Bpymenus) or
+ * - the BPYMENU_DATAFILE file (?/.blender/Bpymenus) or
  * - the scripts dir(s), case newer than the datafile (then update the file).
  * then fill the bpymenu table with this data.
  * if param usedir != 0, then the data is recreated from the dir(s) anyway.
@@ -630,6 +635,8 @@ int BPyMenu_Init(int usedir)
        time_t tdir1, tdir2, tfile;
        int res1, res2, resf = 0;
 
+       DEBUG = G.f & G_DEBUG; /* is Blender in debug mode (started with -d) ? */
+
        /* init global bpymenu table (it is a list of pointers to struct BPyMenus
         * for each available group: import, export, etc.) */
        for (res1 = 0; res1 < PYMENU_TOTAL; res1++)
@@ -643,20 +650,23 @@ int BPyMenu_Init(int usedir)
 
        if (res1 < 0) {
                tdir1 = 0;
-               printf ("\nDefault scripts dir: %s:\n%s\n", dirname, strerror(errno));
-               if (upydir)
-                       printf("Getting scripts menu data from user defined dir: %s.\n",upydir);
+               if (DEBUG) {
+                       printf ("\nDefault scripts dir: %s:\n%s\n", dirname, strerror(errno));
+                       if (upydir)
+                               printf("Getting scripts menu data from user defined dir: %s.\n",upydir);
+               }
        }
+       else { syspath_append(dirname); }
 
        if (upydir) {
                res2 = bpymenu_GetStatMTime(U.pythondir, 0, &tdir2);
 
                if (res2 < 0) {
                        tdir2 = 0;
-                       printf("\nUser defined scripts dir: %s:\n%s.\n", upydir, strerror(errno));
+                       if (DEBUG) printf("\nUser defined scripts dir: %s:\n%s.\n", upydir, strerror(errno));
                        if (res1 < 0) {
-                       printf ("To have scripts in menus, please add them to the default "
-                                                       "scripts dir: %s\n"
+                       if (DEBUG) printf ("To have scripts in menus, please add them to the"
+                                                       "default scripts dir: %s\n"
                                                        "and/or go to 'Info window -> File Paths tab' and set a valid\n"
                                                        "path for the user defined scripts dir.\n", dirname);
                        return -1;
@@ -666,12 +676,14 @@ int BPyMenu_Init(int usedir)
        else res2 = -1;
 
        if ((res1 < 0) && (res2 < 0)) {
-               printf ("\nCannot register scripts in menus, no scripts dir available."
-                                               "\nExpected default dir in %s .\n", dirname);
+               if (DEBUG) {
+                       printf ("\nCannot register scripts in menus, no scripts dir"
+                                                       " available.\nExpected default dir in %s .\n", dirname);
+               }
                return -1;
        }
 
-       printf("\nRegistering scripts in Blender menus ...\n\n");
+       if (DEBUG) printf("\nRegistering scripts in Blender menus ...\n\n");
 
        if (!usedir) { /* if we're not forced to use the dir */
                BLI_make_file_string("/", fname, bpymenu_gethome(), BPYMENU_DATAFILE);
@@ -683,13 +695,16 @@ int BPyMenu_Init(int usedir)
 
        if ((tfile > tdir1) && (tfile > tdir2) && !resf) { /* file is newer */
                resf = bpymenu_CreateFromFile(); /* -1 if an error occurred */
-               if (!resf) printf("Getting menu data for scripts from file: %s\n\n", fname);
+               if (!resf && DEBUG)
+                       printf("Getting menu data for scripts from file: %s\n\n", fname);
        }
        else resf = -1; /* -1 to use dirs: didn't use file or it was corrupted */
 
        if (resf == -1) { /* use dirs */
-               printf("Getting menu data for scripts from dir(s):\n%s\n", dirname);
-               if (upydir) printf("%s\n", upydir);
+               if (DEBUG) {
+                       printf("Getting menu data for scripts from dir(s):\n%s\n", dirname);
+                       if (upydir) printf("%s\n", upydir);
+               }
                if (res1 == 0) bpymenu_CreateFromDir(dirname, 0);
                if (res2 == 0) bpymenu_CreateFromDir(U.pythondir, 1);
 
@@ -699,7 +714,7 @@ int BPyMenu_Init(int usedir)
 
                /* if we got, recreate the file */
                if (res1 < PYMENU_TOTAL) bpymenu_WriteDataFile();
-               else {
+               else if (DEBUG) {
                        printf ("\nWarning: Registering scripts in menus -- no info found.\n"
                                                        "Either your scripts dirs have no .py scripts or the scripts\n"
                                                        "don't have a header with registration data.\n"
index 29c54785595fd33491ba5e28dd9befb85be131d6..99b5d3488b536d4e15a687630f13d7022bef8b42 100644 (file)
@@ -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.
  * ***** END GPL/BL DUAL LICENSE BLOCK *****
 */
 
+#include "BKE_utildefines.h"
+
 #include "Sys.h"
 
 static PyObject *g_sysmodule = NULL; /* pointer to Blender.sys module */
 
 PyObject *sys_Init (void)
 {
-  PyObject  *submodule, *dict, *sep;
+       PyObject        *submodule, *dict, *sep;
 
-  submodule = Py_InitModule3("Blender.sys", M_sys_methods, M_sys_doc);
+       submodule = Py_InitModule3("Blender.sys", M_sys_methods, M_sys_doc);
 
-  g_sysmodule = submodule;
+       g_sysmodule = submodule;
 
-  dict = PyModule_GetDict(submodule);
+       dict = PyModule_GetDict(submodule);
 
 #ifdef WIN32
-  sep = Py_BuildValue("s", "\\");
+       sep = Py_BuildValue("s", "\\");
 #else
-  sep = Py_BuildValue("s", "/");
+       sep = Py_BuildValue("s", "/");
 #endif
 
-  if (sep) {
-    Py_INCREF(sep);
-    PyDict_SetItemString(dict, "dirsep" , sep);
-    PyDict_SetItemString(dict, "sep" , sep);
-  }
+       if (sep) {
+               Py_INCREF(sep);
+               PyDict_SetItemString(dict, "dirsep" , sep);
+               PyDict_SetItemString(dict, "sep" , sep);
+       }
+
+       return submodule;
+}
+
+static PyObject *M_sys_basename (PyObject *self, PyObject *args)
+{
+       PyObject *c;
+
+       char *name, *p, basename[FILE_MAXFILE];
+       char sep;
+       int n, len;
+
+       if (!PyArg_ParseTuple(args, "s", &name))
+               return EXPP_ReturnPyObjError (PyExc_TypeError,
+                                                       "expected string argument");
 
-  return submodule;
+       len = strlen(name);
+
+       c = PyObject_GetAttrString (g_sysmodule, "dirsep");
+       sep = PyString_AsString(c)[0];
+       Py_DECREF(c);
+
+       p = strrchr(name, sep);
+
+       if (p) {
+               n = name + len - p - 1; /* - 1 because we don't want the sep */
+
+               if (n > FILE_MAXFILE)
+                       return EXPP_ReturnPyObjError(PyExc_RuntimeError, "path too long");
+
+               strncpy(basename, p+1, n); /* + 1 to skip the sep */
+               basename[n] = 0;
+               return Py_BuildValue("s", basename);
+       }
+
+       return Py_BuildValue("s", name);
 }
 
 static PyObject *M_sys_dirname (PyObject *self, PyObject *args)
 {
-  PyObject *c;
+       PyObject *c;
 
-  char *name, *p, dirname[256];
-  char sep;
-  int n;
+       char *name, *p, dirname[FILE_MAXDIR];
+       char sep;
+       int n;
 
-  if (!PyArg_ParseTuple(args, "s", &name))
-    return EXPP_ReturnPyObjError (PyExc_TypeError,
-              "expected string argument");
+       if (!PyArg_ParseTuple(args, "s", &name))
+               return EXPP_ReturnPyObjError (PyExc_TypeError,
+                                                       "expected string argument");
 
-  c = PyObject_GetAttrString (g_sysmodule, "dirsep");
-  sep = PyString_AsString(c)[0];
-  Py_DECREF(c);
+       c = PyObject_GetAttrString (g_sysmodule, "dirsep");
+       sep = PyString_AsString(c)[0];
+       Py_DECREF(c);
 
-  p = strrchr(name, sep);
+       p = strrchr(name, sep);
 
-  if (p) {
+       if (p) {
                n = p - name;
 
-               if (n > 255) {
-                       PyErr_SetString(PyExc_RuntimeError, "path too long");
-                       return 0;
-               }
+               if (n > FILE_MAXDIR)
+                       return EXPP_ReturnPyObjError (PyExc_RuntimeError, "path too long");
 
-       strncpy(dirname, name, n);
-       dirname[n] = 0;
-       return Py_BuildValue("s", dirname);
+               strncpy(dirname, name, n);
+               dirname[n] = 0;
+               return Py_BuildValue("s", dirname);
        }
 
        return Py_BuildValue("s", "."); /* XXX need to fix this? (is crossplatform?)*/
 }
+
+static PyObject *M_sys_splitext (PyObject *self, PyObject *args)
+{
+       PyObject *c;
+
+       char *name, *dot, *p, path[FILE_MAXFILE], ext[FILE_MAXFILE];
+       char sep;
+       int n, len;
+
+       if (!PyArg_ParseTuple(args, "s", &name))
+               return EXPP_ReturnPyObjError (PyExc_TypeError,
+                                                       "expected string argument");
+
+       len = strlen(name);
+
+       c = PyObject_GetAttrString (g_sysmodule, "dirsep");
+       sep = PyString_AsString(c)[0];
+       Py_DECREF(c);
+
+       dot = strrchr(name, '.');
+
+       if (!dot) return Py_BuildValue("ss", name, "");
+
+       p = strrchr(name, sep);
+
+       if (p) {
+               if (p > dot) return Py_BuildValue("ss", name, "");
+       }
+
+       n = name + len - dot;
+
+       /* loong extensions are supported -- foolish, but Python's os.path.splitext
+        * supports them, so ... */
+       if (n > FILE_MAXFILE || (len - n ) > FILE_MAXFILE)
+               EXPP_ReturnPyObjError(PyExc_RuntimeError, "path too long");
+
+       strncpy(ext, dot, n);
+       ext[n] = 0;
+       strncpy(path, name, dot - name);
+       path[dot - name] = 0;
+
+       return Py_BuildValue("ss", path, ext);
+}
index 8ecb9046f33b80551a119a9b10f65177d6a11ba7..f3967268129e96cddaca69213d2a1424c808f2fc 100644 (file)
@@ -40,7 +40,9 @@
 /*****************************************************************************/
 /* Python API function prototypes for the sys module.                        */
 /*****************************************************************************/
+static PyObject *M_sys_basename (PyObject *self, PyObject *args);
 static PyObject *M_sys_dirname (PyObject *self, PyObject *args);
+static PyObject *M_sys_splitext (PyObject *self, PyObject *args);
 
 /*****************************************************************************/
 /* The following string definitions are used for documentation strings.      */
@@ -50,16 +52,26 @@ static PyObject *M_sys_dirname (PyObject *self, PyObject *args);
 static char M_sys_doc[] =
 "The Blender.sys submodule\n\
 \n\
-This is a minimal sys module kept for compatibility.  It may also still be\n\
-useful for users without full Python installations.\n";
+This is a minimal system module to supply simple functionality available\n\
+in the default Python module os.";
 
-static char M_sys_dirname_doc[] = "";
+static char M_sys_basename_doc[]="(path) - Split 'path' in dir and filename.\n\
+Return the filename.";
+
+static char M_sys_dirname_doc[]="(path) - Split 'path' in dir and filename.\n\
+Return the dir.";
+
+static char M_sys_splitext_doc[]="(path) - Split 'path' in root and \
+extension:\n/this/that/file.ext -> ('/this/that/file','.ext').\n\
+Return the pair (root, extension).";
 
 /*****************************************************************************/
 /* Python method structure definition for Blender.sys module:                */
 /*****************************************************************************/
 struct PyMethodDef M_sys_methods[] = {
+  {"basename",    M_sys_basename,        METH_VARARGS, M_sys_basename_doc},
   {"dirname",     M_sys_dirname,         METH_VARARGS, M_sys_dirname_doc},
+  {"splitext",    M_sys_splitext,        METH_VARARGS, M_sys_splitext_doc},
   {NULL, NULL, 0, NULL}
 };
 
index cc03ef5b3f1906c968ea68143f75c13286b90836..4b1fde98049c91e8c2a23bfb58e27f768235a2b9 100644 (file)
@@ -8,7 +8,7 @@
 # -n "Blender" --no-private --no-frames Blender.py \
 # Types.py Scene.py Object.py NMesh.py Material.py Camera.py Lamp.py \
 # Armature.py Metaball.py Effect.py Curve.py Ipo.py World.py BGL.py Window.py \
-# Draw.py Image.py Text.py Lattice.py Texture.py
+# Draw.py Image.py Text.py Lattice.py Texture.py Registry.py Sys.py
 
 """
 The main Blender module.
@@ -40,6 +40,7 @@ The Blender Python API Reference
   - L{Types}
   - L{Window}
   - L{World}
+  - L{sys<Sys>}
 
  Introduction:
  -------------
@@ -55,8 +56,8 @@ The Blender Python API Reference
  open-source language.
 
 @author: The Blender Python Team
-@requires: Blender 2.31 or newer.
-@version: 0.3
+@requires: Blender 2.32 or newer.
+@version: 0.4
 @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>}
@@ -65,7 +66,7 @@ The Blender Python API Reference
 
 def Set (request, data):
   """
-  Update settings in Blender
+  Update settings in Blender.
   @type request: string
   @param request: The setting to change:
       - 'curframe': the current animation frame
@@ -89,19 +90,11 @@ def Get (request):
 
 def Redraw ():
   """
-  Redraw all 3D windows
+  Redraw all 3D windows.
   """
 
 def ReleaseGlobalDict (bool = None):
   """
-  Define whether the global Python Interpreter dictionary should be cleared
-  after the script is run.  Default is to clear (non-zero bool).
-  @type bool: an int, actually
-  @param bool: The flag to release (non-zero bool) or not (bool = 0) the dict.
-      if no argument is passed, this function simply returns the current
-      behavior.
-  @rtype: int
-  @return: A bool value (0 or 1) telling the current behavior.
-  @warn: This function was added as a test and there's a good chance that it
-     won't be kept in the future, in favor of a better method.
+  @depreciated: this function doesn't work anymore and will be removed. 
+      Look at the L{Registry} submodule for a better alternative.
   """
index ddbba307169aa761529214dff047423ceada47c6..05290549eb9974b3cffb5e03a6c41470c6b64bd7 100644 (file)
@@ -289,6 +289,12 @@ class Object:
     returned.
     """
 
+  def getSize():
+    """
+    Returns the object's size.
+    @return: (SizeX, SizeY, SizeZ)
+    """
+
   def getTracked():
     """
     Returns the object's tracked object.
@@ -421,7 +427,18 @@ class Object:
     @type name: String
     @param name: The new name for the object.
     """
+
+  def setSize(x, y, z):
+    """
+    Sets the object's size.
+    @type x: float
+    @param x: The X size multiplier.
+    @type y: float
+    @param y: The Y size multiplier.
+    @type z: float
+    @param z: The Z size multiplier.
+    """
+
   def shareFrom(object):
     """
     Link data of self with object specified in the argument. This works only
index c7e981a69d080fd723b7551a3c52cb5515d30379..390669eb37da83fc8f846f509014209527622bf9 100644 (file)
@@ -12,9 +12,9 @@ dictionary, which is deleted when the script finishes. This is done to avoid
 problems with name clashes and garbage collecting.  But the result is that
 data created by a script isn't kept after it leaves, for itself or others to
 access later: the data isn't persistent. The Registry module was created to
-give script authors a way around this limitation. In Python terms, the
-Registry holds a dictionary of dictionaries.
+give script authors a way around this limitation.
 
+In Python terms, the Registry holds a dictionary of dictionaries.
 You should use it to save Python objects only, not BPython (Blender Python)
 objects -- but you can save BPython object names, since those are strings.
 Also, if you need to save a considerable amount of data, please save to a
@@ -23,14 +23,14 @@ can simply be read from a file.
 
 Two uses for this module:
 
-a) Save configuration data from your script's gui (button values) so that the
+a) To save data from a script that another script will need to access later.
+
+b) To save configuration data from your script's gui (button values) so that the
 next time the user runs your script, the changes will still be there. Later we
 can make Blender save the Registry so that its data won't be lost after users
 quit the program. And also add an option to save as a Text that can be kept in
 a .blend file, letting users keep script data there.
 
-b) Save data from a script that another one will need to access later.
-
 Example::
 
   import Blender
@@ -40,15 +40,15 @@ Example::
   myvar1 = 0
   myvar2 = 3.2
   mystr = "hello"
-  #
+
   # then check if they are already at the Registry (saved on a
-  # previous execution of your script):
+  # previous execution of this script):
   dict = Registry.GetKey('MyScript')
   if dict: # if found, get the values saved there
     myvar1 = dict['myvar1']
     myvar2 = dict['myvar2']
     mystr = dict['mystr']
-  #
+
   # let's create a function to update the Registry when we need to:
   def update_Registry():
     d = {}
@@ -56,9 +56,11 @@ Example::
     d['myvar2'] = myvar2
     d['mystr'] = mystr
     Blender.Registry.SetKey('MyScript', d)
+
   # ...
-  # here goes the main part of your script ...
+  # here goes the main part of the script ...
   # ...
+
   # at the end, before exiting, we use our helper function:
   update_Registry()
   # note1: better not update the Registry when the user cancels the script
diff --git a/source/blender/python/api2_2x/doc/Sys.py b/source/blender/python/api2_2x/doc/Sys.py
new file mode 100644 (file)
index 0000000..e212784
--- /dev/null
@@ -0,0 +1,65 @@
+# Blender.sys module
+
+"""
+The Blender.sys submodule.
+
+sys
+===
+
+This module provides a minimal set of helper functions and data.  Its purpose
+is to avoid the need for the standard Python module 'os', in special 'os.path',
+though it is only meant for the simplest cases.
+
+Example::
+
+  import Blender
+
+  filename = ""
+  def f(name): # file selector callback
+    global filename
+    filename = name
+
+  Blender.Window.FileSelector(f)
+
+  if filename:
+    print 'basename:', Blender.sys.basename(filename)
+    print 'dirname:',  Blender.sys.dirname(filename)
+    print 'splitext:', Blender.sys.splitext(filename)
+
+@type sep: char
+@var sep: the platform-specific dir separator for this Blender: '/'
+    everywhere, except on Win systems, that use '\\'. 
+@type dirsep: char
+@var dirsep: same as L{sep}.
+@type progname: string
+@var progname: the Blender executable (argv[0]).
+
+@attention: The module is called sys, not Sys.
+"""
+
+def basename (path):
+  """
+  Get the base name (filename stripped from dir info) of 'path'.
+  @type path: string
+  @param path: a path name
+  @rtype: string
+  @return: the base name
+  """
+
+def dirname (path):
+  """
+  Get the dir name (dir path stripped from filename) of 'path'.
+  @type path: string
+  @param path: a path name
+  @rtype: string
+  @return: the dir name
+  """
+
+def splitext (path):
+  """
+  Split 'path' into (root, ext), where 'ext' is a file extension.
+  @type path: string
+  @param path: a path name
+  @rtype: list with two strings
+  @return: (root, ext)
+  """