[Bf-blender-cvs] [2c61729764e] soc-2018-npr: More work on radi insertion

Sebastian Parborg noreply at git.blender.org
Fri Aug 10 11:14:28 CEST 2018


Commit: 2c61729764e2d81eb29c36ac59197d01226b2e77
Author: Sebastian Parborg
Date:   Thu Aug 9 22:38:21 2018 +0200
Branches: soc-2018-npr
https://developer.blender.org/rB2c61729764e2d81eb29c36ac59197d01226b2e77

More work on radi insertion

===================================================================

M	source/blender/modifiers/intern/MOD_mybmesh.c

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_mybmesh.c b/source/blender/modifiers/intern/MOD_mybmesh.c
index 6468ffd7c49..f86bedac34c 100644
--- a/source/blender/modifiers/intern/MOD_mybmesh.c
+++ b/source/blender/modifiers/intern/MOD_mybmesh.c
@@ -2149,7 +2149,7 @@ static bool poke_and_move(BMFace *f, const float new_pos[3], const float du[3],
 	return true;
 }
 
-static void mult_radi_search( BLI_Buffer *diff_f, const float cent[3], const float edge1_mid[3], const float edge2_mid[3],
+static void mult_radi_search( BLI_Buffer *diff_f, const float no[3], const float edge1_mid[3], const float edge2_mid[3],
 							const float val_1, const float val_2, bool is_B,
 							const float rad_plane_no[3], const float C_vert_pos[3], BMFace *poke_face, MeshData *m_d ){
 	//Try to find a vert that is connected to both faces
@@ -2170,38 +2170,33 @@ static void mult_radi_search( BLI_Buffer *diff_f, const float cent[3], const flo
 
 	//Find the faces for our three points
 	{
-		float uvs[3][2];
-		BMFace *face_ids[3];
-		float rad_dir[3];
-		int search_id;
+		float uvs[2][2];
+		BMFace *face_ids[2];
+		float rad_dir[2];
+		float mat[3][3];
 
-		rad_dir[1] = signf(val_1);
-		rad_dir[2] = signf(val_2);
+		axis_dominant_v3_to_m3(mat, no);
+		rad_dir[0] = signf(val_1);
+		rad_dir[1] = signf(val_2);
 
 		for (int face_idx = 0; face_idx < search_faces.count; face_idx++) {
 			int found_points = 0;
-			for (int i = 0; i < 3; i++) {
+			for (int i = 0; i < 2; i++) {
 				float point[3];
-				float mat[3][3];
 
 				switch(i){
 					case 1 :
-						copy_v3_v3(point, edge1_mid);
-						break;
-					case 2 :
 						copy_v3_v3(point, edge2_mid);
 						break;
 					default:
-						copy_v3_v3(point, cent);
+						copy_v3_v3(point, edge1_mid);
 						break;
 				}
 
 				BMFace *f = BLI_buffer_at(&search_faces, BMFace*, face_idx);
-				axis_dominant_v3_to_m3(mat, f->no);
 
 				if( point_inside(mat, point, f) ){
 					float point_v2[2];
-					float P[3], du[3], dv[3], temp[3];
 
 					mul_v2_m3v3(point_v2, mat, point);
 
@@ -2209,25 +2204,13 @@ static void mult_radi_search( BLI_Buffer *diff_f, const float cent[3], const flo
 
 					face_ids[i] = f;
 					found_points++;
-					if( i == 0 ){
-						//Save rad_dir for cent
-						m_d->eval->evaluateLimit(m_d->eval, BM_elem_index_get(f), uvs[i][0], uvs[i][1], P, du, dv);
-
-						sub_v3_v3v3(temp, P, C_vert_pos);
-						rad_dir[i] = signf(dot_v3v3(rad_plane_no, temp));
-					}
 				}
 			}
-			if (found_points == 3){
+			if (found_points == 2){
 				//We have found all points inside the same face!
 				break;
 			}
 		}
-		if( rad_dir[0] == rad_dir[1] ){
-			search_id = 2;
-		} else {
-			search_id = 1;
-		}
 
 		{
 			float search_val, uv_P[2], P[3], du[3], dv[3], temp[3];
@@ -2245,13 +2228,13 @@ static void mult_radi_search( BLI_Buffer *diff_f, const float cent[3], const flo
 			   print_v2("UV_edge1", uvs[1]);
 			   print_v2("UV_edge2", uvs[2]);
 			   */
-			if( face_ids[0] == face_ids[search_id] ){
+			if( face_ids[0] == face_ids[1] ){
 				//We can work in pure uv space
 				//printf("UV space\n");
 				orig_face = face_ids[0];
 				face_index = BM_elem_index_get(face_ids[0]);
 				for(int i = 0; i < 10; i++ ){
-					interp_v2_v2v2( uv_P, uvs[0], uvs[search_id], step);
+					interp_v2_v2v2( uv_P, uvs[0], uvs[1], step);
 					m_d->eval->evaluateLimit(m_d->eval, face_index, uv_P[0], uv_P[1], P, du, dv);
 
 					sub_v3_v3v3(temp, P, C_vert_pos);
@@ -2275,22 +2258,15 @@ static void mult_radi_search( BLI_Buffer *diff_f, const float cent[3], const flo
 				}
 			} else {
 				//Work in coord space
-				float cur_p[3], end[3];
-				float mat[3][3];
+				float cur_p[3];
 
 				//printf("Coord space\n");
-				if( search_id == 1 ){
-					copy_v3_v3(end, edge1_mid);
-				} else {
-					copy_v3_v3(end, edge2_mid);
-				}
 
 				for(int i = 0; i < 10; i++ ){
-					interp_v3_v3v3(cur_p, cent, end, step);
+					interp_v3_v3v3(cur_p, edge1_mid, edge2_mid, step);
 
 					for (int face_idx = 0; face_idx < search_faces.count; face_idx++) {
 						BMFace *f = BLI_buffer_at(&search_faces, BMFace*, face_idx);
-						axis_dominant_v3_to_m3(mat, f->no);
 						if( point_inside(mat, cur_p, f) ){
 							float point_v2[2];
 							mul_v2_m3v3(point_v2, mat, cur_p);
@@ -2496,7 +2472,6 @@ static void radial_insertion( MeshData *m_d ){
 					}
 
 					//This search will spawn multiple faces, we must use coordinate space to do this.
-					float cent[3];
 					float edge1_mid[3];
 					float edge2_mid[3];
 					//We need to figure out which facing the radial edge is supposed to have so we can
@@ -2514,10 +2489,9 @@ static void radial_insertion( MeshData *m_d ){
 
 					interp_v3_v3v3(edge1_mid, co_arr[CC_idx], co_arr[ mod_i(CC_idx-1, 3) ], 0.5f);
 					interp_v3_v3v3(edge2_mid, co_arr[CC_idx], co_arr[ mod_i(CC_idx+1, 3) ], 0.5f);
-					mid_v3_v3v3v3(cent, co_arr[0], co_arr[1], co_arr[2]);
 
 					//printf("Diff faces\n");
-					mult_radi_search(&faces, cent, edge1_mid, edge2_mid, val_1, val_2, is_B, rad_plane_no, co_arr[CC_idx], f, m_d);
+					mult_radi_search(&faces, vert->no, edge1_mid, edge2_mid, val_1, val_2, is_B, rad_plane_no, co_arr[CC_idx], f, m_d);
 					BLI_buffer_free(&faces);
 				}



More information about the Bf-blender-cvs mailing list