[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37818] branches/soc-2011-avocado/blender: Some progress on the recursive implementation of the autoseam algorithm.

shuvro sarker shuvro05 at gmail.com
Sun Jun 26 04:20:23 CEST 2011


Revision: 37818
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37818
Author:   shuvro
Date:     2011-06-26 02:20:20 +0000 (Sun, 26 Jun 2011)
Log Message:
-----------
Some progress on the recursive implementation of the autoseam algorithm.

Modified Paths:
--------------
    branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp
    branches/soc-2011-avocado/blender/intern/autoseam/AutoseamEigenspace.cpp
    branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.c
    branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.h

Modified: branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp
===================================================================
--- branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp	2011-06-26 01:11:03 UTC (rev 37817)
+++ branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp	2011-06-26 02:20:20 UTC (rev 37818)
@@ -87,8 +87,11 @@
 {
     if(m_eigenspaces.size())
         m_eigenspaces[n]->get(fplus, nplus, fminus, nminus);
-    else
+    else{
+        *nplus  = 0;
+        *nminus = 0;
         printf("No seam generation is possible");
+    }
 }
 
 // get the longest seam with connected subgraphs F+ and F-

Modified: branches/soc-2011-avocado/blender/intern/autoseam/AutoseamEigenspace.cpp
===================================================================
--- branches/soc-2011-avocado/blender/intern/autoseam/AutoseamEigenspace.cpp	2011-06-26 01:11:03 UTC (rev 37817)
+++ branches/soc-2011-avocado/blender/intern/autoseam/AutoseamEigenspace.cpp	2011-06-26 02:20:20 UTC (rev 37818)
@@ -50,15 +50,19 @@
 
 void AutoseamEigenspace::get(int *fplus, unsigned int* nplus, int* fminus, unsigned int* nminus)
 {
-    for (int i=0; i<m_fplus.size(); ++i) {
+    int plus_size, minus_size;
+    
+    plus_size = m_fplus.size();
+    for (int i=0; i< plus_size; ++i) {
         fplus[i] = m_fplus[i];
     }
     
-    *nplus = m_fplus.size();
-    for (int i=0; i<m_fminus.size(); ++i) {
+    *nplus = plus_size;
+    minus_size  = m_fminus.size();
+    for (int i=0; i< minus_size; ++i) {
         fminus[i] = m_fminus[i];
     }
-    *nminus = m_fminus.size();
+    *nminus = minus_size;
 }
 
 

Modified: branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.c
===================================================================
--- branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.c	2011-06-26 01:11:03 UTC (rev 37817)
+++ branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.c	2011-06-26 02:20:20 UTC (rev 37818)
@@ -55,7 +55,6 @@
 
 #include "ED_screen.h"
 #include "MEM_guardedalloc.h"
-#include "bmesh.h"
 #include "WM_api.h"
 
 #define MAX_DEPTH 4
@@ -78,6 +77,17 @@
 	return found;
 }
 
+static void autoseam_clear_seam(BMesh *bm)
+{
+    BMIter edge_iter;
+    BMEdge *edge;
+    
+    for(edge = BMIter_New(&edge_iter, bm, BM_EDGES_OF_MESH, NULL ); edge; edge= BMIter_Step(&edge_iter)) 
+    {
+        BM_ClearHFlag(edge, BM_SEAM);
+    }
+
+}
 static void autoseam_mark_seam(BMesh *bm, int *fplus, unsigned int nplus, int* fminus, unsigned int nminus)
 {
     BMEdge *edge;
@@ -86,10 +96,10 @@
     BMIter edge_iter, face_iter;
 
     
-    for(edge = BMIter_New(&edge_iter, bm, BM_EDGES_OF_MESH, NULL ); edge; edge= BMIter_Step(&edge_iter)) 
-    {
-        BM_ClearHFlag(edge, BM_SEAM);
-    }
+//    for(edge = BMIter_New(&edge_iter, bm, BM_EDGES_OF_MESH, NULL ); edge; edge= BMIter_Step(&edge_iter)) 
+//    {
+//        BM_ClearHFlag(edge, BM_SEAM);
+//    }
     
     for(edge = BMIter_New(&edge_iter, bm, BM_EDGES_OF_MESH, NULL ); edge; edge= BMIter_Step(&edge_iter)) 
     {
@@ -134,8 +144,10 @@
 int is_element_in_array(int element, int *array, int num_array_element)
 {
     int i;
+    //printf("\nitem to search: %d\n", element);
     
     for(i = 0; i < num_array_element; i++){
+        //printf("%d ", array[i]);
         if(array[i] == element) return  1;
     }
     
@@ -152,7 +164,7 @@
     float poly_centres[2][3];
     int k;
 
-    for( k = 0; k < num_faces; k++) printf("%d ", faces[k]);
+    //for( k = 0; k < num_faces; k++) printf("%d ", faces[k]);
     printf("\n");
     
     for(edge = BMIter_New(&edge_iter, bm, BM_EDGES_OF_MESH, bm ); edge; edge= BMIter_Step(&edge_iter)) 
@@ -185,7 +197,7 @@
                         if(is_first_index == 1){
                             int is_second_index = is_element_in_array(loop->radial_next->f->head.index, faces, num_faces);
                             if(is_second_index == 1){
-                                printf("edge :%d %d", loop->f->head.index, loop->radial_next->f->head.index);
+                                //printf("edge :%d %d", loop->f->head.index, loop->radial_next->f->head.index);
                                 autoseam_set_adjacent(adj, loop->f->head.index, loop->radial_next->f->head.index, edge_length);
                             }
                         }
@@ -245,6 +257,7 @@
             autoseam_get_split(adj, s, fplus, &nplus, fminus, &nminus);
             
             /* mark the seam on the mesh */
+            autoseam_clear_seam(bm);
             autoseam_mark_seam(bm, fplus, nplus, fminus, nminus);
             
             autoseam_delete_adjacency(adj);
@@ -258,6 +271,8 @@
             
             adj = autoseam_create_adjacency(num_faces);
             
+            printf("plus portion : %d minus portion : %d\n", nplus, nminus);
+            
             autoseam_create_graph(adj, bm, 1, nplus , fplus);
             MEM_freeN(fplus);
             autoseam_generate_seam(adj);
@@ -274,9 +289,12 @@
             fminus = (int*)MEM_callocN(num_faces*sizeof(int), "autoseam_fminus");
             
             autoseam_get_split(adj, s, fplus, &nplus, fminus, &nminus);
-            autoseam_mark_seam(bm, fplus, nplus, fminus, nminus);
+            
+            if(nplus || nminus) autoseam_mark_seam(bm, fplus, nplus, fminus, nminus);
             autoseam_delete_adjacency(adj);
             
+            //printf("plus : %d  minus : %d\n", nplus, nminus);
+            
                         
             
             s2 = autoseam_get_best_split(adj_second);
@@ -285,10 +303,12 @@
             fminus2 = (int*)MEM_callocN(num_faces*sizeof(int), "autoseam_fminus2");
             
             autoseam_get_split(adj_second, s2, fplus2, &nplus2, fminus2, &nminus2);
-            autoseam_mark_seam(bm, fplus2, nplus2, fminus2, nminus2);
+            if(nplus2 || nminus2) autoseam_mark_seam(bm, fplus2, nplus2, fminus2, nminus2);
             autoseam_delete_adjacency(adj_second);
             
+            //printf("plus2 : %d  minus2 : %d\n", nplus2, nminus2);
             
+            
             recursion_depth++;
             generate_seam_recursive(bm,fplus, nplus, fminus, nminus);
             generate_seam_recursive(bm,fplus2, nplus2, fminus2, nminus2);

Modified: branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.h
===================================================================
--- branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.h	2011-06-26 01:11:03 UTC (rev 37817)
+++ branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.h	2011-06-26 02:20:20 UTC (rev 37818)
@@ -29,8 +29,11 @@
 #ifndef AUTOSEAM_TOOLS_H
 #define AUTOSEAM_TOOLS_H
 
+#include "bmesh.h"
+
 void calculate_eigen(float **dual_graph, int dimension, float **eigen_vectors, float *eigen_valuess);
 int get_sign(float number);
+static void autoseam_clear_seam(BMesh *bm);
 
 
 #endif
\ No newline at end of file




More information about the Bf-blender-cvs mailing list