==Python API==
Added Mesh.Modes() function, which allows scripts to get/set the selection mode settings for meshes. This was necessary in order for the mesh tools such as triangulate, remove doubles, etc., to work properly.
This commit is contained in:
		@@ -6234,8 +6234,6 @@ static PyGetSetDef BPy_Mesh_getseters[] = {
 | 
			
		||||
	 (getter)Mesh_getMode, (setter)Mesh_setMode,
 | 
			
		||||
	 "The mesh's mode bitfield",
 | 
			
		||||
	 NULL},
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	{"faceUV",
 | 
			
		||||
	 (getter)Mesh_getFlag, (setter)Mesh_setFlag,
 | 
			
		||||
	 "UV-mapped textured faces enabled",
 | 
			
		||||
@@ -6460,6 +6458,28 @@ static PyObject *M_Mesh_MVert( PyObject * self, PyObject * args )
 | 
			
		||||
	return PVert_CreatePyObject( &vert );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static PyObject *M_Mesh_Modes( PyObject * self, PyObject * args )
 | 
			
		||||
{
 | 
			
		||||
	int modes = 0;
 | 
			
		||||
 | 
			
		||||
	if( !G.scene ) {
 | 
			
		||||
		Py_RETURN_NONE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if( !PyArg_ParseTuple( args, "|i", &modes ) )
 | 
			
		||||
		return EXPP_ReturnPyObjError( PyExc_TypeError,
 | 
			
		||||
					      "expected optional int as argument" );
 | 
			
		||||
 | 
			
		||||
	if( modes > ( SCE_SELECT_VERTEX | SCE_SELECT_EDGE | SCE_SELECT_FACE ) )
 | 
			
		||||
		return EXPP_ReturnPyObjError( PyExc_ValueError,
 | 
			
		||||
					      "value out of range" );
 | 
			
		||||
 | 
			
		||||
	if( modes > 0 )
 | 
			
		||||
		G.scene->selectmode = modes;
 | 
			
		||||
	
 | 
			
		||||
	return PyInt_FromLong( G.scene->selectmode );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct PyMethodDef M_Mesh_methods[] = {
 | 
			
		||||
	{"New", (PyCFunction)M_Mesh_New, METH_VARARGS,
 | 
			
		||||
		"Create a new mesh"},
 | 
			
		||||
@@ -6467,10 +6487,12 @@ static struct PyMethodDef M_Mesh_methods[] = {
 | 
			
		||||
		"Get a mesh by name"},
 | 
			
		||||
	{"MVert", (PyCFunction)M_Mesh_MVert, METH_VARARGS,
 | 
			
		||||
		"Create a new MVert"},
 | 
			
		||||
	{"Mode", (PyCFunction)M_Mesh_Modes, METH_VARARGS,
 | 
			
		||||
		"Get/set edit mode"},
 | 
			
		||||
	{NULL, NULL, 0, NULL},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static PyObject *M_Mesh_Modes( void )
 | 
			
		||||
static PyObject *M_Mesh_ModesDict( void )
 | 
			
		||||
{
 | 
			
		||||
	PyObject *Modes = PyConstant_New(  );
 | 
			
		||||
 | 
			
		||||
@@ -6575,18 +6597,32 @@ static PyObject *M_Mesh_VertAssignDict( void )
 | 
			
		||||
	return Vert;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static PyObject *M_Mesh_SelectModeDict( void )
 | 
			
		||||
{
 | 
			
		||||
	PyObject *Mode = PyConstant_New(  );
 | 
			
		||||
	if( Mode ) {
 | 
			
		||||
		BPy_constant *d = ( BPy_constant * ) Mode;
 | 
			
		||||
		PyConstant_Insert(d, "VERTEX", PyInt_FromLong(SCE_SELECT_VERTEX));
 | 
			
		||||
		PyConstant_Insert(d, "EDGE", PyInt_FromLong(SCE_SELECT_EDGE));
 | 
			
		||||
		PyConstant_Insert(d, "FACE", PyInt_FromLong(SCE_SELECT_FACE));
 | 
			
		||||
	}
 | 
			
		||||
	return Mode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char M_Mesh_doc[] = "The Blender.Mesh submodule";
 | 
			
		||||
 | 
			
		||||
PyObject *Mesh_Init( void )
 | 
			
		||||
{
 | 
			
		||||
	PyObject *submodule;
 | 
			
		||||
 | 
			
		||||
	PyObject *Modes = M_Mesh_Modes(  );
 | 
			
		||||
	PyObject *Modes = M_Mesh_ModesDict( );
 | 
			
		||||
	PyObject *FaceFlags = M_Mesh_FaceFlagsDict( );
 | 
			
		||||
	PyObject *FaceModes = M_Mesh_FaceModesDict( );
 | 
			
		||||
	PyObject *FaceTranspModes = M_Mesh_FaceTranspModesDict( );
 | 
			
		||||
	PyObject *EdgeFlags = M_Mesh_EdgeFlagsDict(  );
 | 
			
		||||
	PyObject *AssignModes = M_Mesh_VertAssignDict( );
 | 
			
		||||
	PyObject *SelectModes = M_Mesh_SelectModeDict( );
 | 
			
		||||
 | 
			
		||||
	if( PyType_Ready( &MCol_Type ) < 0 )
 | 
			
		||||
		return NULL;
 | 
			
		||||
@@ -6622,6 +6658,8 @@ PyObject *Mesh_Init( void )
 | 
			
		||||
		PyModule_AddObject( submodule, "EdgeFlags", EdgeFlags );
 | 
			
		||||
	if( AssignModes )
 | 
			
		||||
		PyModule_AddObject( submodule, "AssignModes", AssignModes );
 | 
			
		||||
	if( SelectModes )
 | 
			
		||||
		PyModule_AddObject( submodule, "SelectModes", SelectModes );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	return submodule;
 | 
			
		||||
 
 | 
			
		||||
@@ -112,6 +112,11 @@ Example::
 | 
			
		||||
	already associated with a group, else it does nothing.\n
 | 
			
		||||
	- REPLACE: attempts to replace a weight with the new weight value
 | 
			
		||||
	for an already associated vertex/group, else it does nothing. 
 | 
			
		||||
@type SelectModes: readonly dictionary.
 | 
			
		||||
@var SelectModes: The available edit select modes.
 | 
			
		||||
	- VERTEX: vertex select mode.
 | 
			
		||||
	- EDGE: edge select mode.
 | 
			
		||||
	- FACE: face select mode.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
AssignModes = {'REPLACE':1}
 | 
			
		||||
@@ -135,6 +140,19 @@ def New(name='Mesh'):
 | 
			
		||||
  @return: a new Blender mesh.
 | 
			
		||||
  """
 | 
			
		||||
 | 
			
		||||
def Mode(mode=0):
 | 
			
		||||
  """
 | 
			
		||||
  Get and/or set the selection modes for mesh editing.  These are the modes
 | 
			
		||||
  visible in the 3D window when a mesh is in Edit Mode.
 | 
			
		||||
  @type mode: int
 | 
			
		||||
  @param mode: The name of the mesh data object.  See L{SelectModes} for values.
 | 
			
		||||
  Modes can be combined.  If omitted, the selection mode is not changed.
 | 
			
		||||
  @rtype: int
 | 
			
		||||
  @return: the current selection mode.
 | 
			
		||||
  @note: The selection mode is an attribute of the current scene.  If the
 | 
			
		||||
  scene is changed, the selection mode may not be the same.
 | 
			
		||||
  """
 | 
			
		||||
 | 
			
		||||
class MCol:
 | 
			
		||||
  """
 | 
			
		||||
  The MCol object
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user