Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/mesh_cleanup.py40
-rw-r--r--source/blender/python/api2_2x/Key.c51
-rw-r--r--source/blender/python/api2_2x/Key.h2
-rw-r--r--source/blender/python/api2_2x/Lattice.c2
-rw-r--r--source/blender/python/api2_2x/Mesh.c4
5 files changed, 55 insertions, 44 deletions
diff --git a/release/scripts/mesh_cleanup.py b/release/scripts/mesh_cleanup.py
index 80446b9cc79..1eb3e3968b2 100644
--- a/release/scripts/mesh_cleanup.py
+++ b/release/scripts/mesh_cleanup.py
@@ -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
diff --git a/source/blender/python/api2_2x/Key.c b/source/blender/python/api2_2x/Key.c
index b32f063ffc4..49fd55ed5c2 100644
--- a/source/blender/python/api2_2x/Key.c
+++ b/source/blender/python/api2_2x/Key.c
@@ -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 ) {
diff --git a/source/blender/python/api2_2x/Key.h b/source/blender/python/api2_2x/Key.h
index 6def2944d89..87cb55d10eb 100644
--- a/source/blender/python/api2_2x/Key.h
+++ b/source/blender/python/api2_2x/Key.h
@@ -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 {
diff --git a/source/blender/python/api2_2x/Lattice.c b/source/blender/python/api2_2x/Lattice.c
index 5c8df29d5d0..e58967a712b 100644
--- a/source/blender/python/api2_2x/Lattice.c
+++ b/source/blender/python/api2_2x/Lattice.c
@@ -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;
diff --git a/source/blender/python/api2_2x/Mesh.c b/source/blender/python/api2_2x/Mesh.c
index 212298e3dce..acb95919916 100644
--- a/source/blender/python/api2_2x/Mesh.c
+++ b/source/blender/python/api2_2x/Mesh.c
@@ -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 {