- updated docs with recently added functions
- dynamic menu entries now are sorted (alphabetically, of course)
- added new menu categories for scripts: Wizards, Modifiers, Generators, Materials, Animation:
  only added to list of options, didn't mess with any Blender header.  They are already available from the "Scripts" menu in the scripts win, but not elsewhere.
- added option 'datadir' to Blender.Get(option):
  so scripts can use .blender/bpydata for reading / writing their data files.
This commit is contained in:
Willian Padovani Germano 2004-05-22 20:25:22 +00:00
parent 4551490dd4
commit 7f6b88e389
10 changed files with 330 additions and 202 deletions

@ -74,6 +74,7 @@ void BPY_free_finished_script(struct Script *script);
void init_syspath(void);
void syspath_append(char *dir);
char *bpy_gethome();
#ifdef __cplusplus
} /* extern "C" */

@ -567,7 +567,7 @@ int BPY_menu_do_python(short menutype, int event)
if (pym->dir) /* script is in U.pythondir */
BLI_make_file_string("/", filestr, U.pythondir, pym->filename);
else { /* script is in ~/.blender/scripts/ */
BLI_make_file_string("/", dirname, bpymenu_gethome(), "scripts");
BLI_make_file_string("/", dirname, bpy_gethome(), "scripts");
BLI_make_file_string("/", filestr, dirname, pym->filename);
}
@ -1105,3 +1105,35 @@ void init_ourImport(void)
d = PyModule_GetDict(m);
PyDict_SetItemString(d, "__import__", import);
}
/* this makes sure BLI_gethome() returns a path with '.blender' appended
* Besides, this function now either returns userhome/.blender (if it exists)
* or blenderInstallDir/.blender/ otherwise */
char *bpy_gethome()
{
static char homedir[FILE_MAXDIR];
char bprogdir[FILE_MAXDIR];
char *s;
int i;
if (homedir[0] != '\0') return homedir; /* no need to search twice */
s = BLI_gethome();
if (strstr(s, ".blender")) PyOS_snprintf(homedir, FILE_MAXDIR, s);
else BLI_make_file_string ("/", homedir, s, ".blender/");
/* if userhome/.blender/ exists, return it */
if (BLI_exists(homedir)) return homedir;
/* otherwise, use argv[0] (bprogname) to get .blender/ in
* Blender's installation dir */
s = BLI_last_slash(bprogname);
i = s - bprogname + 1;
PyOS_snprintf(bprogdir, i, bprogname);
BLI_make_file_string ("/", homedir, bprogdir, ".blender/");
return homedir;
}

