[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