[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15473] branches/harmonic-skeleton/source/ blender: Reeb multiresolution filtering, now with more than one level

Martin Poirier theeth at yahoo.com
Mon Jul 7 19:27:29 CEST 2008


Revision: 15473
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15473
Author:   theeth
Date:     2008-07-07 19:27:22 +0200 (Mon, 07 Jul 2008)

Log Message:
-----------
Reeb multiresolution filtering, now with more than one level

Modified Paths:
--------------
    branches/harmonic-skeleton/source/blender/include/reeb.h
    branches/harmonic-skeleton/source/blender/makesdna/DNA_scene_types.h
    branches/harmonic-skeleton/source/blender/src/autoarmature.c
    branches/harmonic-skeleton/source/blender/src/buttons_editing.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-07 17:14:44 UTC (rev 15472)
+++ branches/harmonic-skeleton/source/blender/include/reeb.h	2008-07-07 17:27:22 UTC (rev 15473)
@@ -158,6 +158,7 @@
 
 /*********************** PUBLIC *********************************/
 ReebGraph *BIF_ReebGraphFromEditMesh(void);
+ReebGraph *BIF_ReebGraphMultiFromEditMesh(void);
 
 void BIF_GlobalReebGraphFromEditMesh(void);
 void BIF_GlobalReebFree(void);

Modified: branches/harmonic-skeleton/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/harmonic-skeleton/source/blender/makesdna/DNA_scene_types.h	2008-07-07 17:14:44 UTC (rev 15472)
+++ branches/harmonic-skeleton/source/blender/makesdna/DNA_scene_types.h	2008-07-07 17:27:22 UTC (rev 15473)
@@ -440,7 +440,10 @@
 	char  skgen_postpro;
 	char  skgen_postpro_passes;
 	char  skgen_subdivisions[3];
+	char  skgen_multi_level;
 	
+	char tpad[7];
+	
 	/* Alt+RMB option */
 	char edge_mode;
 } ToolSettings;

Modified: branches/harmonic-skeleton/source/blender/src/autoarmature.c
===================================================================
--- branches/harmonic-skeleton/source/blender/src/autoarmature.c	2008-07-07 17:14:44 UTC (rev 15472)
+++ branches/harmonic-skeleton/source/blender/src/autoarmature.c	2008-07-07 17:27:22 UTC (rev 15473)
@@ -1354,10 +1354,12 @@
 	Base *base;
 	ReebGraph *reebg;
 	
-	reebg = BIF_ReebGraphFromEditMesh();
+	//reebg = BIF_ReebGraphFromEditMesh();
+	//BLI_markdownSymmetry((BGraph*)reebg, reebg->nodes.first, G.scene->toolsettings->skgen_symmetry_limit);
 	
-	BLI_markdownSymmetry((BGraph*)reebg, reebg->nodes.first, G.scene->toolsettings->skgen_symmetry_limit);
+	reebg = BIF_ReebGraphMultiFromEditMesh();
 	
+	
 	printf("Reeb Graph created\n");
 
 	base= FIRSTBASE;

Modified: branches/harmonic-skeleton/source/blender/src/buttons_editing.c
===================================================================
--- branches/harmonic-skeleton/source/blender/src/buttons_editing.c	2008-07-07 17:14:44 UTC (rev 15472)
+++ branches/harmonic-skeleton/source/blender/src/buttons_editing.c	2008-07-07 17:27:22 UTC (rev 15473)
@@ -5036,6 +5036,8 @@
 	uiDefButBitS(block, TOG, SKGEN_DISP_LENGTH, REDRAWVIEW3D,	"Length",			1025, 60, 83,19, &G.scene->toolsettings->skgen_options, 0, 0, 0, 0,		"Show Length");
 	uiDefButBitS(block, TOG, SKGEN_DISP_WEIGHT, REDRAWVIEW3D,	"Weight",			1108, 60, 83,19, &G.scene->toolsettings->skgen_options, 0, 0, 0, 0,		"Show Weight");
 	uiDefButBitS(block, TOG, SKGEN_DISP_ORIG, REDRAWVIEW3D,		"Original",			1191, 60, 84,19, &G.scene->toolsettings->skgen_options, 0, 0, 0, 0,		"Show Original Graph");