@ -73,43 +73,15 @@ static int DEBUG;
*/
BPyMenu *BPyMenuTable[PYMENU_TOTAL];
/* we can't be sure if BLI_gethome() returned a path
* with '.blender' appended or not. Besides, this function now
* either returns userhome/.blender (if it exists) or
* blenderInstallDir/.blender/ otherwise */
char *bpymenu_gethome()
{
static char homedir[FILE_MAXDIR];
char bprogdir[FILE_MAXDIR];
char *s;
int i;
if (homedir[0] != '\0') return homedir; /* no need to search twice */
s = BLI_gethome();
if (strstr(s, ".blender")) PyOS_snprintf(homedir, FILE_MAXDIR, s);
else BLI_make_file_string ("/", homedir, s, ".blender/");
/* if userhome/.blender/ exists, return it */
if (BLI_exists(homedir)) return homedir;
/* otherwise, use argv[0] (bprogname) to get .blender/ in
* Blender's installation dir */
s = BLI_last_slash(bprogname);
i = s - bprogname + 1;
PyOS_snprintf(bprogdir, i, bprogname);
BLI_make_file_string ("/", homedir, bprogdir, ".blender/");
return homedir;
}
static int bpymenu_group_atoi (char *str)
{
if (!strcmp(str, "Import")) return PYMENU_IMPORT;
else if (!strcmp(str, "Export")) return PYMENU_EXPORT;
else if (!strcmp(str, "Generators")) return PYMENU_GENERATORS;
else if (!strcmp(str, "Modifiers")) return PYMENU_MODIFIERS;
else if (!strcmp(str, "Wizards")) return PYMENU_WIZARDS;
else if (!strcmp(str, "Animation")) return PYMENU_ANIMATION;
else if (!strcmp(str, "Materials")) return PYMENU_MATERIALS;
/* "Misc" or an inexistent group name: use misc */
else return PYMENU_MISC;
}
@ -123,6 +95,21 @@ char *BPyMenu_group_itoa (short menugroup)
case PYMENU_EXPORT:
return "Export";
break;
case PYMENU_GENERATORS:
return "Generators";
break;
case PYMENU_MODIFIERS:
return "Modifiers";
break;
case PYMENU_WIZARDS:
return "Wizards";
break;
case PYMENU_ANIMATION:
return "Animation";
break;
case PYMENU_MATERIALS:
return "Materials";
break;
case PYMENU_MISC:
return "Misc";
break;
@ -294,12 +281,26 @@ static BPyMenu *bpymenu_AddEntry (short group, short version, char *name,
menu->next = next; /* non-NULL if menu already existed */
if (nameclash) return menu; /* no need to place it, it's already at the list*/
else { /* insert the new entry in its correct position at the table */
BPyMenu *prev = NULL;
char *s = NULL;
iter = &BPyMenuTable[group];
while (*iter) iter = &((*iter)->next);
iter = &BPyMenuTable[group];
while (*iter) {
s = (*iter)->name;
if (s) if (strcmp(menu->name, s) < 0) break; /* sort by names */
prev = *iter;
iter = &((*iter)->next);
}
if (*iter) { /* prepend */
menu->next = *iter;
if (prev) prev->next = menu;
else BPyMenuTable[group] = menu; /* is first entry */
}
else *iter = menu; /* append */
}
*iter = menu;
return menu;
}
@ -345,7 +346,7 @@ static int bpymenu_CreateFromFile (void)
BPyMenuTable[group] = NULL;
/* let's try to open the file with bpymenu data */
BLI_make_file_string ("/", line, bpymenu_gethome(), BPYMENU_DATAFILE);
BLI_make_file_string ("/", line, bpy_gethome(), BPYMENU_DATAFILE);
fp = fopen(line, "rb");
@ -432,7 +433,7 @@ static void bpymenu_WriteDataFile(void)
char fname[FILE_MAXDIR+FILE_MAXFILE];
int i;
BLI_make_file_string("/", fname, bpymenu_gethome(), BPYMENU_DATAFILE);
BLI_make_file_string("/", fname, bpy_gethome(), BPYMENU_DATAFILE);
fp = fopen(fname, "w");
if (!fp) {
@ -680,7 +681,7 @@ int BPyMenu_Init(int usedir)
if (U.pythondir[0] == '\0') upydir = NULL;
BLI_make_file_string ("/", dirname, bpymenu_gethome(), "scripts");
BLI_make_file_string ("/", dirname, bpy_gethome(), "scripts");
res1 = bpymenu_GetStatMTime(dirname, 0, &tdir1);
@ -722,7 +723,7 @@ int BPyMenu_Init(int usedir)
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);
BLI_make_file_string("/", fname, bpy_gethome(), BPYMENU_DATAFILE);
resf = bpymenu_GetStatMTime(fname, 1, &tfile);
if (resf < 0) tfile = 0;
}

