[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