Revision: 39601
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39601
Author:   shuvro
Date:     2011-08-22 04:01:48 +0000 (Mon, 22 Aug 2011)
Log Message:
-----------
Bug fixes regarding the operator execution optimization.

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

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-22 02:30:43 UTC (rev 39600)
+++ 
branches/soc-2011-avocado/blender/source/blender/editors/mesh/autoseam_tools.c  
    2011-08-22 04:01:48 UTC (rev 39601)
@@ -623,8 +623,34 @@
        return 0;
 }
 
+static int is_seam_should_recalculated(bContext *C, wmOperator *op)
+{
+       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"); 
+       
+       Scene *scene= CTX_data_scene(C);
 
+       int *autoseam_flag;
+       if(op->customdata == NULL){
+               autoseam_flag = (int *)MEM_callocN(sizeof(int), 
"autoseam_flag");
+       }
+       
+       //initialization
+       op->customdata = autoseam_flag;
+       
+       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_flag = 1;
+       }
+       else{
+               *autoseam_flag = 0;
+       }
+       
+       
+       return 1;
 
+}
+
 static int generate_seam_exec(bContext *C, wmOperator *op)
 {
        
@@ -639,23 +665,25 @@
        int is_live_unwrap = RNA_boolean_get(op->ptr, "live_unwrap");
        
        
+       
        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;
        
-       int is_new_execution = 
(scene->toolsettings->autoseam_data.recursion_depth  == maxdepth) &&
-                                                  
(scene->toolsettings->autoseam_data.is_combinatorial == is_combinatorial) &&
-                                                  
(scene->toolsettings->autoseam_data.stretch_type     == stretch_algo) &&
-                                                  
(scene->toolsettings->autoseam_data.method           == method) &&
-                                                  
(scene->toolsettings->autoseam_data.fill_holes       == fill_holes) &&
-                                                  
(scene->toolsettings->autoseam_data.correct_aspect   == correct_aspect) &&
-                                                  
(scene->toolsettings->autoseam_data.is_live_unwrap   == is_live_unwrap);
+       int *execution_flag;
        
-       //printf("Is new execution value : %d\n", is_new_execution);
+       if(op->customdata == NULL){
+               op->customdata = (int *)MEM_callocN(sizeof(int), 
"autoseam_flag");
+               execution_flag = op->customdata;
+               *execution_flag = 1;
+       }
+       else{
+               execution_flag = op->customdata;
+       }
        
-       if((scene->toolsettings->autoseam_data.recursion_depth != maxdepth) || 
(scene->toolsettings->autoseam_data.is_combinatorial != is_combinatorial) || 
(scene->toolsettings->autoseam_data.stretch_type != stretch_algo) || 
is_new_execution)
+       if(*execution_flag == 1)
        {
                AUTOSEAM_Adjacency adj;
                if(!(bm->totfacesel)) {
@@ -739,6 +767,9 @@
        DAG_id_tag_update(obedit->data, OB_RECALC_DATA);
        WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
        
+       MEM_freeN(op->customdata);
+       op->customdata = NULL;
+       
        return OPERATOR_FINISHED;
 }
 
@@ -765,6 +796,7 @@
        /* api callbacks */
        ot->exec = generate_seam_exec;
        ot->poll= ED_operator_editmesh;
+       ot->check = is_seam_should_recalculated;
        
        /* flags */
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;

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

Reply via email to