[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