[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15511] branches/harmonic-skeleton/source/ blender: Draw node index

Martin Poirier theeth at yahoo.com
Wed Jul 9 23:07:02 CEST 2008


Revision: 15511
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15511
Author:   theeth
Date:     2008-07-09 23:07:02 +0200 (Wed, 09 Jul 2008)

Log Message:
-----------
Draw node index
Retargetting, go to higher levels no nodes when no match is found
Fix bug in exterme threshold external filtering

Modified Paths:
--------------
    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/include/reeb.h
===================================================================
--- branches/harmonic-skeleton/source/blender/include/reeb.h	2008-07-09 19:44:40 UTC (rev 15510)
+++ branches/harmonic-skeleton/source/blender/include/reeb.h	2008-07-09 21:07:02 UTC (rev 15511)
@@ -76,6 +76,7 @@
 	int index;
 	float weight;
 	struct ReebNode *link_down; /* for multi resolution filtering, points to lower levels, if present */
+	struct ReebNode *link_up;
 } ReebNode;
 
 typedef struct ReebEdge {

Modified: branches/harmonic-skeleton/source/blender/src/autoarmature.c
===================================================================
--- branches/harmonic-skeleton/source/blender/src/autoarmature.c	2008-07-09 19:44:40 UTC (rev 15510)
+++ branches/harmonic-skeleton/source/blender/src/autoarmature.c	2008-07-09 21:07:02 UTC (rev 15511)
@@ -630,7 +630,14 @@
 	{
 		test_angle = saacos(Inpf(vec_first, vec_second));
 		/* ANGLE COST HERE */
-		new_cost += G.scene->toolsettings->skgen_retarget_angle_weight * fabs((test_angle - angle) / test_angle);
+		if (angle > 0)
+		{
+			new_cost += G.scene->toolsettings->skgen_retarget_angle_weight * fabs((test_angle - angle) / angle);
+		}
+		else
+		{
+			new_cost += G.scene->toolsettings->skgen_retarget_angle_weight * fabs(test_angle);
+		}
 	}
 	else
 	{
@@ -886,7 +893,7 @@
 				{
 					RigEdge *previous = edge->prev;
 					float angle = previous->angle;
-					float test_angle = previous->angle;
+					float test_angle;
 					
 					vec0 = vec_cache[i - 1];
 					VecSubf(vec_first, vec1, vec0); 
@@ -896,7 +903,14 @@
 					{
 						test_angle = saacos(Inpf(vec_first, vec_second));
 						/* ANGLE COST HERE */
-						new_cost += G.scene->toolsettings->skgen_retarget_angle_weight * fabs((test_angle - angle) / test_angle);
+						if (angle > 0)
+						{
+							new_cost += G.scene->toolsettings->skgen_retarget_angle_weight * fabs((test_angle - angle) / angle);
+						}
+						else
+						{
+							new_cost += G.scene->toolsettings->skgen_retarget_angle_weight * fabs(test_angle);
+						}
 					}
 					else
 					{
@@ -1247,7 +1261,7 @@
 	ishape = BLI_subtreeShape((BNode*)start_node, (BArc*)next_iarc, 1) % MAGIC_NUMBER;
 	eshape = BLI_subtreeShape((BNode*)enode, (BArc*)next_earc, 1) % MAGIC_NUMBER;
 	
-	while (ishape > eshape && next_earc->link_up)
+	while (ishape != eshape && next_earc->link_up)
 	{
 		next_earc->flag = 1; // mark previous as taken, to prevent backtrack on lower levels
 		
@@ -1289,7 +1303,17 @@
 		}
 	}
 	
+	/* not found, try at higher nodes (lower node might have filtered internal arcs, messing shape of tree */
+	if (next_iarc->link_mesh == NULL)
+	{
+		if (enode->link_up)
+		{
+			start_node->link_mesh = enode->link_up;
+			findCorrespondingArc(start_arc, start_node, next_iarc);
+		}
+	}
 
+	/* still not found, print debug info */
 	if (next_iarc->link_mesh == NULL)
 	{
 		printf("--------------------------\n");

Modified: branches/harmonic-skeleton/source/blender/src/reeb.c
===================================================================
--- branches/harmonic-skeleton/source/blender/src/reeb.c	2008-07-09 19:44:40 UTC (rev 15510)
+++ branches/harmonic-skeleton/source/blender/src/reeb.c	2008-07-09 21:07:02 UTC (rev 15511)
@@ -210,6 +210,9 @@
 	cp_node->next = NULL;
 	cp_node->arcs = NULL;
 	
+	cp_node->link_up = NULL;
+	cp_node->link_down = NULL;
+	
 	BLI_addtail(&rg->nodes, cp_node);
 	rg->totnodes++;
 	
@@ -232,6 +235,7 @@
 			if (low_node->index == high_node->index)
 			{
 				high_node->link_down = low_node;
+				low_node->link_up = high_node;
 				break;
 			}
 		}
@@ -1202,9 +1206,10 @@
 			// If middle node is a normal node, it will be removed later
 			if (middleNode->degree == 2)
 			{
-				removedNode = middleNode;
-
-				filterArc(rg, terminalNode, removedNode, arc, 1);
+				continue;
+//				removedNode = middleNode;
+//
+//				filterArc(rg, terminalNode, removedNode, arc, 1);
 			}
 			// Otherwise, just plain remove of the arc
 			else
@@ -3103,10 +3108,18 @@
 		{
 			glColor3f(1, 0, 0);
 		}
-		else
+		else if (arc->head->symmetry_flag & SYM_AXIAL)
 		{
 			glColor3f(1, 0.5f, 0);
 		}
+		else if (arc->head->symmetry_flag & SYM_RADIAL)
+		{
+			glColor3f(0.5f, 1, 0);
+		}
+		else
+		{
+			glColor3f(1, 1, 0);
+		}
 		glBegin(GL_LINE_STRIP);
 			glVertex3fv(arc->head->p);
 			
@@ -3145,6 +3158,14 @@
 		glColor3f(0, 1, 0);
 		glRasterPos3fv(vec);
 		BMF_DrawString( G.fonts, text);
+
+		sprintf(text, "%i", arc->head->index);
+		glRasterPos3fv(arc->head->p);
+		BMF_DrawString( G.fonts, text);
+
+		sprintf(text, "%i", arc->tail->index);
+		glRasterPos3fv(arc->tail->p);
+		BMF_DrawString( G.fonts, text);
 	}
 	glEnable(GL_DEPTH_TEST);
 	





More information about the Bf-blender-cvs mailing list