-- added an optional "cage" parameter to mesh.getFromObject() to allow
getting cage vertices from geometry objects
This commit is contained in:
		@@ -639,7 +639,7 @@ static PyObject *MCol_getAttr( BPy_MCol * self, void *type )
 | 
			
		||||
	unsigned char param;
 | 
			
		||||
	PyObject *attr;
 | 
			
		||||
 | 
			
		||||
	switch( (int)type ) {
 | 
			
		||||
	switch( (long)type ) {
 | 
			
		||||
    case 'R':	/* these are backwards, but that how it works */
 | 
			
		||||
		param = self->color->b;
 | 
			
		||||
		break;
 | 
			
		||||
@@ -655,7 +655,8 @@ static PyObject *MCol_getAttr( BPy_MCol * self, void *type )
 | 
			
		||||
	default:
 | 
			
		||||
		{
 | 
			
		||||
			char errstr[1024];
 | 
			
		||||
			sprintf( errstr, "undefined type '%d' in MCol_getAttr", (int)type );
 | 
			
		||||
			sprintf( errstr, "undefined type '%d' in MCol_getAttr",
 | 
			
		||||
					(int)((long)type & 0xff));
 | 
			
		||||
			return EXPP_ReturnPyObjError( PyExc_RuntimeError, errstr );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -676,23 +677,24 @@ static int MCol_setAttr( BPy_MCol * self, PyObject * value, void * type )
 | 
			
		||||
{
 | 
			
		||||
	unsigned char *param;
 | 
			
		||||
 | 
			
		||||
	switch( (int)type ) {
 | 
			
		||||
	switch( (long)type ) {
 | 
			
		||||
    case 'R':	/* these are backwards, but that how it works */
 | 
			
		||||
		param = &self->color->b;
 | 
			
		||||
		param = (unsigned char *)&self->color->b;
 | 
			
		||||
		break;
 | 
			
		||||
    case 'G':
 | 
			
		||||
		param = &self->color->g;
 | 
			
		||||
		param = (unsigned char *)&self->color->g;
 | 
			
		||||
		break;
 | 
			
		||||
    case 'B':	/* these are backwards, but that how it works */
 | 
			
		||||
		param = &self->color->r;
 | 
			
		||||
		param = (unsigned char *)&self->color->r;
 | 
			
		||||
		break;
 | 
			
		||||
    case 'A':
 | 
			
		||||
		param = &self->color->a;
 | 
			
		||||
		param = (unsigned char *)&self->color->a;
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		{
 | 
			
		||||
			char errstr[1024];
 | 
			
		||||
			sprintf( errstr, "undefined type '%d' in MCol_setAttr", (int)type );
 | 
			
		||||
			sprintf( errstr, "undefined type '%d' in MCol_setAttr",
 | 
			
		||||
					(int)((long)type & 0xff));
 | 
			
		||||
			return EXPP_ReturnIntError( PyExc_RuntimeError, errstr );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -3065,7 +3067,7 @@ static PyObject *MFace_getMFlagBits( BPy_MFace * self, void * type )
 | 
			
		||||
	if( !face )
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	return EXPP_getBitfield( &face->flag, (int)type, 'b' );
 | 
			
		||||
	return EXPP_getBitfield( &face->flag, (int)((long)type & 0xff), 'b' );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -3080,7 +3082,7 @@ static int MFace_setMFlagBits( BPy_MFace * self, PyObject * value,
 | 
			
		||||
	if( !face )
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	return EXPP_setBitfield( value, &face->flag, (int)type, 'b' );
 | 
			
		||||
	return EXPP_setBitfield( value, &face->flag, (int)((long)type & 0xff), 'b' );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -4736,10 +4738,15 @@ static PyObject *Mesh_getFromObject( BPy_Mesh * self, PyObject * args )
 | 
			
		||||
	DispListMesh *dlm;
 | 
			
		||||
	DerivedMesh *dm;
 | 
			
		||||
	Object *tmpobj = NULL;
 | 
			
		||||
	int cage = 0;
 | 
			
		||||
 | 
			
		||||
	if( !PyArg_ParseTuple( args, "s", &name ) )
 | 
			
		||||
	if( !PyArg_ParseTuple( args, "s|i", &name, &cage ) )
 | 
			
		||||
		return EXPP_ReturnPyObjError( PyExc_TypeError,
 | 
			
		||||
				"expected string argument" );
 | 
			
		||||
				"expected string and optional integer arguments" );
 | 
			
		||||
 | 
			
		||||
	if( cage != 0 && cage != 1 )
 | 
			
		||||
		return EXPP_ReturnPyObjError( PyExc_ValueError,
 | 
			
		||||
				"cage value must be 0 or 1" );
 | 
			
		||||
 | 
			
		||||
	/* find the specified object */
 | 
			
		||||
	ob = ( Object * ) GetIdFromList( &( G.main->object ), name );
 | 
			
		||||
@@ -4756,6 +4763,10 @@ static PyObject *Mesh_getFromObject( BPy_Mesh * self, PyObject * args )
 | 
			
		||||
		tmpcu = (Curve *)tmpobj->data;
 | 
			
		||||
		tmpcu->id.us--;
 | 
			
		||||
 | 
			
		||||
		/* if getting the original caged mesh, delete object modifiers */
 | 
			
		||||
		if( cage )
 | 
			
		||||
			object_free_modifiers(tmpobj);
 | 
			
		||||
 | 
			
		||||
		/* copies the data */
 | 
			
		||||
		tmpobj->data = copy_curve( (Curve *) ob->data );
 | 
			
		||||
 | 
			
		||||
@@ -4768,6 +4779,7 @@ static PyObject *Mesh_getFromObject( BPy_Mesh * self, PyObject * args )
 | 
			
		||||
				MEM_freeN( cu->disp.first );
 | 
			
		||||
			cu->disp.first = NULL;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		/* get updated display list, and convert to a mesh */
 | 
			
		||||
@@ -4793,11 +4805,13 @@ static PyObject *Mesh_getFromObject( BPy_Mesh * self, PyObject * args )
 | 
			
		||||
		G.totmesh++;
 | 
			
		||||
		tmpmesh = tmpobj->data;
 | 
			
		||||
 | 
			
		||||
		/* get the final derived mesh */
 | 
			
		||||
		dm = mesh_create_derived_render( tmpobj );
 | 
			
		||||
		dlm = dm->convertToDispListMesh( dm, 0 );
 | 
			
		||||
		displistmesh_to_mesh( dlm, tmpmesh );
 | 
			
		||||
		dm->release( dm );
 | 
			
		||||
		/* if not getting the original caged mesh, get final derived mesh */
 | 
			
		||||
		if( !cage ) {
 | 
			
		||||
			dm = mesh_create_derived_render( tmpobj );
 | 
			
		||||
			dlm = dm->convertToDispListMesh( dm, 0 );
 | 
			
		||||
			displistmesh_to_mesh( dlm, tmpmesh );
 | 
			
		||||
			dm->release( dm );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* take control of mesh before object is freed */
 | 
			
		||||
		tmpobj->data = NULL;
 | 
			
		||||
@@ -5752,7 +5766,7 @@ static PyObject *Mesh_getFlag( BPy_Mesh * self, void *type )
 | 
			
		||||
{
 | 
			
		||||
	PyObject *attr;
 | 
			
		||||
 | 
			
		||||
	switch( (int)type ) {
 | 
			
		||||
	switch( (long)type ) {
 | 
			
		||||
	case MESH_HASFACEUV:
 | 
			
		||||
		attr = self->mesh->tface ? EXPP_incr_ret_True() :
 | 
			
		||||
			EXPP_incr_ret_False();
 | 
			
		||||
@@ -5793,7 +5807,7 @@ static int Mesh_setFlag( BPy_Mesh * self, PyObject *value, void *type )
 | 
			
		||||
	/* sticky is independent of faceUV and vertUV */
 | 
			
		||||
	/* faceUV (tface) has priority over vertUV (mcol) */
 | 
			
		||||
 | 
			
		||||
	switch( (int)type ) {
 | 
			
		||||
	switch( (long)type ) {
 | 
			
		||||
	case MESH_HASFACEUV:
 | 
			
		||||
		if( !param ) {
 | 
			
		||||
			if( mesh->tface ) {
 | 
			
		||||
 
 | 
			
		||||
@@ -620,17 +620,21 @@ class Mesh:
 | 
			
		||||
  @type activeFace: int
 | 
			
		||||
  """
 | 
			
		||||
 | 
			
		||||
  def getFromObject(name):
 | 
			
		||||
  def getFromObject(name,cage=0):
 | 
			
		||||
    """
 | 
			
		||||
    Replace the mesh's existing data with the raw mesh data from a Blender
 | 
			
		||||
    Object.  This method supports all the geometry based objects (mesh, text,
 | 
			
		||||
    curve, surface, and meta).  If the object has modifiers, they will be
 | 
			
		||||
    applied before to the object before extracting the vertex data.
 | 
			
		||||
    @note: The mesh coordinates are in i{local space}, not the world space of
 | 
			
		||||
    applied before to the object before extracting the vertex data unless
 | 
			
		||||
    the B{cage} parameter is 1.
 | 
			
		||||
    @note: The mesh coordinates are in I{local space}, not the world space of
 | 
			
		||||
    its object.  For world space vertex coordinates, each vertex location must
 | 
			
		||||
    be multiplied by the object's 4x4 transform matrix (see L{transform}).
 | 
			
		||||
    @type name: string
 | 
			
		||||
    @param name: name of the Blender object which contains the geometry data.
 | 
			
		||||
    @type cage: int
 | 
			
		||||
    @param cage: determines whether the original vertices or derived vertices
 | 
			
		||||
    (for objects with modifiers) are used.  The default is derived vertices.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def calcNormals():
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user