+
+	uiDefButC(block, NUM, REDRAWVIEW3D, 						"Level:",			1025, 40, 125,19, &G.scene->toolsettings->skgen_multi_level, 0, 5, 1, 0,"Specify the level to draw");
 }
 
 static void editing_panel_mesh_skgen_retarget(Object *ob, Mesh *me)

Modified: branches/harmonic-skeleton/source/blender/src/reeb.c
===================================================================
--- branches/harmonic-skeleton/source/blender/src/reeb.c	2008-07-07 17:14:44 UTC (rev 15472)
+++ branches/harmonic-skeleton/source/blender/src/reeb.c	2008-07-07 17:27:22 UTC (rev 15473)
@@ -2066,13 +2066,16 @@
 			countfaces++;
 			if (countfaces % 100 == 0)
 			{
-				printf("face %i of %i\n", countfaces, totfaces);
+				printf("\rface %i of %i", countfaces, totfaces);
 				verifyFaces(rg);
 			}
 #endif
 		}
-		
 	}
+	
+	printf("\n");
+	
+	
 	BLI_listbase_from_dlist(dlist, &rg->nodes);
 	
 	removeNormalNodes(rg);
@@ -2466,12 +2469,13 @@
 							current_eve->tmp.fp = currentWeight;
 						}
 						
+					printf("\redge %i / %i", eIndex, totedge);
 						
 					} while (select_eed != NULL);
 					
 					MEM_freeN(edges);
 					
-					printf("%i / %i\n", eIndex, totedge);
+					printf("\n");
 				}
 			}
 		}
@@ -2819,6 +2823,7 @@
 	EditMesh *em = G.editMesh;
 	ReebGraph *rg = NULL;
 	ReebGraph *rgi;
+	int i, nb_levels = 5;
 	
 	if (em == NULL)
 		return NULL;
@@ -2850,14 +2855,19 @@
 	/* Filtering might have created degree 2 nodes, so remove them */
 	removeNormalNodes(rg);
 	
-	rg = copyReebGraph(rg);
+	for (i = 0; i < nb_levels; i++)
+	{
+		rg = copyReebGraph(rg);
+	}
 	
-	for (rgi = rg; rgi; rgi = rgi->link)
+	for (rgi = rg, i = nb_levels; rgi; rgi = rgi->link, i--)
 	{
 		/* don't fully filter last level */
 		if (rgi->link)
 		{
-			filterGraph(rgi, G.scene->toolsettings->skgen_options, G.scene->toolsettings->skgen_threshold_internal, G.scene->toolsettings->skgen_threshold_external);
+			float internal_threshold = G.scene->toolsettings->skgen_threshold_internal * (i / (float)nb_levels);
+			float external_threshold = G.scene->toolsettings->skgen_threshold_external * (i / (float)nb_levels);
+			filterGraph(rgi, G.scene->toolsettings->skgen_options, internal_threshold, external_threshold);
 		}
 		/* on last level, only smart filter and loop filter */
 		else
@@ -2971,11 +2981,13 @@
 	
 	if (GLOBAL_RG->link && G.scene->toolsettings->skgen_options & SKGEN_DISP_ORIG)
 	{
-		rg = GLOBAL_RG->link;
+		for (rg = GLOBAL_RG; rg->link; rg = rg->link) ;
 	}
 	else
 	{
-		rg = GLOBAL_RG;
+		i = G.scene->toolsettings->skgen_multi_level;
+		
+		for (rg = GLOBAL_RG; i && rg->link; i--, rg = rg->link) ;
 	}
 	
 	glDisable(GL_DEPTH_TEST);





More information about the Bf-blender-cvs mailing list