Revision: 17227
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17227
Author:   aligorith
Date:     2008-10-30 09:10:19 +0100 (Thu, 30 Oct 2008)

Log Message:
-----------
AnimSys2: Recentering Meshes with ShapeKeys

Meshes with ShapeKeys can now be recentered. Note that this may not be totally 
stable or thee may be some artifacts somewhere. However, in preliminary tests, 
this seems to work well enough.

Note: the only situation in which this will not work is if the object is 
showing a pinned shapekey. Perhaps it would be better to test for multiple mesh 
users instead, but feedback would be welcome on this...

Modified Paths:
--------------
    branches/animsys2/source/blender/src/editobject.c

Modified: branches/animsys2/source/blender/src/editobject.c
===================================================================
--- branches/animsys2/source/blender/src/editobject.c   2008-10-30 07:22:11 UTC 
(rev 17226)
+++ branches/animsys2/source/blender/src/editobject.c   2008-10-30 08:10:19 UTC 
(rev 17227)
@@ -1913,8 +1913,15 @@
                                        tot_lib_error++;
                                }
                                else if(G.obedit==0 && 
(me=get_mesh(base->object)) ) {
+                                       short skey_bad= 0;
                                        
-                                       if(me->key) {
+                                       /* not all shapekeys are bad... just 
the pinned ones */
+                                       if (me->key) {
+                                               if (base->object->shapeflag & 
OB_SHAPE_LOCK)
+                                                       skey_bad= 1;
+                                       } 
+                                       
+                                       if (skey_bad) {
                                                /*error("Can't change the 
center of a mesh with vertex keys");
                                                return;*/
                                                tot_key_error++;
@@ -1943,6 +1950,18 @@
                                                }
                                                me->flag |= ME_ISDONE;
                                                
+                                               if (me->key) {
+                                                       KeyBlock *kb;
+                                                       
+                                                       for 
(kb=me->key->block.first; kb; kb=kb->next) {
+                                                               float *fp= 
kb->data;
+                                                               
+                                                               for (a=0; 
a<kb->totelem; a++, fp+=3) {
+                                                                       
VecSubf(fp, fp, cent);
+                                                               }
+                                                       }
+                                               }
+                                               
                                                if(centermode) {
                                                        Mat3CpyMat4(omat, 
base->object->obmat);
                                                        


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to