[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39536] branches/soc-2011-avocado/blender/ source/blender: Execute seam generation functions only when the parameters related to them are changed in the UI .

shuvro sarker shuvro05 at gmail.com
Thu Aug 18 22:35:38 CEST 2011


Revision: 39536
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39536
Author:   shuvro
Date:     2011-08-18 20:35:37 +0000 (Thu, 18 Aug 2011)
Log Message:
-----------
Execute seam generation functions only when the parameters related to them are changed in the UI. Otherwise avoid this calculation and only execute the function related to unwrapping.

Modified Paths:
--------------
    branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.c
    branches/soc-2011-avocado/blender/source/blender/makesdna/DNA_scene_types.h

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-08-18 20:01:30 UTC (rev 39535)
+++ branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.c	2011-08-18 20:35:37 UTC (rev 39536)
@@ -63,8 +63,10 @@
 #include "autoseam_C_API.h"
 #include "ED_mesh.h"
 
+#include "ED_util.h"
 
 
+
 #define INF 999999
 
 static float min_value = INF;
@@ -625,54 +627,67 @@
 
 static int generate_seam_exec(bContext *C, wmOperator *op)
 {
-	AUTOSEAM_Adjacency adj;
+	
 	int maxdepth= RNA_int_get(op->ptr, "depth");
 	int is_combinatorial = RNA_boolean_get(op->ptr, "is_combinatorial");
+	int stretch_algo   = RNA_enum_get(op->ptr, "stretch_type"); 
+	
 	int method = RNA_enum_get(op->ptr, "method");
 	int fill_holes = RNA_boolean_get(op->ptr, "fill_holes");
 	int correct_aspect = RNA_boolean_get(op->ptr, "correct_aspect");
 	int num_faces;
 	int is_live_unwrap = RNA_boolean_get(op->ptr, "live_unwrap");
-	int stretch_algo   = RNA_enum_get(op->ptr, "stretch_type"); 
 	
+	
 	Scene *scene= CTX_data_scene(C);
 	Object *obedit= CTX_data_edit_object(C);
 	Mesh *me= ((Mesh *)obedit->data);
 	BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
 	BMesh *bm = em->bm;
 	
-	//Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
-	//Mesh *me= ob->data;
+
 	
-	if(!(bm->totfacesel)) {
-		BKE_report(op->reports, RPT_WARNING, "No selected face found.");
-		return OPERATOR_CANCELLED;
-	}
-	me->drawflag |= ME_DRAWSEAMS;
-	num_faces = BM_Count_Element(bm, BM_FACE);
 	
-	adj = autoseam_create_adjacency(num_faces);
+	if((scene->toolsettings->autoseam_data.recursion_depth != maxdepth) || (scene->toolsettings->autoseam_data.is_combinatorial != is_combinatorial) || (scene->toolsettings->autoseam_data.stretch_type != stretch_algo))
+	{
+		AUTOSEAM_Adjacency adj;
+		if(!(bm->totfacesel)) {
+			BKE_report(op->reports, RPT_WARNING, "No selected face found.");
+			return OPERATOR_CANCELLED;
+		}
+		me->drawflag |= ME_DRAWSEAMS;
+		num_faces = BM_Count_Element(bm, BM_FACE);
+		
+		adj = autoseam_create_adjacency(num_faces);
+		
+		/* set initial indices, found out this is necessary, they get reset on operator redo */
+		autoseam_prepare_graph(bm);
+		
+		/* this creates the adjacency matrix */
+		autoseam_create_graph(adj, bm, is_combinatorial, -1, NULL);
+		
+		/* set the min value for adjcacency calculation. */
+		autoseam_set_min_value(adj, min_value);
+		
+		/* clear if any seam already exists. */
+		autoseam_clear_seam(bm);
+		autoseam_set_map_default(adj);
+		
+		ED_mesh_uv_texture_add(C, me, "stretch_layer", TRUE);
+		/* This function will call the recusive function for each of the components of bmesh*/
+		handle_separate_components(adj, num_faces, bm, maxdepth, C, stretch_algo);
+		// do_all_components(bm, maxdepth, C);
+		
+		ED_mesh_uv_texture_remove(C, obedit, me);
 	
-	/* set initial indices, found out this is necessary, they get reset on operator redo */
-	autoseam_prepare_graph(bm);
+	}
 	
-	/* this creates the adjacency matrix */
-	autoseam_create_graph(adj, bm, is_combinatorial, -1, NULL);
+	scene->toolsettings->autoseam_data.recursion_depth  = maxdepth;
+	scene->toolsettings->autoseam_data.is_combinatorial = is_combinatorial;
+	scene->toolsettings->autoseam_data.stretch_type     = stretch_algo;
 
-	/* set the min value for adjcacency calculation. */
-	autoseam_set_min_value(adj, min_value);
+
 	
-	/* clear if any seam already exists. */
-	autoseam_clear_seam(bm);
-	autoseam_set_map_default(adj);
-	
-	ED_mesh_uv_texture_add(C, me, "stretch_layer", TRUE);
-	/* This function will call the recusive function for each of the components of bmesh*/
-	handle_separate_components(adj, num_faces, bm, maxdepth, C, stretch_algo);
-	// do_all_components(bm, maxdepth, C);
-	
-	ED_mesh_uv_texture_remove(C, obedit, me);
-	
 	/* If live unwrapping enable, unwrap the seams after marking */
 	if(is_live_unwrap){
 		
@@ -704,6 +719,8 @@
 	/*reset the min_value*/
 	min_value = INF;
 	
+	ED_undo_push_op(C, op);
+	
 	/* operator management */
 	DAG_id_tag_update(obedit->data, OB_RECALC_DATA);
 	WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
@@ -739,7 +756,7 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 	
 	RNA_def_enum(ot->srna, "stretch_type", prop_stretch_algo_types, 1, "Stretch Type", "");
-	RNA_def_int(ot->srna, "depth", 3, 1, 6, "Recursion Depth", "Max. recursion depth", 0, 6);
+	RNA_def_int(ot->srna, "depth", 1, 1, 6, "Recursion Depth", "Max. recursion depth", 0, 6);
 	RNA_def_boolean(ot->srna, "is_combinatorial", 0, "Combinatorial", "Consider actual face centers for calculation.");
 	
 	RNA_def_enum(ot->srna, "method", method_items, 0, "Unwrap Method", "Unwrapping method. Angle Based usually gives better results than Conformal, while being somewhat slower.");

Modified: branches/soc-2011-avocado/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/soc-2011-avocado/blender/source/blender/makesdna/DNA_scene_types.h	2011-08-18 20:01:30 UTC (rev 39535)
+++ branches/soc-2011-avocado/blender/source/blender/makesdna/DNA_scene_types.h	2011-08-18 20:35:37 UTC (rev 39536)
@@ -601,7 +601,24 @@
 	
 	void *paintcursor;					/* wm handle */
 } VPaint;
+	
+typedef struct AutoseamData
+{
+		
+	int stretch_type;
+	int recursion_depth;
+	int is_combinatorial;
+	
+	int method;
+	int fill_holes;
+	int correct_aspect;
+	
+	int live_unwrap;
+	float margin;
 
+
+} AutoseamData;
+
 /* VPaint flag */
 #define VP_COLINDEX	1
 #define VP_AREA		2
@@ -617,6 +634,10 @@
 	VPaint *wpaint;		/* weight paint */
 	Sculpt *sculpt;
 	
+	//Autoseam data storage
+	
+	AutoseamData autoseam_data;
+	
 	/* Vertex groups */
 	float vgroup_weight;
 
@@ -737,6 +758,7 @@
 	float sculpt_paint_unified_alpha; /* unified strength of brush */
 } ToolSettings;
 
+
 typedef struct bStats {
 	/* scene totals for visible layers */
 	int totobj, totlamp, totobjsel, totcurve, totmesh, totarmature;




More information about the Bf-blender-cvs mailing list