[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14709] trunk/blender: made python add mesh module respect blenders user settings for editmode and view align .
Campbell Barton
ideasman42 at gmail.com
Tue May 6 19:55:05 CEST 2008
Revision: 14709
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14709
Author: campbellbarton
Date: 2008-05-06 19:54:55 +0200 (Tue, 06 May 2008)
Log Message:
-----------
made python add mesh module respect blenders user settings for editmode and view align.
added sys.cleanpath() was a patch in the tracker but blender's internal path cleaning is now more general and can be used from
python.
Modified Paths:
--------------
trunk/blender/release/scripts/bpymodules/BPyAddMesh.py
trunk/blender/source/blender/python/api2_2x/Blender.c
trunk/blender/source/blender/python/api2_2x/Sys.c
trunk/blender/source/blender/python/api2_2x/doc/Sys.py
Modified: trunk/blender/release/scripts/bpymodules/BPyAddMesh.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/BPyAddMesh.py 2008-05-06 17:23:27 UTC (rev 14708)
+++ trunk/blender/release/scripts/bpymodules/BPyAddMesh.py 2008-05-06 17:54:55 UTC (rev 14709)
@@ -16,13 +16,17 @@
scn = bpy.data.scenes.active
if scn.lib: return
ob_act = scn.objects.active
-
+
+ is_editmode = EditMode()
+
cursor = GetCursorPos()
- try: quat = Blender.Mathutils.Quaternion(GetViewQuat())
- except: quat = None
+ quat = None
+ if is_editmode or Blender.Get('add_view_align'): # Aligning seems odd for editmode, but blender does it, oh well
+ try: quat = Blender.Mathutils.Quaternion(GetViewQuat())
+ except: pass
# Exist editmode for non mesh types
- if ob_act and ob_act.type != 'Mesh' and EditMode():
+ if ob_act and ob_act.type != 'Mesh' and is_editmode:
EditMode(0)
# We are in mesh editmode
@@ -65,9 +69,10 @@
# Mesh with no data, unlikely
me.edges.extend(edges)
me.faces.extend(faces)
+
+ if is_editmode or Blender.Get('add_editmode'):
+ EditMode(1)
- EditMode(1)
-
else:
# Object mode add new
@@ -90,10 +95,11 @@
ob_act.setMatrix(mat)
ob_act.loc = cursor
-
- EditMode(1)
+ if is_editmode or Blender.Get('add_editmode'):
+ EditMode(1)
+
def write_mesh_script(filepath, me):
'''
filepath - path to py file
Modified: trunk/blender/source/blender/python/api2_2x/Blender.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Blender.c 2008-05-06 17:23:27 UTC (rev 14708)
+++ trunk/blender/source/blender/python/api2_2x/Blender.c 2008-05-06 17:54:55 UTC (rev 14709)
@@ -545,8 +545,12 @@
else if(StringEqual( str, "compressfile" ))
ret = PyInt_FromLong( (U.flag & USER_FILECOMPRESS) >> 15 );
else if(StringEqual( str, "mipmap" ))
- ret = PyInt_FromLong( (U.gameflags & USER_DISABLE_MIPMAP) == 0 );
- else
+ ret = PyInt_FromLong( (U.gameflags & USER_DISABLE_MIPMAP)!=0 );
+ else if(StringEqual( str, "add_view_align" ))
+ ret = PyInt_FromLong( ((U.flag & USER_ADD_VIEWALIGNED)!=0) );
+ else if(StringEqual( str, "add_editmode" ))
+ ret = PyInt_FromLong( ((U.flag & USER_ADD_EDITMODE)!=0) );
+ else
return EXPP_ReturnPyObjError( PyExc_AttributeError, "unknown attribute" );
if (ret) return ret;
Modified: trunk/blender/source/blender/python/api2_2x/Sys.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Sys.c 2008-05-06 17:23:27 UTC (rev 14708)
+++ trunk/blender/source/blender/python/api2_2x/Sys.c 2008-05-06 17:54:55 UTC (rev 14709)
@@ -58,6 +58,7 @@
static PyObject *M_sys_time( PyObject * self );
static PyObject *M_sys_sleep( PyObject * self, PyObject * args );
static PyObject *M_sys_expandpath( PyObject *self, PyObject *value);
+static PyObject *M_sys_cleanpath( PyObject *self, PyObject *value);
/*****************************************************************************/
/* The following string definitions are used for documentation strings. */
@@ -120,10 +121,13 @@
(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\
+- '#' characters in the filename will be replaced by the 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.";
+static char M_sys_cleanpath_doc[] =
+"(path) - Removes parts of a path that are not needed paths such as '../foo/../bar/' and '//./././'";
+
/*****************************************************************************/
/* Python method structure definition for Blender.sys module: */
/*****************************************************************************/
@@ -139,6 +143,7 @@
{"sleep", M_sys_sleep, METH_VARARGS, M_sys_sleep_doc},
{"time", ( PyCFunction ) M_sys_time, METH_NOARGS, M_sys_time_doc},
{"expandpath", M_sys_expandpath, METH_O, M_sys_expandpath_doc},
+ {"cleanpath", M_sys_cleanpath, METH_O, M_sys_cleanpath_doc},
{NULL, NULL, 0, NULL}
};
@@ -396,3 +401,24 @@
return PyString_FromString(expanded);
}
+
+static PyObject *M_sys_cleanpath( PyObject * self, PyObject * value )
+{
+ char *path = PyString_AsString(value);
+ char cleaned[FILE_MAXDIR + FILE_MAXFILE];
+ int trailing_slash = 0;
+ if (!path)
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected string argument" );
+ if (strstr(path, "/") || strstr(path, "\\")) {
+ trailing_slash = 1;
+ }
+ BLI_strncpy(cleaned, path, FILE_MAXDIR + FILE_MAXFILE);
+ BLI_cleanup_file(NULL, cleaned);
+
+ if (trailing_slash) {
+ BLI_add_slash(cleaned);
+ }
+
+ return PyString_FromString(cleaned);
+}
Modified: trunk/blender/source/blender/python/api2_2x/doc/Sys.py
===================================================================
--- trunk/blender/source/blender/python/api2_2x/doc/Sys.py 2008-05-06 17:23:27 UTC (rev 14708)
+++ trunk/blender/source/blender/python/api2_2x/doc/Sys.py 2008-05-06 17:54:55 UTC (rev 14709)
@@ -153,7 +153,7 @@
Internally, Blender recognizes two special character sequences in paths:
- '//' (used at the beginning): means base path -- the current .blend file's
dir;
- - '#' (used at the end): means current frame number.
+ - '#' characters in the filename will be replaced by the frame number.
The expanded string can be passed to generic python functions that don't
understand Blender's internal relative paths.
@note: this function is also useful for obtaining the name of the image
@@ -165,3 +165,12 @@
@rtype: string
@return: the expanded (if necessary) path.
"""
+
+def cleanpath (path):
+ """
+ Clean the given 'path' by removing unneeded components such as "/./" and "/test/../"
+ @type path: string
+ @param path: a path name.
+ @rtype: string
+ @return: the cleaned (if necessary) path.
+ """
More information about the Bf-blender-cvs
mailing list