[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17241] branches/animsys2/source/blender/ src: AnimSys2: Shapekeys recentering fix (attempt 2)
Joshua Leung
aligorith at gmail.com
Fri Oct 31 07:25:51 CET 2008
Revision: 17241
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17241
Author: aligorith
Date: 2008-10-31 07:25:51 +0100 (Fri, 31 Oct 2008)
Log Message:
-----------
AnimSys2: Shapekeys recentering fix (attempt 2)
Now meshes with multiple users are not ignored. Previous tests had shown that there was a problem, but it turned out to be a missing case.
Also, added note of bug with bone roll changing randomly on EditMode transforms to fix.
Modified Paths:
--------------
branches/animsys2/source/blender/src/editobject.c
branches/animsys2/source/blender/src/transform_generics.c
Modified: branches/animsys2/source/blender/src/editobject.c
===================================================================
--- branches/animsys2/source/blender/src/editobject.c 2008-10-31 05:51:16 UTC (rev 17240)
+++ branches/animsys2/source/blender/src/editobject.c 2008-10-31 06:25:51 UTC (rev 17241)
@@ -1851,7 +1851,7 @@
int a, total= 0;
/* keep track of what is changed */
- int tot_change=0, tot_lib_error=0, tot_multiuser_mesh_error=0, tot_multiuser_arm_error=0;
+ int tot_change=0, tot_lib_error=0, tot_multiuser_arm_error=0;
MVert *mvert;
if(G.scene->id.lib || G.vd==NULL) return;
@@ -1913,9 +1913,7 @@
tot_lib_error++;
}
else if(G.obedit==0 && (me=get_mesh(base->object)) ) {
- if (me->id.us > 1) {
- tot_multiuser_mesh_error++;
- } else if (me->id.lib) {
+ if (me->id.lib) {
tot_lib_error++;
} else {
if(centermode==2) {
@@ -1938,11 +1936,9 @@
for(a=0; a<me->totvert; a++, mvert++) {
VecSubf(mvert->co, mvert->co, cent);
}
- me->flag |= ME_ISDONE;
if (me->key) {
KeyBlock *kb;
-
for (kb=me->key->block.first; kb; kb=kb->next) {
float *fp= kb->data;
@@ -1952,6 +1948,8 @@
}
}
+ me->flag |= ME_ISDONE;
+
if(centermode) {
Mat3CpyMat4(omat, base->object->obmat);
@@ -1990,6 +1988,18 @@
for(a=0; a<tme->totvert; a++, mvert++) {
VecSubf(mvert->co, mvert->co, cent);
}
+
+ if (tme->key) {
+ KeyBlock *kb;
+ for (kb=tme->key->block.first; kb; kb=kb->next) {
+ float *fp= kb->data;
+
+ for (a=0; a<kb->totelem; a++, fp+=3) {
+ VecSubf(fp, fp, cent);
+ }
+ }
+ }
+
tme->flag |= ME_ISDONE;
}
}
@@ -2025,9 +2035,10 @@
/* don't allow Z change if curve is 2D */
if( !( cu->flag & CU_3D ) )
cent[2] = 0.0;
- } else {
+ }
+ else {
INIT_MINMAX(min, max);
-
+
nu= nu1;
while(nu) {
minmaxNurb(nu, min, max);
@@ -2134,14 +2145,12 @@
}
/* Warn if any errors occured */
- if (tot_lib_error+tot_multiuser_mesh_error+tot_multiuser_arm_error) {
+ if (tot_lib_error+tot_multiuser_arm_error) {
char err[512];
- sprintf(err, "Warning %i Object(s) Not Centered, %i Changed:", tot_lib_error+tot_key_error+tot_multiuser_arm_error, tot_change);
+ sprintf(err, "Warning %i Object(s) Not Centered, %i Changed:", tot_lib_error+tot_multiuser_arm_error, tot_change);
if (tot_lib_error)
sprintf(err+strlen(err), "|%i linked library objects", tot_lib_error);
- if (tot_multiuser_mesh_error)
- sprintf(err+strlen(err), "|%i multiuser mesh object(s)", tot_multiuser_mesh_error);
if (tot_multiuser_arm_error)
sprintf(err+strlen(err), "|%i multiuser armature object(s)", tot_multiuser_arm_error);
Modified: branches/animsys2/source/blender/src/transform_generics.c
===================================================================
--- branches/animsys2/source/blender/src/transform_generics.c 2008-10-31 05:51:16 UTC (rev 17240)
+++ branches/animsys2/source/blender/src/transform_generics.c 2008-10-31 06:25:51 UTC (rev 17241)
@@ -472,6 +472,7 @@
EditBone *ebo;
/* Ensure all bones are correctly adjusted */
+ // TODO: bone roll needs to be tweaked too for normal transforms, as it goes crazy atm
for (ebo=G.edbo.first; ebo; ebo=ebo->next){
if ((ebo->flag & BONE_CONNECTED) && ebo->parent){
More information about the Bf-blender-cvs
mailing list