[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