Key.c/h - Removed unneeded functions. and ipo in struct wasnt being used.
Lattice.c - removed warning Mesh.c - (own error) when running me.update(key="...") didnt update the right keyframe. mesh_cleanup.py - Bugfix from a report by plumiferos that started uncovering all the memory leaks. Removing NAN verts didnt work with mesh keyframes.
This commit is contained in:
@@ -196,7 +196,7 @@ def isnan(f):
|
||||
|
||||
return False
|
||||
|
||||
def fix_nan_verts(me):
|
||||
def fix_nan_verts__internal(me):
|
||||
rem_nan = 0
|
||||
for v in me.verts:
|
||||
co = v.co
|
||||
@@ -206,9 +206,46 @@ def fix_nan_verts(me):
|
||||
rem_nan += 1
|
||||
return rem_nan
|
||||
|
||||
def fix_nan_verts(me):
|
||||
rem_nan = 0
|
||||
key = me.key
|
||||
if key:
|
||||
# Find the object, and get a mesh thats thinked to the oblink.
|
||||
# this is a bit crap but needed to set the active key.
|
||||
me_oblink = None
|
||||
for ob in bpy.data.objects:
|
||||
me_oblink = ob.getData(mesh=1)
|
||||
if me_oblink == me:
|
||||
me = me_oblink
|
||||
break
|
||||
if not me_oblink:
|
||||
ob = None
|
||||
|
||||
if key and ob:
|
||||
blocks = key.blocks
|
||||
# print blocks
|
||||
orig_pin = ob.pinShape
|
||||
orig_shape = ob.activeShape
|
||||
orig_relative = key.relative
|
||||
ob.pinShape = True
|
||||
for i, block in enumerate(blocks):
|
||||
ob.activeShape = i+1
|
||||
ob.makeDisplayList()
|
||||
rem_nan += fix_nan_verts__internal(me)
|
||||
me.update(block.name) # get the new verts
|
||||
ob.pinShape = orig_pin
|
||||
ob.activeShape = orig_shape
|
||||
key.relative = orig_relative
|
||||
|
||||
else: # No keys, simple operation
|
||||
rem_nan = fix_nan_verts__internal(me)
|
||||
|
||||
return rem_nan
|
||||
|
||||
def fix_nan_uvs(me):
|
||||
rem_nan = 0
|
||||
if me.faceUV:
|
||||
orig_uvlayer = me.activeUVLayer
|
||||
for uvlayer in me.getUVLayerNames():
|
||||
me.activeUVLayer = uvlayer
|
||||
for f in me.faces:
|
||||
@@ -217,6 +254,7 @@ def fix_nan_uvs(me):
|
||||
if isnan(uv[i]):
|
||||
uv[i] = 0.0
|
||||
rem_nan += 1
|
||||
me.activeUVLayer = orig_uvlayer
|
||||
return rem_nan
|
||||
|
||||
|
||||
|
||||
@@ -289,23 +289,12 @@ PyTypeObject KeyBlock_Type = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static PyObject *new_Key(Key * oldkey)
|
||||
PyObject *Key_CreatePyObject( Key * blenkey )
|
||||
{
|
||||
BPy_Key *k = PyObject_NEW( BPy_Key, &Key_Type );
|
||||
|
||||
if( !oldkey ) {
|
||||
k->key = 0;
|
||||
} else {
|
||||
k->key = oldkey;
|
||||
}
|
||||
return ( PyObject * ) k;
|
||||
}
|
||||
|
||||
PyObject *Key_CreatePyObject( Key * k )
|
||||
{
|
||||
BPy_Key *key = ( BPy_Key * ) new_Key( k );
|
||||
|
||||
return ( PyObject * ) key;
|
||||
BPy_Key *bpykey = PyObject_NEW( BPy_Key, &Key_Type );
|
||||
/* blenkey may be NULL so be careful */
|
||||
bpykey->key = blenkey;
|
||||
return ( PyObject * ) bpykey;
|
||||
}
|
||||
|
||||
static void Key_dealloc( BPy_Key * self )
|
||||
@@ -325,15 +314,9 @@ static PyObject *Key_repr( BPy_Key * self )
|
||||
|
||||
static PyObject *Key_getIpo( BPy_Key * self )
|
||||
{
|
||||
BPy_Ipo *new_ipo;
|
||||
|
||||
if (self->key->ipo) {
|
||||
new_ipo = ( BPy_Ipo * ) PyObject_NEW( BPy_Ipo, &Ipo_Type );
|
||||
new_ipo->ipo = self->key->ipo;
|
||||
return (PyObject *) new_ipo;
|
||||
} else {
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
if (self->key->ipo)
|
||||
Ipo_CreatePyObject( self->key->ipo );
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
static int Key_setIpo( BPy_Key * self, PyObject * value )
|
||||
@@ -404,20 +387,12 @@ static PyObject *Key_getValue( BPy_Key * self )
|
||||
}
|
||||
|
||||
/* ------------ Key Block Functions -------------- */
|
||||
|
||||
static PyObject *new_KeyBlock( KeyBlock * keyblock, Key *key)
|
||||
PyObject *KeyBlock_CreatePyObject( KeyBlock * keyblock, Key *parentKey )
|
||||
{
|
||||
BPy_KeyBlock *kb = PyObject_NEW( BPy_KeyBlock, &KeyBlock_Type );
|
||||
kb->key = key;
|
||||
kb->keyblock = keyblock; /* keyblock maye be NULL, thats ok */
|
||||
return ( PyObject * ) kb;
|
||||
}
|
||||
|
||||
PyObject *KeyBlock_CreatePyObject( KeyBlock * kb, Key *parentKey )
|
||||
{
|
||||
BPy_KeyBlock *keyBlock = ( BPy_KeyBlock * ) new_KeyBlock( kb, parentKey );
|
||||
|
||||
return ( PyObject * ) keyBlock;
|
||||
BPy_KeyBlock *bpykb = PyObject_NEW( BPy_KeyBlock, &KeyBlock_Type );
|
||||
bpykb->key = parentKey;
|
||||
bpykb->keyblock = keyblock; /* keyblock maye be NULL, thats ok */
|
||||
return ( PyObject * ) bpykb;
|
||||
}
|
||||
|
||||
static PyObject *KeyBlock_getCurval( BPy_KeyBlock * self ) {
|
||||
|
||||
@@ -50,7 +50,7 @@ typedef struct {
|
||||
Key * key; /* libdata must be second */
|
||||
/* Object *object;*/ /* for vertex grouping info, since it's stored on the object */
|
||||
/*PyObject *keyBlock;*/
|
||||
PyObject *ipo;
|
||||
/*PyObject *ipo;*/
|
||||
} BPy_Key;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -677,7 +677,7 @@ static PyObject *Lattice_getLatSize(BPy_Lattice * self)
|
||||
|
||||
static PyObject *Lattice_getAxisType(BPy_Lattice * self, void * type)
|
||||
{
|
||||
char interp_type = (char)NULL;
|
||||
char interp_type = 0;
|
||||
switch ( (int)type ) {
|
||||
case 0:
|
||||
interp_type = self->lattice->typeu;
|
||||
|
||||
@@ -5408,15 +5408,13 @@ static PyObject *Mesh_Update( BPy_Mesh * self, PyObject *args, PyObject *kwd )
|
||||
"Cannot update the key for this mesh, it has no shape keys");
|
||||
|
||||
for (kb = key->block.first; kb; kb=kb->next)
|
||||
if (strcmp(blockname, kb->name))
|
||||
if (strcmp(blockname, kb->name)==0)
|
||||
break;
|
||||
|
||||
if (!kb)
|
||||
return EXPP_ReturnPyObjError( PyExc_ValueError,
|
||||
"This requested key to update does not exist");
|
||||
|
||||
printf("KEYBLOCKNAME %s\n", kb->name);
|
||||
|
||||
for(i=0, co= kb->data; i<me->totvert; i++, mv++, co++)
|
||||
VECCOPY(*co, mv->co);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user