made change to NMesh decrefing suggested by theeth, and added 2 more missing decrefs in new_NMFace

This commit is contained in:
Campbell Barton 2007-06-02 02:02:33 +00:00
parent 228e927c04
commit f579a66d7b
2 changed files with 36 additions and 51 deletions

@ -6928,7 +6928,6 @@ static short pointInside_internal(float *vec, float *v1, float *v2, float *v3 )
{
float z,w1,w2,w3,wtot;
/*min,max*/
if (!POINT_IN_TRI(vec, v1,v2,v3))
return 0;

@ -524,16 +524,18 @@ static PyObject *new_NMFace( PyObject * vertexlist )
vlcopy = PyList_New( len );
if( !vlcopy )
if( !vlcopy ) {
Py_DECREF(mf);
return EXPP_ReturnPyObjError( PyExc_MemoryError,
"couldn't create PyList" );
}
for( i = 0; i < len; i++ ) {
item = PySequence_GetItem( vertexlist, i ); /* PySequence increfs */
if( item )
PyList_SET_ITEM( vlcopy, i, item );
else {
Py_DECREF(mf);
Py_DECREF(vlcopy);
return EXPP_ReturnPyObjError
( PyExc_RuntimeError,
@ -582,7 +584,7 @@ static PyObject *NMFace_append( PyObject * self, PyObject * args )
PyList_Append( f->v, vert );
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
#undef MethodDef
@ -616,7 +618,7 @@ static PyObject *NMFace_getattr( PyObject * self, char *name )
if( mf->image )
return Image_CreatePyObject( mf->image );
else
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
else if( strcmp( name, "mode" ) == 0 )
@ -1169,7 +1171,7 @@ static PyObject *NMesh_setMaterials( PyObject * self, PyObject * args )
Py_DECREF( me->materials );
me->materials = EXPP_incr_ret( pymats );
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_addMaterial( PyObject * self, PyObject * args )
@ -1200,7 +1202,7 @@ static PyObject *NMesh_addMaterial( PyObject * self, PyObject * args )
PyList_Append( me->materials, ( PyObject * ) pymat );
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_getKey( BPy_NMesh * self )
@ -1269,42 +1271,30 @@ static PyObject *NMesh_insertKey( PyObject * self, PyObject * args )
if( fra > 0 )
G.scene->r.cfra = (int)oldfra;
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_getSelectedFaces( PyObject * self, PyObject * args )
{
BPy_NMesh *nm = ( BPy_NMesh * ) self;
Mesh *me = nm->mesh;
int flag = 0;
MFace *mf;
int i;
PyObject *l = PyList_New( 0 ), *pyval;
int i, totfaces, flag = 0;
PyObject *l, *pyval;
/* dont allow returning more then the NMesh's number of faces */
int totfaces = PySequence_Length(nm->faces);
if( !PyArg_ParseTuple( args, "|i", &flag ) )
return EXPP_ReturnPyObjError( PyExc_ValueError,
"expected int argument (or nothing)" );
if( me == NULL ) {
Py_DECREF(l);
return NULL;
}
mf = me->mface;
if( mf == NULL )
l = PyList_New( 0 );
if( me == NULL || me->mface == NULL)
return l;
if( !PyArg_ParseTuple( args, "|i", &flag ) ) {
Py_DECREF(l);
return NULL;
}
/* make sure not to write more faces then we have */
if (totfaces > me->totface)
totfaces= me->totface;
totfaces= MIN2(me->totface, PySequence_Length(nm->faces));
if( flag ) {
for( i = 0; i < totfaces; i++ ) {
if( mf[i].flag & ME_FACE_SEL ) {
if( me->mface[i].flag & ME_FACE_SEL ) {
pyval = PyInt_FromLong( i );
PyList_Append( l, pyval );
Py_DECREF(pyval);
@ -1312,7 +1302,7 @@ static PyObject *NMesh_getSelectedFaces( PyObject * self, PyObject * args )
}
} else {
for( i = 0; i < totfaces; i++ ) {
if( mf[i].flag & ME_FACE_SEL )
if( me->mface[i].flag & ME_FACE_SEL )
PyList_Append( l, PyList_GetItem( nm->faces, i ) );
}
}
@ -1322,7 +1312,7 @@ static PyObject *NMesh_getSelectedFaces( PyObject * self, PyObject * args )
static PyObject *NMesh_getActiveFace( PyObject * self )
{
if( ( ( BPy_NMesh * ) self )->sel_face < 0 )
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
return Py_BuildValue( "i", ( ( BPy_NMesh * ) self )->sel_face );
}
@ -1586,8 +1576,7 @@ static PyObject *NMesh_setMaxSmoothAngle( PyObject * self, PyObject * args )
( short ) EXPP_ClampInt( value, NMESH_SMOOTHRESH_MIN,
NMESH_SMOOTHRESH_MAX );
Py_INCREF( Py_None );
return Py_None;
Py_RETURN_NONE;
}
static PyObject *NMesh_getSubDivLevels( BPy_NMesh * self )
@ -1619,8 +1608,7 @@ static PyObject *NMesh_setSubDivLevels( PyObject * self, PyObject * args )
( short ) EXPP_ClampInt( render, NMESH_SUBDIV_MIN,
NMESH_SUBDIV_MAX );
Py_INCREF( Py_None );
return Py_None;
Py_RETURN_NONE;
}
static PyObject *NMesh_getMode( BPy_NMesh * self )
@ -1672,8 +1660,7 @@ static PyObject *NMesh_setMode( PyObject * self, PyObject * args )
nmesh->mode = mode;
Py_INCREF( Py_None );
return Py_None;
Py_RETURN_NONE;
}
/* METH_VARARGS: function(PyObject *self, PyObject *args) */
@ -2837,7 +2824,7 @@ PyObject *NMesh_assignMaterials_toObject( BPy_NMesh * nmesh, Object * ob )
ob->colbits = old_matmask; /*@ HACK */
ob->actcol = 1;
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static void fill_medge_from_nmesh(Mesh * mesh, BPy_NMesh * nmesh)
@ -3203,7 +3190,7 @@ static PyObject *M_NMesh_PutRaw( PyObject * self, PyObject * args )
EXPP_newMaterialList_fromPyList( nmesh->materials );
EXPP_incr_mats_us( mesh->mat,
PyList_Size( nmesh->materials ) );
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
}
@ -3431,7 +3418,7 @@ static PyObject *findEdge( BPy_NMesh *nmesh, BPy_NMVert *v1, BPy_NMVert *v2, int
return newEdge;
}
else
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static void removeEdge( BPy_NMesh *nmesh, BPy_NMVert *v1, BPy_NMVert *v2, int ununsedOnly)
@ -3536,7 +3523,7 @@ static PyObject *NMesh_removeEdge( PyObject * self, PyObject * args )
"vertices must be different" );
removeEdge(bmesh, v1, v2, 0);
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
@ -3589,7 +3576,7 @@ static PyObject *NMesh_addFace( PyObject * self, PyObject * args )
return edges;
}
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_removeFace( PyObject * self, PyObject * args )
@ -3636,7 +3623,7 @@ static PyObject *NMesh_removeFace( PyObject * self, PyObject * args )
}
}
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_printDebug( PyObject * self )
@ -3685,7 +3672,7 @@ static PyObject *NMesh_printDebug( PyObject * self )
}
}
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_addVertGroup( PyObject * self, PyObject * args )
@ -3712,7 +3699,7 @@ static PyObject *NMesh_addVertGroup( PyObject * self, PyObject * args )
EXPP_allqueue( REDRAWBUTSALL, 1 );
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_removeVertGroup( PyObject * self, PyObject * args )
@ -3748,7 +3735,7 @@ static PyObject *NMesh_removeVertGroup( PyObject * self, PyObject * args )
EXPP_allqueue( REDRAWBUTSALL, 1 );
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_assignVertsToGroup( PyObject * self, PyObject * args )
@ -3834,7 +3821,7 @@ static PyObject *NMesh_assignVertsToGroup( PyObject * self, PyObject * args )
add_vert_defnr( object, nIndex, tempInt, weight, assignmode );
}
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_removeVertsFromGroup( PyObject * self, PyObject * args )
@ -3920,7 +3907,7 @@ static PyObject *NMesh_removeVertsFromGroup( PyObject * self, PyObject * args )
}
}
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_getVertsFromGroup( PyObject * self, PyObject * args )
@ -4108,7 +4095,7 @@ static PyObject *NMesh_renameVertGroup( PyObject * self, PyObject * args )
PyOS_snprintf( defGroup->name, 32, newGr );
unique_vertexgroup_name( defGroup, ( ( BPy_NMesh * ) self )->object );
return EXPP_incr_ret( Py_None );
Py_RETURN_NONE;
}
static PyObject *NMesh_getVertGroupNames( PyObject * self )
@ -4201,6 +4188,5 @@ static PyObject *NMesh_transform (PyObject *self, PyObject *args)
/* should we alternatively return a list of changed verts (and preserve
* the original ones) ? */
Py_INCREF( Py_None );
return Py_None;
Py_RETURN_NONE;
}