[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59046] branches/ soc-2013-meshdata_transfer/source/blender/bmesh/tools: Vertex Color Transfer: removing the copy to a different function to later modularize all the transfer functions

Walid Shouman eng.walidshouman at gmail.com
Sat Aug 10 13:25:55 CEST 2013


Revision: 59046
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59046
Author:   walid
Date:     2013-08-10 11:25:55 +0000 (Sat, 10 Aug 2013)
Log Message:
-----------
Vertex Color Transfer: removing the copy to a different function to later modularize all the transfer functions

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

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-10 11:06:46 UTC (rev 59045)
+++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c	2013-08-10 11:25:55 UTC (rev 59046)
@@ -2084,6 +2084,91 @@
 	int count;
 } weighed_loop_pool;
 
+bool BM_mesh_multi_layer_copy(BMesh* bm_src, BMesh *bm_dst, const struct ReplaceLayerInfo replace_info, int type, void *weights)
+{
+	int CD_src, CD_dst;
+	int src_lay_iter, dst_lay_iter;
+	int src_lay_start = replace_info.src_lay_start;
+	int src_lay_end = replace_info.src_lay_end;
+	int dst_lay_start = replace_info.dst_lay_start;
+	weighed_loop_pool *l_weights = (weighed_loop_pool*) weights;
+
+	int a, b;
+	BMIter liter, fiter;
+	BMLoop *l;
+	BMFace *f_dst;
+
+	switch (type) {
+	    case CD_MLOOPCOL:
+		{
+			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
+				CD_src = CustomData_get_n_offset(&bm_src->ldata, CD_MLOOPCOL, src_lay_iter);
+				CD_dst = CustomData_get_n_offset(&bm_dst->ldata, CD_MLOOPCOL, dst_lay_iter);
+
+				b = 0;
+				//the way we do it is by looping over each face!!
+				BM_ITER_MESH (f_dst, &fiter, bm_dst, BM_FACES_OF_MESH) {
+
+					BM_ITER_ELEM (l, &liter, f_dst, BM_LOOPS_OF_FACE) {
+						MLoopCol *lcol = BM_ELEM_CD_GET_VOID_P(l, CD_dst);
+						MLoopCol lcol_out;
+
+						// Interpolating according to the spatially found weights
+						lcol_out.a = 0;
+						lcol_out.b = 0;
+						lcol_out.g = 0;
+						lcol_out.r = 0;
+
+						for (a = 0; a < l_weights[b].count; a++) {
+							MLoopCol *lcol2 = BM_ELEM_CD_GET_VOID_P(l_weights[b].l_w->l, CD_src);
+							float weight = l_weights[b].l_w[a].weight;
+
+							//there's no madd_v4_v4fl for char!
+							lcol_out.a += (lcol2->a * weight);
+							lcol_out.b += (lcol2->b * weight);
+							lcol_out.g += (lcol2->g * weight);
+							lcol_out.r += (lcol2->r * weight);
+						}
+
+						//shall we verify the indices!?
+						//there's no copy_v4_v4 for char!
+						lcol->a = lcol_out.a;
+						lcol->b = lcol_out.b;
+						lcol->g = lcol_out.g;
+						lcol->r = lcol_out.r;
+
+						//end of interpolation
+
+						b++;
+					}
+				}
+
+			}
+
+			return true;
+		}
+
+		case CD_MDEFORMVERT:
+		{
+			return false;
+		}
+
+		case CD_SHAPEKEY:
+		{
+			return false;
+		}
+
+		case CD_MLOOPUV:
+		{
+			return false;
+		}
+	}
+	return false;
+}
+
 bool BM_mesh_vertex_color_copy(BMesh *bm_src, BMesh* bm_dst, const struct ReplaceLayerInfo replace_info, bool relative_to_target,
                                float tmp_mat[4][4])
 {
@@ -2112,7 +2197,7 @@
 
 	int CD_src, CD_dst;
 
-	int src_lay_iter, dst_lay_iter;
+//	int src_lay_iter, dst_lay_iter;
 
 	//replace mode variables
 	int src_lay_start, src_lay_end;
@@ -2236,7 +2321,9 @@
 				b++;
 			}
 		}
-
+//----- we shall remove this part into a separate function
+		//take the bm_src, bm_dst, layers, the type and the (void *weights)
+/*
 		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++) {
 
@@ -2283,6 +2370,9 @@
 			}
 
 		}
+*/
+//====end of separated part
+		BM_mesh_multi_layer_copy(bm_src, bm_dst, replace_info, CD_MLOOPCOL, l_weights);
 
 		BKE_bmbvh_free(bmtree_src);
 

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-10 11:06:46 UTC (rev 59045)
+++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.h	2013-08-10 11:25:55 UTC (rev 59046)
@@ -79,5 +79,7 @@
 bool BM_mesh_vertex_group_copy(BMesh *bm_src, BMesh* bm_dst, const struct ReplaceLayerInfo replace_info, bool relative_to_target,
                                 float tmp_mat[4][4]);
 
+bool BM_mesh_multi_layer_copy(BMesh* bm_src, BMesh *bm_dst, const struct ReplaceLayerInfo replace_info, int type, void *weights);
+
 #endif /* __BMESH_DATA_TRANSFER_H__ */
 




More information about the Bf-blender-cvs mailing list