Revision: 15520
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15520
Author: theeth
Date: 2008-07-10 17:15:47 +0200 (Thu, 10 Jul 2008)
Log Message:
-----------
Special multi resolution lookup on first arc, because the lowest node can get
filtered out too.
Modified Paths:
--------------
branches/harmonic-skeleton/source/blender/src/autoarmature.c
Modified: branches/harmonic-skeleton/source/blender/src/autoarmature.c
===================================================================
--- branches/harmonic-skeleton/source/blender/src/autoarmature.c
2008-07-10 14:23:19 UTC (rev 15519)
+++ branches/harmonic-skeleton/source/blender/src/autoarmature.c
2008-07-10 15:15:47 UTC (rev 15520)
@@ -1274,6 +1274,36 @@
next_iarc->link_mesh = next_earc;
}
+static void matchMultiResolutionStartingArc(ReebGraph *reebg, RigArc *iarc,
RigNode *inode)
+{
+ ReebArc *earc;
+ ReebNode *enode;
+ int ishape, eshape;
+ int MAGIC_NUMBER = 100; /* FIXME */
+
+ earc = reebg->arcs.first;
+ enode = earc->head;
+
+ ishape = BLI_subtreeShape((BNode*)inode, (BArc*)iarc, 1) % MAGIC_NUMBER;
+ eshape = BLI_subtreeShape((BNode*)enode, (BArc*)earc, 1) % MAGIC_NUMBER;
+
+ while (ishape != eshape && reebg->link_up)
+ {
+ earc->flag = 1; // mark previous as taken, to prevent backtrack
on lower levels
+
+ reebg = reebg->link_up;
+
+ earc = reebg->arcs.first;
+ enode = earc->head;
+
+ eshape = BLI_subtreeShape((BNode*)enode, (BArc*)earc, 1) %
MAGIC_NUMBER;
+ }
+
+ earc->flag = 1; // mark as taken
+ iarc->link_mesh = earc;
+ inode->link_mesh = enode;
+}
+
static void findCorrespondingArc(RigArc *start_arc, RigNode *start_node,
RigArc *next_iarc)
{
ReebNode *enode = start_node->link_mesh;
@@ -1381,13 +1411,12 @@
/* return to first level */
reebg = rigg->link_mesh;
- earc = reebg->arcs.first;
iarc = (RigArc*)rigg->head->arcs[0];
inode = iarc->tail;
- matchMultiResolutionArc(inode, iarc, earc);
+ matchMultiResolutionStartingArc(reebg, iarc, inode);
- earc = iarc->link_mesh; /* find might have changed it */
+ earc = iarc->link_mesh; /* has been set earlier */
enode = earc->head;
inode->link_mesh = enode;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs