Revision: 58934
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58934
Author:   walid
Date:     2013-08-05 15:49:25 +0000 (Mon, 05 Aug 2013)
Log Message:
-----------
Vertex Groups transfer: removing the layer identificationcompletely outside of 
the copy function

Modified Paths:
--------------
    
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
    
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.h
    
branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c

Modified: 
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
===================================================================
--- 
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
        2013-08-05 15:26:45 UTC (rev 58933)
+++ 
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
        2013-08-05 15:49:25 UTC (rev 58934)
@@ -2509,7 +2509,7 @@
 }
 
 
-bool BM_mesh_vertex_group_copy2(BMesh *bm_src, BMesh* bm_dst, ReplaceGroupMode 
replace_mode, float tmp_mat[4][4])
+bool BM_mesh_vertex_group_copy2(BMesh *bm_src, BMesh* bm_dst, const struct 
ReplaceLayerInfo replace_info, float tmp_mat[4][4])
 {
        //-----algorithm definitions start
        struct BMBVHTree *bmtree_src = NULL;
@@ -2577,28 +2577,13 @@
        }
 
        tmp_weight = MEM_mallocN(sizeof(*tmp_weight) * exp_vert_per_face, 
"tmp_weight bmesh_data_transfer.c");
-       if (replace_mode == APPEND_GROUPS) {
-               src_lay_start = 0;
-               src_lay_end = tot_layer_src;
-               dst_lay_start = tot_layer_dst - tot_layer_src;
-               dst_lay_end = tot_layer_dst;
-       }
 
-       else if ((replace_mode == REPLACE_ENOUGH_GROUPS) || (replace_mode == 
REPLACE_ALL_GROUPS)) {
-               src_lay_start = 0;
-               src_lay_end = tot_layer_src;
-               dst_lay_start = 0;
-               dst_lay_end = tot_layer_src;
-       }
+       src_lay_start = replace_info.src_lay_start;
+       src_lay_end = replace_info.src_lay_end;
+       dst_lay_start = replace_info.dst_lay_start;
+       dst_lay_end = replace_info.dst_lay_end;
 
-       else if (replace_mode == REPLACE_ACTIVE_GROUP) {
-               src_lay_start = 
CustomData_get_active_layer_index(&bm_src->ldata, CD_MDEFORMVERT);
-               src_lay_end = src_lay_start + 1;        //stopping condition
-               dst_lay_start = 
CustomData_get_active_layer_index(&bm_dst->ldata, CD_MDEFORMVERT);
-               dst_lay_end = dst_lay_start + 1;
-       }
-
-       for (src_lay_iter = src_lay_start, dst_lay_iter = dst_lay_start; 
src_lay_iter < src_lay_end;
+       for (src_lay_iter = src_lay_start, dst_lay_iter = dst_lay_start; 
src_lay_iter <= src_lay_end;
                src_lay_iter++, dst_lay_iter++) {
 
                //fix the layer index of the source & dest

Modified: 
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.h
===================================================================
--- 
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.h
        2013-08-05 15:26:45 UTC (rev 58933)
+++ 
branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.h
        2013-08-05 15:49:25 UTC (rev 58934)
@@ -41,6 +41,13 @@
        APPEND_GROUPS = 4
 } ReplaceGroupMode;
 
+struct ReplaceLayerInfo {
+       int src_lay_start;
+       int src_lay_end;
+       int dst_lay_start;
+       int dst_lay_end;
+} ReplaceLayerInfo;
+
 bool BKE_bmesh_calc_relative_deform(const int v_count, const float 
(*vert_cos_src)[], const float (*vert_cos_dst)[],
                                                                        const 
float (*vert_cos_org)[],  float (*vert_cos_new)[]);
 bool BM_edge_has_consistant_loops(BMEdge *e, int CD_offset);
@@ -71,7 +78,8 @@
 bool BM_mesh_vertex_group_copy(BMesh *bm_src, BMesh* bm_dst, ReplaceGroupMode 
replace_mode, float tmp_mat[4][4]);
 bool BM_mesh_vertex_color_copy(BMesh *bm_src, BMesh* bm_dst, ReplaceGroupMode 
replace_mode, float tmp_mat[4][4]);
 //rewrite that shall be followed on the other 3 datatype to be a bit modular
-bool BM_mesh_vertex_group_copy2(BMesh *bm_src, BMesh* bm_dst, ReplaceGroupMode 
replace_mode, float tmp_mat[4][4]);
+bool BM_mesh_vertex_group_copy2(BMesh *bm_src, BMesh* bm_dst, const struct 
ReplaceLayerInfo replace_info,
+                                float tmp_mat[4][4]);
 
 #endif /* __BMESH_DATA_TRANSFER_H__ */
 

Modified: 
branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c
===================================================================
--- 
branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c
   2013-08-05 15:26:45 UTC (rev 58933)
+++ 
branches/soc-2013-meshdata_transfer/source/blender/editors/object/object_vgroup.c
   2013-08-05 15:49:25 UTC (rev 58934)
@@ -258,6 +258,8 @@
        int active_dst, active_src;
        char *src_name;
 
+       struct ReplaceLayerInfo replace_info;
+
        invert_m4_m4(ob_src->imat, ob_src->obmat);
        mul_m4_m4m4(tmp_mat, ob_src->imat, ob_dst->obmat);
 
@@ -291,6 +293,11 @@
                        src_name = me_src->vdata.layers[CD_src + i].name;
                        CustomData_set_layer_name(&me_dst->vdata, 
CD_MDEFORMVERT, i, src_name);
                }
+
+               replace_info.src_lay_start = 0;
+               replace_info.src_lay_end = num_src_lay;
+               replace_info.dst_lay_start = 0;
+               replace_info.dst_lay_end = num_src_lay;
        }
 
        //we'll tell the copy function to start copying from # of source layers 
from the end of the dst layers
@@ -303,6 +310,11 @@
                        //append vertex group with the src names
                        ED_vgroup_add_name(ob_dst, src_name);
                }
+
+               replace_info.src_lay_start = 0;
+               replace_info.src_lay_end = num_src_lay;
+               replace_info.dst_lay_start = num_dst_lay;//num_dst_lay - 
num_src_lay;
+               replace_info.dst_lay_end = num_dst_lay + num_src_lay;
        }
 
        else if (replace_mode == REPLACE_ALL_GROUPS)
@@ -317,6 +329,11 @@
                        //add vertex group with the src name
                        ED_vgroup_add_name(ob_dst, src_name);
                }
+
+               replace_info.src_lay_start = 0;
+               replace_info.src_lay_end = num_src_lay;
+               replace_info.dst_lay_start = 0;
+               replace_info.dst_lay_end = num_src_lay;
        }
 
        else if (replace_mode == REPLACE_ACTIVE_GROUP) {
@@ -343,6 +360,12 @@
 
                        CustomData_set_layer_name(&me_dst->vdata, 
CD_MDEFORMVERT, active_dst, src_name);
                }
+
+               //to transfer a single layer add it to the start and end
+               replace_info.src_lay_start = 
CustomData_get_active_layer_index(&me_src->ldata, CD_MDEFORMVERT);
+               replace_info.src_lay_end = replace_info.src_lay_start;
+               replace_info.dst_lay_start = 
CustomData_get_active_layer_index(&me_dst->ldata, CD_MDEFORMVERT);
+               replace_info.dst_lay_end = replace_info.dst_lay_start;
        }
 
        //allocate space
@@ -353,7 +376,7 @@
        BM_mesh_bm_from_me(bm_dst, me_dst, TRUE, true, 0);
 
        if (transfer_mode == PROJECTION_TRANSFER) {
-               if (!BM_mesh_vertex_group_copy2(bm_src, bm_dst, replace_mode, 
tmp_mat)) {
+               if (!BM_mesh_vertex_group_copy2(bm_src, bm_dst, replace_info, 
tmp_mat)) {
                        return false;
                }
        }

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

Reply via email to