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);
        


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to