[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46723] branches/meshdata_transfer/source/ blender/editors/object/object_vgroup.c: Some changes to structure as a response to review.

Ove Murberg Henriksen sorayasilvermoon at hotmail.com
Thu May 17 14:15:40 CEST 2012


Revision: 46723
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46723
Author:   cyborgmuppet
Date:     2012-05-17 12:15:39 +0000 (Thu, 17 May 2012)
Log Message:
-----------
Some changes to structure as a response to review.
(I still havent adressed all issues.)

Modified Paths:
--------------
    branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c

Modified: branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c	2012-05-17 12:08:37 UTC (rev 46722)
+++ branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c	2012-05-17 12:15:39 UTC (rev 46723)
@@ -20,7 +20,7 @@
  *
  * The Original Code is: all of this file.
  *
- * Contributor(s): none yet.
+ * Contributor(s): Ove M Henriksen.
  *
  * ***** END GPL LICENSE BLOCK *****
  */
@@ -376,6 +376,10 @@
 	return 1;
 }
 
+/*ideasman42 2012/05/17 09:04:35
+the single vgroup to copy could be an argument -
+allows to be more flexible later even if for now, the arg is "ob_src->actdef-1" for all callers.
+*/
 /*Copy a single vertex group from source to destination with weights by identical meshes*/
 int ED_vgroup_copy_single(Object *ob_dst, const Object *ob_src)
 {
@@ -422,27 +426,8 @@
 
 /********************** Start transfer weight functions *********************/
 
-int ED_vgroup_transfer_weight_by_index_all(Object *ob_dst, Object *ob_src, short mode)
+int ED_vgroup_transfer_weight_by_index(Object *ob_dst, Object *ob_src, short mode, short option)
 {
-
-	if(mode == 1){
-		return ED_vgroup_copy_array(ob_dst, ob_src);
-	}
-
-
-	else if(mode == 2){
-		return 0;
-	}
-
-
-	else if(mode == 3){
-		return 0;
-	}
-	else return 0;
-}
-
-int ED_vgroup_transfer_weight_by_index_single(Object *ob_dst, Object *ob_src, short mode)
-{
 	MDeformVert **dv_array_src;
 	MDeformVert **dv_array_dst;
 	MDeformWeight *dw_dst, *dw_src;
@@ -450,6 +435,9 @@
 	int i, index_src, index_dst;
 	bDeformGroup *dg_src, *dg_dst;
 
+	/*remove this:*/
+	option=option;
+
 	/*get source deform group*/
 	dg_src = BLI_findlink(&ob_src->defbase, (ob_src->actdef-1));
 
@@ -476,52 +464,20 @@
 		return 0;
 	}
 
-	/* mode 1 == replace all weights*/
-	if(mode == 1){
-		/* loop through the vertices and copy weight*/
-		for(i = 0; i < dv_tot_dst; i++, dv_array_src++, dv_array_dst++){
-			dw_src = defvert_verify_index(*dv_array_src, index_src);
-			dw_dst = defvert_verify_index(*dv_array_dst, index_dst);
-			dw_dst->weight = dw_src->weight;
-		}
-		return 1;
+	/* loop through the vertices and copy weight*/
+	for(i = 0; i < dv_tot_dst; i++, dv_array_src++, dv_array_dst++){
+		dw_src = defvert_verify_index(*dv_array_src, index_src);
+		dw_dst = defvert_verify_index(*dv_array_dst, index_dst);
+		if(mode == 1) dw_dst->weight = dw_src->weight;
+		else if(mode == 2) {if(!dw_dst->weight || dw_dst->weight == 0) dw_dst->weight = dw_src->weight;}
+		else if(mode == 3) {if((*dv_array_src)->flag == 1) dw_dst->weight = dw_src->weight;}/*This does not work*/
+		else return 0;
 	}
-
-	/* mode 2 == replace null weights*/
-	else if(mode == 2){
-		/* loop through the vertices and copy weight*/
-		for(i = 0; i < dv_tot_dst; i++, dv_array_src++, dv_array_dst++) {
-			dw_src = defvert_verify_index(*dv_array_src, index_src);
-			dw_dst = defvert_verify_index(*dv_array_dst, index_dst);
-			/*check if destination weight is null or zero*/
-			if(!dw_dst->weight || dw_dst->weight == 0) dw_dst->weight = dw_src->weight;
-		}
-		return 1;
-	}
-
-	/* mode 3 == replace selected weights*/
-	else if(mode == 3){
-		/* loop through the vertices and copy weight*/
-		for(i = 0; i < dv_tot_dst; i++, dv_array_src++, dv_array_dst++) {
-			dw_src = defvert_verify_index(*dv_array_src, index_src);
-			dw_dst = defvert_verify_index(*dv_array_dst, index_dst);
-			/*check if source vertex is selected*/
-			if((*dv_array_src)->flag == 1) dw_dst->weight = dw_src->weight; /*This does not work*/
-		}
-		return 1;
-	}
-	else return 0;
+	return 1;
 }
 
-int ED_vgroup_transfer_weight_by_nearest_vertex_all(Object *ob_dst, Object *ob_src, short mode)
+int ED_vgroup_transfer_weight_by_nearest_vertex(Object *ob_dst, Object *ob_src, short mode, short option)
 {
-	ob_dst = ob_dst;
-	ob_src = ob_src;
-	return mode;
-}
-
-int ED_vgroup_transfer_weight_by_nearest_vertex_single(Object *ob_dst, Object *ob_src, short mode)
-{
 	bDeformGroup *dg_src, *dg_dst;
 	MDeformVert **dv_array_src, **dv_array_dst;
 	MDeformWeight *dw_dst, *dw_src;
@@ -533,6 +489,9 @@
 	int dv_tot_src, dv_tot_dst, i, index_dst, index_src;
 	float tmp_co[3], tmp_mat[4][4];
 
+	/*remove this:*/
+	option=option;
+
 	/*get source deform group*/
 	dg_src = BLI_findlink(&ob_src->defbase, (ob_src->actdef-1));
 
@@ -568,79 +527,29 @@
 	invert_m4_m4(ob_src->imat, ob_src->obmat);
 	mult_m4_m4m4(tmp_mat, ob_src->imat, ob_dst->obmat);
 
-	/* mode 1 == replace all weights*/
-	if(mode == 1){
-		/* loop through the vertices and copy weight*/
-		for(i = 0; i < me_dst->totvert; i++, mv_dst++, dv_array_dst++){
-			/*reset nearest*/
-			nearest.index = -1;
-			nearest.dist = FLT_MAX;
-			/*transform into target space*/
-			mul_v3_m4v3(tmp_co, tmp_mat, mv_dst->co);
-			/*node tree accelerated search for closest vetex*/
-			BLI_bvhtree_find_nearest(tree_mesh_src.tree, tmp_co, &nearest, tree_mesh_src.nearest_callback, &tree_mesh_src);
-			dw_src = defvert_verify_index(dv_array_src[nearest.index], index_src);
-			dw_dst = defvert_verify_index(*dv_array_dst, index_dst);
-			dw_dst->weight = dw_src->weight;
-		}
-		/*free memory and return*/
-		free_bvhtree_from_mesh(&tree_mesh_src);
-		return 1;
+	/* loop through the vertices and copy weight*/
+	for(i = 0; i < me_dst->totvert; i++, mv_dst++, dv_array_dst++){
+		/*reset nearest*/
+		nearest.index = -1;
+		nearest.dist = FLT_MAX;
+		/*transform into target space*/
+		mul_v3_m4v3(tmp_co, tmp_mat, mv_dst->co);
+		/*node tree accelerated search for closest vetex*/
+		BLI_bvhtree_find_nearest(tree_mesh_src.tree, tmp_co, &nearest, tree_mesh_src.nearest_callback, &tree_mesh_src);
+		dw_src = defvert_verify_index(dv_array_src[nearest.index], index_src);
+		dw_dst = defvert_verify_index(*dv_array_dst, index_dst);
+		if(mode == 1) dw_dst->weight = dw_src->weight;
+		else if(mode == 2) {if(!dw_dst->weight || dw_dst->weight == 0) dw_dst->weight = dw_src->weight;}
+		else if(mode == 3) {dw_dst->weight= dw_src->weight;}/*TODO fix this*/
+		else return 0;
 	}
-
-	/* mode 2 == replace null weights*/
-	else if(mode == 2){
-		/* loop through the vertices and copy weight weight*/
-		for(i = 0; i < me_dst->totvert; i++, mv_dst++, dv_array_dst++){
-			/*reset nearest*/
-			nearest.index = -1;
-			nearest.dist = FLT_MAX;
-			/*transform into target space*/
-			mul_v3_m4v3(tmp_co, tmp_mat, mv_dst->co);
-			/*node tree accelerated search for closest vetex*/
-			BLI_bvhtree_find_nearest(tree_mesh_src.tree, tmp_co, &nearest, tree_mesh_src.nearest_callback, &tree_mesh_src);
-			dw_src = defvert_verify_index(dv_array_src[nearest.index], index_src);
-			dw_dst = defvert_verify_index(*dv_array_dst, index_dst);
-			/*check if destination weight is null or zero*/
-			if(!dw_dst->weight || dw_dst->weight == 0) dw_dst->weight = dw_src->weight;
-		}
-		/*free memory and return*/
-		free_bvhtree_from_mesh(&tree_mesh_src);
-		return 1;
-	}
-
-	/* mode 3 == replace selected weights*/
-	else if(mode == 3){
-		/* loop through the vertices and copy weight*/
-		for(i = 0; i < me_dst->totvert; i++, mv_dst++, dv_array_dst++){
-			/*reset nearest*/
-			nearest.index = -1;
-			nearest.dist = FLT_MAX;
-			/*transform into target space*/
-			mul_v3_m4v3(tmp_co, tmp_mat, mv_dst->co);
-			/*node tree accelerated search for closest vetex*/
-			BLI_bvhtree_find_nearest(tree_mesh_src.tree, tmp_co, &nearest, tree_mesh_src.nearest_callback, &tree_mesh_src);
-			dw_src = defvert_verify_index(dv_array_src[nearest.index], index_src);
-			dw_dst = defvert_verify_index(*dv_array_dst, index_dst);
-			/*dw_dst->weight= dw_src->weight;*//*TODO fix this*/
-		}
-
-		/*free memory and return*/
-		free_bvhtree_from_mesh(&tree_mesh_src);
-		return 1;
-	}
-	else return 0;
+	/*free memory and return*/
+	free_bvhtree_from_mesh(&tree_mesh_src);
+	return 1;
 }
 
-int ED_vgroup_transfer_weight_by_nearest_vertex_in_face_all(Object *ob_dst, Object *ob_src, short mode)
+int ED_vgroup_transfer_weight_by_nearest_vertex_in_face(Object *ob_dst, Object *ob_src, short mode, short option)
 {
-	ob_dst = ob_dst;
-	ob_src = ob_src;
-	return mode;
-}
-
-int ED_vgroup_transfer_weight_by_nearest_vertex_in_face_single(Object *ob_dst, Object *ob_src, short mode)
-{
 	bDeformGroup *dg_src, *dg_dst;
 	Mesh *me_dst;
 	DerivedMesh *dmesh_src;
@@ -653,6 +562,9 @@
 	int dv_tot_src, dv_tot_dst, i, index_dst, index_src;
 	float dist_v1, dist_v2, dist_v3, dist_v4, tmp_co[3], tmp_mat[4][4];
 
+	/*remove this:*/
+	option=option;
+
 	/*get source deform group*/
 	dg_src = BLI_findlink(&ob_src->defbase, (ob_src->actdef-1));
 
@@ -692,141 +604,55 @@
 	invert_m4_m4(ob_src->imat, ob_src->obmat);
 	mult_m4_m4m4(tmp_mat, ob_src->imat, ob_dst->obmat);
 
-	/* mode 1 == replace all weights*/
-	if(mode == 1){
-		/* loop through the vertices and copy weight from nearest weight*/
-		for(i = 0; i < me_dst->totvert; i++, mv_dst++, dv_array_dst++){
-			/*reset nearest*/
-			nearest.index = -1;
-			nearest.dist = FLT_MAX;
-			/*transform into target space*/
-			mul_v3_m4v3(tmp_co, tmp_mat, mv_dst->co);
-			/*node tree accelerated search for closest face*/
-			BLI_bvhtree_find_nearest(tree_mesh_faces_src.tree, tmp_co, &nearest, tree_mesh_faces_src.nearest_callback, &tree_mesh_faces_src);
-			/*get distances*/
-			dist_v1 = len_squared_v3v3(tmp_co, mv_src[mface_src[nearest.index].v1].co);
-			dist_v2 = len_squared_v3v3(tmp_co, mv_src[mface_src[nearest.index].v2].co);
-			dist_v3 = len_squared_v3v3(tmp_co, mv_src[mface_src[nearest.index].v3].co);
-			/*get weight from triangle*/
-			if(dist_v1 < dist_v2 && dist_v1 < dist_v3){
-				dw_src = defvert_verify_index(dv_array_src[mface_src[nearest.index].v1], index_src);
-			}
-			else if(dist_v2 < dist_v3){
-				dw_src = defvert_verify_index(dv_array_src[mface_src[nearest.index].v2], index_src);
-			}
-			else{
-				dw_src = defvert_verify_index(dv_array_src[mface_src[nearest.index].v3], index_src);
-			}
-			/*check for and get weight from quad*/
-			if(mface_src[nearest.index].v4){
-				dist_v4 = len_squared_v3v3(tmp_co, mv_src[mface_src[nearest.index].v4].co);
-				if(dist_v4 < dist_v1 && dist_v4 < dist_v2 && dist_v4 < dist_v3){
-					dw_src = defvert_verify_index(dv_array_src[mface_src[nearest.index].v4], index_src);
-				}
-			}
-			/*copy weight*/
-			dw_dst = defvert_verify_index(*dv_array_dst, index_dst);
-			dw_dst->weight = dw_src->weight;
-		}
-		/*free memory and return*/
-		free_bvhtree_from_mesh(&tree_mesh_faces_src);
-		return 1;
-	}

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list