[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16200] branches/harmonic-skeleton/source/ blender: transfering some ongoing work for home, nothing to see here.
Martin Poirier
theeth at yahoo.com
Wed Aug 20 23:34:49 CEST 2008
Revision: 16200
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16200
Author: theeth
Date: 2008-08-20 23:34:49 +0200 (Wed, 20 Aug 2008)
Log Message:
-----------
transfering some ongoing work for home, nothing to see here.
Modified Paths:
--------------
branches/harmonic-skeleton/source/blender/blenlib/intern/graph.c
branches/harmonic-skeleton/source/blender/include/reeb.h
branches/harmonic-skeleton/source/blender/src/autoarmature.c
branches/harmonic-skeleton/source/blender/src/reeb.c
Modified: branches/harmonic-skeleton/source/blender/blenlib/intern/graph.c
===================================================================
--- branches/harmonic-skeleton/source/blender/blenlib/intern/graph.c 2008-08-20 20:49:32 UTC (rev 16199)
+++ branches/harmonic-skeleton/source/blender/blenlib/intern/graph.c 2008-08-20 21:34:49 UTC (rev 16200)
@@ -100,12 +100,12 @@
node->flag++;
}
-void BLI_buildAdjacencyList(BGraph *rg)
+void BLI_buildAdjacencyList(BGraph *graph)
{
BNode *node;
BArc *arc;
- for(node = rg->nodes.first; node; node = node->next)
+ for(node = graph->nodes.first; node; node = node->next)
{
if (node->arcs != NULL)
{
@@ -118,13 +118,13 @@
node->flag = 0;
}
- for(arc = rg->arcs.first; arc; arc= arc->next)
+ for(arc = graph->arcs.first; arc; arc= arc->next)
{
addArcToNodeAdjacencyList(arc->head, arc);
addArcToNodeAdjacencyList(arc->tail, arc);
}
- for(node = rg->nodes.first; node; node = node->next)
+ for(node = graph->nodes.first; node; node = node->next)
{
if (node->degree != node->flag)
{
@@ -133,7 +133,7 @@
}
}
-void BLI_rebuildAdjacencyListForNode(BGraph* rg, BNode *node)
+void BLI_rebuildAdjacencyListForNode(BGraph* graph, BNode *node)
{
BArc *arc;
@@ -147,7 +147,7 @@
/* temporary use to indicate the first index available in the lists */
node->flag = 0;
- for(arc = rg->arcs.first; arc; arc= arc->next)
+ for(arc = graph->arcs.first; arc; arc= arc->next)
{
if (arc->head == node)
{
@@ -165,11 +165,11 @@
}
}
-void BLI_freeAdjacencyList(BGraph *rg)
+void BLI_freeAdjacencyList(BGraph *graph)
{
BNode *node;
- for(node = rg->nodes.first; node; node = node->next)
+ for(node = graph->nodes.first; node; node = node->next)
{
if (node->arcs != NULL)
{
@@ -179,11 +179,11 @@
}
}
-int BLI_hasAdjacencyList(BGraph *rg)
+int BLI_hasAdjacencyList(BGraph *graph)
{
BNode *node;
- for(node = rg->nodes.first; node; node = node->next)
+ for(node = graph->nodes.first; node; node = node->next)
{
if (node->arcs == NULL)
{
@@ -233,12 +233,14 @@
if (arc->head == node_replaced)
{
arc->head = node_src;
+ node_replaced->degree--;
node_src->degree++;
}
if (arc->tail == node_replaced)
{
arc->tail = node_src;
+ node_replaced->degree--;
node_src->degree++;
}
Modified: branches/harmonic-skeleton/source/blender/include/reeb.h
===================================================================
--- branches/harmonic-skeleton/source/blender/include/reeb.h 2008-08-20 20:49:32 UTC (rev 16199)
+++ branches/harmonic-skeleton/source/blender/include/reeb.h 2008-08-20 21:34:49 UTC (rev 16200)
@@ -53,6 +53,7 @@
int resolution;
int totnodes;
struct EdgeHash *emap;
+ int multi_level;
struct ReebGraph *link_up; /* for multi resolution filtering, points to higher levels */
} ReebGraph;
@@ -79,6 +80,7 @@
int index;
float weight;
+ int multi_level;
struct ReebNode *link_down; /* for multi resolution filtering, points to lower levels, if present */
struct ReebNode *link_up;
} ReebNode;
@@ -177,6 +179,8 @@
ReebNode *BIF_NodeFromIndex(ReebArc *arc, ReebNode *node);
ReebNode *BIF_lowestLevelNode(ReebNode *node);
+ReebGraph *BIF_graphForMultiNode(ReebGraph *rg, ReebNode *node);
+
void REEB_freeGraph(ReebGraph *rg);
void REEB_exportGraph(ReebGraph *rg, int count);
void REEB_draw();
Modified: branches/harmonic-skeleton/source/blender/src/autoarmature.c
===================================================================
--- branches/harmonic-skeleton/source/blender/src/autoarmature.c 2008-08-20 20:49:32 UTC (rev 16199)
+++ branches/harmonic-skeleton/source/blender/src/autoarmature.c 2008-08-20 21:34:49 UTC (rev 16200)
@@ -1833,13 +1833,12 @@
static void matchMultiResolutionNode(RigGraph *rigg, RigNode *inode, ReebNode *top_node)
{
- ReebNode *enode;
+ ReebNode *enode = top_node;
+ ReebGraph *reebg = BIF_graphForMultiNode(rigg->link_mesh, enode);
int ishape, eshape;
- enode = top_node;
-
ishape = BLI_subtreeShape((BGraph*)rigg, (BNode*)inode, NULL, 0) % SHAPE_LEVELS;
- eshape = BLI_subtreeShape((BGraph*)rigg->link_mesh, (BNode*)enode, NULL, 0) % SHAPE_LEVELS;
+ eshape = BLI_subtreeShape((BGraph*)reebg, (BNode*)enode, NULL, 0) % SHAPE_LEVELS;
inode->link_mesh = enode;
@@ -1848,23 +1847,26 @@
inode->link_mesh = enode;
enode = enode->link_down;
- eshape = BLI_subtreeShape((BGraph*)rigg->link_mesh, (BNode*)enode, NULL, 0) % SHAPE_LEVELS;
+ reebg = BIF_graphForMultiNode(rigg->link_mesh, enode); /* replace with call to link_down once that exists */
+ eshape = BLI_subtreeShape((BGraph*)reebg, (BNode*)enode, NULL, 0) % SHAPE_LEVELS;
}
}
static void matchMultiResolutionArc(RigGraph *rigg, RigNode *start_node, RigArc *next_iarc, ReebArc *next_earc)
{
ReebNode *enode = next_earc->head;
+ ReebGraph *reebg = BIF_graphForMultiNode(rigg->link_mesh, enode);
int ishape, eshape;
ishape = BLI_subtreeShape((BGraph*)rigg, (BNode*)start_node, (BArc*)next_iarc, 1) % SHAPE_LEVELS;
- eshape = BLI_subtreeShape((BGraph*)rigg->link_mesh, (BNode*)enode, (BArc*)next_earc, 1) % SHAPE_LEVELS;
+ eshape = BLI_subtreeShape((BGraph*)reebg, (BNode*)enode, (BArc*)next_earc, 1) % SHAPE_LEVELS;
while (ishape != eshape && next_earc->link_up)
{
next_earc->flag = 1; // mark previous as taken, to prevent backtrack on lower levels
next_earc = next_earc->link_up;
+ reebg = reebg->link_up;
enode = next_earc->head;
eshape = BLI_subtreeShape((BGraph*)rigg->link_mesh, (BNode*)enode, (BArc*)next_earc, 1) % SHAPE_LEVELS;
}
@@ -1896,7 +1898,7 @@
enode = reebg->nodes.first;
- eshape = BLI_subtreeShape((BGraph*)rigg, (BNode*)enode, NULL, 0) % SHAPE_LEVELS;
+ eshape = BLI_subtreeShape((BGraph*)reebg, (BNode*)enode, NULL, 0) % SHAPE_LEVELS;
}
inode->link_mesh = enode;
@@ -1943,6 +1945,19 @@
/* not found, try at higher nodes (lower node might have filtered internal arcs, messing shape of tree */
if (next_iarc->link_mesh == NULL)
{
+ printf("--------------------------\n");
+ printf("NO CORRESPONDING ARC FOUND - GOING TO HIGHER LEVELS\n");
+ RIG_printArcBones(next_iarc);
+
+ printf("LOOKING FOR\n");
+ printf("flag %i -- symmetry level %i -- symmetry flag %i\n", 0, symmetry_level, symmetry_flag);
+
+ printf("CANDIDATES\n");
+ for(i = 0; i < enode->degree; i++)
+ {
+ next_earc = (ReebArc*)enode->arcs[i];
+ printf("flag %i -- symmetry level %i -- symmetry flag %i\n", next_earc->flag, next_earc->symmetry_level, next_earc->symmetry_flag);
+ }
if (enode->link_up)
{
start_node->link_mesh = enode->link_up;
Modified: branches/harmonic-skeleton/source/blender/src/reeb.c
===================================================================
--- branches/harmonic-skeleton/source/blender/src/reeb.c 2008-08-20 20:49:32 UTC (rev 16199)
+++ branches/harmonic-skeleton/source/blender/src/reeb.c 2008-08-20 21:34:49 UTC (rev 16200)
@@ -311,7 +311,7 @@
return cp_arc;
}
-ReebGraph * copyReebGraph(ReebGraph *rg)
+ReebGraph * copyReebGraph(ReebGraph *rg, int level)
{
ReebNode *node;
ReebArc *arc;
@@ -320,11 +320,13 @@
cp_rg->resolution = rg->resolution;
cp_rg->length = rg->length;
cp_rg->link_up = rg;
+ cp_rg->multi_level = level;
/* Copy nodes */
for (node = rg->nodes.first; node; node = node->next)
{
- copyNode(cp_rg, node);
+ ReebNode *cp_node = copyNode(cp_rg, node);
+ cp_node->multi_level = level;
}
/* Copy arcs */
@@ -338,6 +340,18 @@
return cp_rg;
}
+ReebGraph *BIF_graphForMultiNode(ReebGraph *rg, ReebNode *node)
+{
+ ReebGraph *multi_rg = rg;
+
+ while(multi_rg && multi_rg->multi_level != node->multi_level)
+ {
+ multi_rg = multi_rg->link_up;
+ }
+
+ return multi_rg;
+}
+
ReebEdge * copyEdge(ReebEdge *edge)
{
ReebEdge *newEdge = NULL;
@@ -3383,7 +3397,7 @@
for (i = 0; i < nb_levels; i++)
{
- rg = copyReebGraph(rg);
+ rg = copyReebGraph(rg, i + 1);
}
for (rgi = rg, i = nb_levels, previous = NULL; rgi; previous = rgi, rgi = rgi->link_up, i--)
More information about the Bf-blender-cvs
mailing list