[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14807] trunk/blender/source/blender/src/ editarmature.c: Bugfix for Separate Armatures:
Joshua Leung
aligorith at gmail.com
Mon May 12 06:25:53 CEST 2008
Revision: 14807
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14807
Author: aligorith
Date: 2008-05-12 06:25:53 +0200 (Mon, 12 May 2008)
Log Message:
-----------
Bugfix for Separate Armatures:
Constraint relinking now works correctly for this tool, so it should be safe to be used by users now.
Modified Paths:
--------------
trunk/blender/source/blender/src/editarmature.c
Modified: trunk/blender/source/blender/src/editarmature.c
===================================================================
--- trunk/blender/source/blender/src/editarmature.c 2008-05-12 01:32:17 UTC (rev 14806)
+++ trunk/blender/source/blender/src/editarmature.c 2008-05-12 04:25:53 UTC (rev 14807)
@@ -661,9 +661,10 @@
Object *ob;
bPoseChannel *pchan, *pcha, *pchb;
bConstraint *con;
- ListBase *npchans;
+ ListBase *opchans, *npchans;
- /* get reference to list of bones in new armature */
+ /* get reference to list of bones in original and new armatures */
+ opchans= &origArm->pose->chanbase;
npchans= &newArm->pose->chanbase;
/* let's go through all objects in database */
@@ -682,8 +683,8 @@
for (ct= targets.first; ct; ct= ct->next) {
/* any targets which point to original armature are redirected to the new one only if:
- * - the target isn't the original armature itself
- * - the target is one that can be found in newArm
+ * - the target isn't origArm/newArm itself
+ * - the target is one that can be found in newArm/origArm
*/
if ((ct->tar == origArm) && (ct->subtarget[0] != 0)) {
for (pcha=npchans->first, pchb=npchans->last; pcha && pchb; pcha=pcha->next, pchb=pchb->prev) {
@@ -699,6 +700,20 @@
if (pcha == pchb) break;
}
}
+ else if ((ct->tar == newArm) && (ct->subtarget[0] != 0)) {
+ for (pcha=opchans->first, pchb=opchans->last; pcha && pchb; pcha=pcha->next, pchb=pchb->prev) {
+ /* check if either one matches */
+ if ( (strcmp(pcha->name, ct->subtarget)==0) ||
+ (strcmp(pchb->name, ct->subtarget)==0) )
+ {
+ ct->tar= origArm;
+ break;
+ }
+
+ /* check if both ends have met (to stop checking) */
+ if (pcha == pchb) break;
+ }
+ }
}
if (cti->flush_constraint_targets)
@@ -721,8 +736,8 @@
for (ct= targets.first; ct; ct= ct->next) {
/* any targets which point to original armature are redirected to the new one only if:
- * - the target isn't the original armature itself
- * - the target is one of the bones which were moved into newArm
+ * - the target isn't origArm/newArm itself
+ * - the target is one that can be found in newArm/origArm
*/
if ((ct->tar == origArm) && (ct->subtarget[0] != 0)) {
for (pcha=npchans->first, pchb=npchans->last; pcha && pchb; pcha=pcha->next, pchb=pchb->prev) {
@@ -736,8 +751,22 @@
/* check if both ends have met (to stop checking) */
if (pcha == pchb) break;
- }
+ }
}
+ else if ((ct->tar == newArm) && (ct->subtarget[0] != 0)) {
+ for (pcha=opchans->first, pchb=opchans->last; pcha && pchb; pcha=pcha->next, pchb=pchb->prev) {
+ /* check if either one matches */
+ if ( (strcmp(pcha->name, ct->subtarget)==0) ||
+ (strcmp(pchb->name, ct->subtarget)==0) )
+ {
+ ct->tar= origArm;
+ break;
+ }
+
+ /* check if both ends have met (to stop checking) */
+ if (pcha == pchb) break;
+ }
+ }
}
if (cti->flush_constraint_targets)
@@ -829,12 +858,6 @@
Base *base, *oldbase, *newbase;
bArmature *arm;
- // 31 Mar 08 \ 11 May 08 - Aligorith:
- // currently, this is still too unstable to be enabled for general consumption.
- // remove the following two lines to test this tool... you have been warned!
- // okee("Not implemented (WIP)");
- // return;
-
if ( G.vd==0 || (G.vd->lay & G.obedit->lay)==0 ) return;
if ( okee("Separate")==0 ) return;
More information about the Bf-blender-cvs
mailing list