@ -36,8 +36,8 @@
* adds 'dynamic' menus to Blender, letting scripts register themselves in any
* of a few pre-defined (trivial to upgrade) places in menus. These places or
* slots are called groups here (Import, Export, etc). This is how it works:
* - scripts at some specific folder (only the user pref U.pythondir, right
* now) are scanned for registration info.
* - scripts at dirs user pref U.pythondir and .blender/scripts/ are scanned
* for registration info.
* - this data is also saved to a .Bpymenus file at the user's home dir and
* only re-created when the scripts folder gets modified.
* - on start-up Blender uses this info to fill a table, which is used to
@ -79,9 +79,14 @@ typedef struct BPyMenu {
* the new group.
*/
typedef enum {
PYMENU_WIZARDS, /* complex 'app' scripts */
PYMENU_MODIFIERS, /* modifies existing objs */
PYMENU_MISC,
PYMENU_MATERIALS,
PYMENU_GENERATORS, /* creates new objects */
PYMENU_IMPORT,
PYMENU_EXPORT,
PYMENU_MISC,
PYMENU_ANIMATION,
PYMENU_TOTAL
} PYMENUHOOKS;
@ -96,7 +101,6 @@ void BPyMenu_RemoveAllEntries(void);
void BPyMenu_PrintAllEntries(void);
char *BPyMenu_CreatePupmenuStr(BPyMenu *pym, short group);
char *BPyMenu_group_itoa (short group);
char *bpymenu_gethome();
struct BPyMenu *BPyMenu_GetEntry (short group, short pos);
#endif /* BPY_MENUS_H */

@ -41,11 +41,13 @@
#include <DNA_object_types.h>
#include <DNA_scene_types.h>
#include <DNA_screen_types.h> /* for SPACE_VIEW3D */
#include <DNA_space_types.h> /* for SPACE_VIEW3D */
#include <DNA_userdef_types.h>
#include <BKE_ipo.h>
#include "gen_utils.h"
#include "modules.h"
#include "../BPY_extern.h" /* for bpy_gethome() */
/* From Window.h, used here by Blender_Redraw */
PyObject *M_Window_Redraw(PyObject *self, PyObject *args);
@ -80,6 +82,7 @@ static char Blender_Get_doc[] =
'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\
'datadir' - Returns the dir where scripts can save their data, if available\n\
'version' - Returns the Blender version number";
static char Blender_Redraw_doc[] = "() - Redraw all 3D windows";
@ -196,6 +199,13 @@ static PyObject *Blender_Get (PyObject *self, PyObject *args)
{
return ( PyString_FromString (G.sce) );
}
if (StringEqual (str, "datadir"))
{
char datadir[FILE_MAXDIR];
BLI_make_file_string("/", datadir, bpy_gethome(), "bpydata/");
if (BLI_exists(datadir)) return PyString_FromString(datadir);
else return EXPP_incr_ret (Py_None);
}
/* According to the old file (opy_blender.c), the following if
statement is a quick hack and needs some clean up. */
if (StringEqual (str, "vrmloptions"))

@ -546,8 +546,7 @@ static PyObject *Method_Exit (PyObject *self, PyObject *args)
* and gui button events, so a script can continue executing after the
* interpreter reached its end and returned control to Blender. Everytime
* the SPACE_SCRIPT window with this script is redrawn, the registered
* callbacks are executed and deleted (a new call to Register re-inserts them
* or new ones).*/
* callbacks are executed. */
static PyObject *Method_Register (PyObject *self, PyObject *args)
{
PyObject *newdrawc = NULL, *neweventc = NULL, *newbuttonc = NULL;

@ -29,7 +29,152 @@
* ***** END GPL/BL DUAL LICENSE BLOCK *****
*/
#include "Text.h"
#include <Python.h>
#include <stdio.h>
#include <BKE_main.h>
#include <BKE_global.h>
#include <BKE_library.h>
#include <BKE_sca.h>
#include <BIF_drawtext.h>
#include <BKE_text.h>
#include <BLI_blenlib.h>
#include <DNA_text_types.h>
#include "gen_utils.h"
#include "modules.h"
#include "../BPY_extern.h"
#define EXPP_TEXT_MODE_FOLLOW TXT_FOLLOW
/*****************************************************************************/
/* Python API function prototypes for the Text module. */
/*****************************************************************************/
static PyObject *M_Text_New (PyObject *self, PyObject *args,
PyObject *keywords);
static PyObject *M_Text_Get (PyObject *self, PyObject *args);
static PyObject *M_Text_Load (PyObject *self, PyObject *args);
static PyObject *M_Text_unlink (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.Text.__doc__ */
/*****************************************************************************/
static char M_Text_doc[] =
"The Blender Text module\n\n";
static char M_Text_New_doc[] =
"() - return a new Text object";
static char M_Text_Get_doc[] =
"(name) - return the Text with name 'name', \
returns None if not found.\n If 'name' is not specified, \
it returns a list of all Texts in the\ncurrent scene.";
static char M_Text_Load_doc[] =
"(filename) - return text from file filename as a Text Object, \
returns None if not found.\n";
static char M_Text_unlink_doc[] =
"(text) - remove Text object 'text' from Blender";
/*****************************************************************************/
/* Python method structure definition for Blender.Text module: */
/*****************************************************************************/
struct PyMethodDef M_Text_methods[] = {
{"New",(PyCFunction)M_Text_New, METH_VARARGS|METH_KEYWORDS,
M_Text_New_doc},
{"Get", M_Text_Get, METH_VARARGS, M_Text_Get_doc},
{"get", M_Text_Get, METH_VARARGS, M_Text_Get_doc},
{"Load", M_Text_Load, METH_VARARGS, M_Text_Load_doc},
{"unlink", M_Text_unlink, METH_VARARGS, M_Text_unlink_doc},
{NULL, NULL, 0, NULL}
};
/*****************************************************************************/
/* Python BPy_Text structure definition: */
/*****************************************************************************/
typedef struct {
PyObject_HEAD
Text *text;
} BPy_Text;
static int Text_IsLinked(BPy_Text *self);
/*****************************************************************************/
/* Python BPy_Text methods declarations: */
/*****************************************************************************/
static PyObject *Text_getName(BPy_Text *self);
static PyObject *Text_getFilename(BPy_Text *self);
static PyObject *Text_getNLines(BPy_Text *self);
static PyObject *Text_setName(BPy_Text *self, PyObject *args);
static PyObject *Text_clear(BPy_Text *self, PyObject *args);
static PyObject *Text_write(BPy_Text *self, PyObject *args);
static PyObject *Text_set(BPy_Text *self, PyObject *args);
static PyObject *Text_asLines(BPy_Text *self, PyObject *args);
/*****************************************************************************/
/* Python BPy_Text methods table: */
/*****************************************************************************/
static PyMethodDef BPy_Text_methods[] = {
/* name, method, flags, doc */
{"getName", (PyCFunction)Text_getName, METH_NOARGS,
"() - Return Text Object name"},
{"getFilename", (PyCFunction)Text_getFilename, METH_VARARGS,
"() - Return Text Object filename"},
{"getNLines", (PyCFunction)Text_getNLines, METH_VARARGS,
"() - Return number of lines in text buffer"},
{"setName", (PyCFunction)Text_setName, METH_VARARGS,
"(str) - Change Text Object name"},
{"clear", (PyCFunction)Text_clear, METH_VARARGS,
"() - Clear Text buffer"},
{"write", (PyCFunction)Text_write, METH_VARARGS,
"(line) - Append string 'str' to Text buffer"},
{"set", (PyCFunction)Text_set, METH_VARARGS,
"(name, val) - Set attribute 'name' to value 'val'"},
{"asLines", (PyCFunction)Text_asLines, METH_VARARGS,
"() - Return text buffer as a list of lines"},
{0}
};
/*****************************************************************************/
/* Python Text_Type callback function prototypes: */
/*****************************************************************************/
static void Text_dealloc (BPy_Text *self);
static int Text_setAttr (BPy_Text *self, char *name, PyObject *v);
static PyObject *Text_getAttr (BPy_Text *self, char *name);
static int Text_compare (BPy_Text *a, BPy_Text *b);
static PyObject *Text_repr (BPy_Text *self);
/*****************************************************************************/
/* Python Text_Type structure definition: */
/*****************************************************************************/
PyTypeObject Text_Type =
{
PyObject_HEAD_INIT(NULL)
0, /* ob_size */
"Blender Text", /* tp_name */
sizeof (BPy_Text), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
(destructor)Text_dealloc, /* tp_dealloc */
0, /* tp_print */
(getattrfunc)Text_getAttr, /* tp_getattr */
(setattrfunc)Text_setAttr, /* tp_setattr */
(cmpfunc)Text_compare, /* tp_compare */
(reprfunc)Text_repr, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_as_hash */
0,0,0,0,0,0,
0, /* tp_doc */
0,0,0,0,0,0,
BPy_Text_methods, /* tp_methods */
0, /* tp_members */
};
/*****************************************************************************/
/* Function: M_Text_New */

@ -31,152 +31,4 @@
#ifndef EXPP_TEXT_H
#define EXPP_TEXT_H
#include <Python.h>
#include <stdio.h>
#include <BKE_main.h>
#include <BKE_global.h>
#include <BKE_library.h>
#include <BKE_sca.h>
#include <BIF_drawtext.h>
#include <BKE_text.h>
#include <BLI_blenlib.h>
#include <DNA_text_types.h>
#include "gen_utils.h"
#include "modules.h"
#include "../BPY_extern.h"
#define EXPP_TEXT_MODE_FOLLOW TXT_FOLLOW
/*****************************************************************************/
/* Python API function prototypes for the Text module. */
/*****************************************************************************/
static PyObject *M_Text_New (PyObject *self, PyObject *args,
PyObject *keywords);
static PyObject *M_Text_Get (PyObject *self, PyObject *args);
static PyObject *M_Text_Load (PyObject *self, PyObject *args);
static PyObject *M_Text_unlink (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.Text.__doc__ */
/*****************************************************************************/
static char M_Text_doc[] =
"The Blender Text module\n\n";
static char M_Text_New_doc[] =
"() - return a new Text object";
static char M_Text_Get_doc[] =
"(name) - return the Text with name 'name', \
returns None if not found.\n If 'name' is not specified, \
it returns a list of all Texts in the\ncurrent scene.";
static char M_Text_Load_doc[] =
"(filename) - return text from file filename as a Text Object, \
returns None if not found.\n";
static char M_Text_unlink_doc[] =
"(text) - remove Text object 'text' from Blender";
/*****************************************************************************/
/* Python method structure definition for Blender.Text module: */
/*****************************************************************************/
struct PyMethodDef M_Text_methods[] = {
{"New",(PyCFunction)M_Text_New, METH_VARARGS|METH_KEYWORDS,
M_Text_New_doc},
{"Get", M_Text_Get, METH_VARARGS, M_Text_Get_doc},
{"get", M_Text_Get, METH_VARARGS, M_Text_Get_doc},
{"Load", M_Text_Load, METH_VARARGS, M_Text_Load_doc},
{"unlink", M_Text_unlink, METH_VARARGS, M_Text_unlink_doc},
{NULL, NULL, 0, NULL}
};
/*****************************************************************************/
/* Python BPy_Text structure definition: */
/*****************************************************************************/
typedef struct {
PyObject_HEAD
Text *text;
} BPy_Text;
/*****************************************************************************/
/* Python BPy_Text methods declarations: */
/*****************************************************************************/
static PyObject *Text_getName(BPy_Text *self);
static PyObject *Text_getFilename(BPy_Text *self);
static PyObject *Text_getNLines(BPy_Text *self);
static PyObject *Text_setName(BPy_Text *self, PyObject *args);
static PyObject *Text_clear(BPy_Text *self, PyObject *args);
static PyObject *Text_write(BPy_Text *self, PyObject *args);
static PyObject *Text_set(BPy_Text *self, PyObject *args);
static PyObject *Text_asLines(BPy_Text *self, PyObject *args);
/*****************************************************************************/
/* Python BPy_Text methods table: */
/*****************************************************************************/
static PyMethodDef BPy_Text_methods[] = {
/* name, method, flags, doc */
{"getName", (PyCFunction)Text_getName, METH_NOARGS,
"() - Return Text Object name"},
{"getFilename", (PyCFunction)Text_getFilename, METH_VARARGS,
"() - Return Text Object filename"},
{"getNLines", (PyCFunction)Text_getNLines, METH_VARARGS,
"() - Return number of lines in text buffer"},
{"setName", (PyCFunction)Text_setName, METH_VARARGS,
"(str) - Change Text Object name"},
{"clear", (PyCFunction)Text_clear, METH_VARARGS,
"() - Clear Text buffer"},
{"write", (PyCFunction)Text_write, METH_VARARGS,
"(line) - Append string 'str' to Text buffer"},
{"set", (PyCFunction)Text_set, METH_VARARGS,
"(name, val) - Set attribute 'name' to value 'val'"},
{"asLines", (PyCFunction)Text_asLines, METH_VARARGS,
"() - Return text buffer as a list of lines"},
{0}
};
/*****************************************************************************/
/* Python Text_Type callback function prototypes: */
/*****************************************************************************/
static void Text_dealloc (BPy_Text *self);
static int Text_setAttr (BPy_Text *self, char *name, PyObject *v);
static PyObject *Text_getAttr (BPy_Text *self, char *name);
static int Text_compare (BPy_Text *a, BPy_Text *b);
static PyObject *Text_repr (BPy_Text *self);
/*****************************************************************************/
/* Python Text_Type structure definition: */
/*****************************************************************************/
PyTypeObject Text_Type =
{
PyObject_HEAD_INIT(NULL)
0, /* ob_size */
"Blender Text", /* tp_name */
sizeof (BPy_Text), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
(destructor)Text_dealloc, /* tp_dealloc */
0, /* tp_print */
(getattrfunc)Text_getAttr, /* tp_getattr */
(setattrfunc)Text_setAttr, /* tp_setattr */
(cmpfunc)Text_compare, /* tp_compare */
(reprfunc)Text_repr, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_as_hash */
0,0,0,0,0,0,
0, /* tp_doc */
0,0,0,0,0,0,
BPy_Text_methods, /* tp_methods */
0, /* tp_members */
};
static int Text_IsLinked(BPy_Text *self);
#endif /* EXPP_TEXT_H */

@ -62,8 +62,8 @@ The Blender Python API Reference
open-source language.
@author: The Blender Python Team
@requires: Blender 2.33 or newer.
@version: 2.33a
@requires: Blender 2.33+ or newer.
@version: 2.33a-cvs
@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>}
@ -90,6 +90,9 @@ def Get (request):
- 'staframe': the start frame of the animation
- 'endframe': the end frame of the animation
- 'filename': the name of the last file read or written
- 'datadir' : the path to the dir where scripts should store and
retrieve their data files, including saved configuration (can
be None, if not found).
- 'version' : the Blender version number
@return: The requested data.
"""
@ -99,8 +102,25 @@ def Redraw ():
Redraw all 3D windows.
"""
def ReleaseGlobalDict (bool = None):
def Load (filename = None):
"""
@depreciated: this function doesn't work anymore and will be removed.
Look at the L{Registry} submodule for a better alternative.
Load a Blender .blend file.
@type filename: string
@param filename: the pathname to the desired .blend file. If 'filename'
isn't given or if it contains the substring '.B.blend', the default
.B.blend file is loaded.
@warn: loading a new .blend file removes the current data in Blender. For
safety, this function saves the current data as an autosave file in
the temporary dir used by Blender before loading the new file.
"""
def Quit ():
"""
Exit from Blender immediately.
@warn: the use of this function should obviously be avoided, it is available
because there are some cases where it can be useful, like in automated
tests. For safety, a "quit.blend" file is saved (normal Blender behavior
upon exiting) when this function is called, so the data in Blender isn't
lost.
"""

@ -170,6 +170,70 @@ def PupMenu(name, maxrow = None):
@return: the chosen entry number or -1 if none was chosen.
"""
def PupIntInput(text, default, min, max):
"""
Create an integer number input pop-up.
This allows python to use Blender's integer number popup input.
Example::
default = 50
min = 0
max = 100
result = Draw.PupIntInput('Set this value between 0 and 100', default, min, max)
if result != None:
print result
else:
print 'no user input'
@type text: string
@param text: The text that is displayed in the popup.
@type default: int
@param default: The value that the popup is set to initialy.
@type min: int
@param min: The lowest value the popup will allow.
@type max: int
@param max: The highest value the popup will allow.
@rtype: int
@return: the number chosen or None if none was chosen.
"""
def PupFloatInput(text, default, min, max, clickStep, floatLen):
"""
Create a floating point number input pop-up.
This allows python to use Blender's floating point popup input.
Example::
default = 50
min = 0
max = 100
clickStep = 10
floatLen = 3
result = Draw.PupIntInput('Set this value between 0 and 100', default, min, max, clickStep, floatLen)
if result != None:
print result
else:
print 'no user input'
@type text: string
@param text: The text that is displayed in the popup.
@type default: float
@param default: The value that the popup is set to initialy.
@type min: float
@param min: The lowest value the popup will allow.
@type max: float
@param max: The highest value the popup will allow.
@type clickStep: int
@param clickStep: How much is incremented per user click, 100 will increment 1.0, 10 will increment 0.1 etc.
@type floatLen: int
@param floatLen: The number of decimal places to display, between 2 and 4.
@rtype: float
@return: the number chosen or None if none was chosen.
"""
def Menu(name, event, x, y, width, height, default, tooltip = None):
"""
Create a new Menu Button object.