[Bf-blender-cvs] [3d70805a686] sculpt-dev: Sculpt Poly Loop: Improve loop direction detection

Pablo Dobarro noreply at git.blender.org
Wed Mar 17 01:53:21 CET 2021


Commit: 3d70805a6862a31a6cc51cf7b2db298cd98bcc17
Author: Pablo Dobarro
Date:   Wed Mar 17 01:39:08 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB3d70805a6862a31a6cc51cf7b2db298cd98bcc17

Sculpt Poly Loop: Improve loop direction detection

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

M	source/blender/editors/sculpt_paint/sculpt_poly_loop.c

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

diff --git a/source/blender/editors/sculpt_paint/sculpt_poly_loop.c b/source/blender/editors/sculpt_paint/sculpt_poly_loop.c
index e453e1c5b46..ecb166a963a 100644
--- a/source/blender/editors/sculpt_paint/sculpt_poly_loop.c
+++ b/source/blender/editors/sculpt_paint/sculpt_poly_loop.c
@@ -97,8 +97,6 @@ static EnumPropertyItem prop_sculpt_face_set_by_topology[] = {
 };
 
 
-
-
 #define SCULPT_FACE_SET_LOOP_STEP_NONE -1
 static bool sculpt_poly_loop_step(SculptSession *ss, const int from_poly, const int edge, int *r_next_poly) {
    if (!ss->epmap) {
@@ -141,6 +139,8 @@ static int sculpt_poly_loop_initial_edge_from_cursor(Object *ob) {
   SculptSession *ss = ob->sculpt;
   Mesh *mesh = BKE_object_get_original_mesh(ob);
 
+  float *location = ss->cursor_location;
+
   MVert *mvert = SCULPT_mesh_deformed_mverts_get(ss);
   MPoly *initial_poly = &mesh->mpoly[ss->active_face_index];
 
@@ -148,26 +148,24 @@ static int sculpt_poly_loop_initial_edge_from_cursor(Object *ob) {
     return 0;
   }
 
-  int closest_vert_index = mesh->mloop[initial_poly->loopstart].v;
+  int closest_vert = mesh->mloop[initial_poly->loopstart].v;
   for (int i = 0; i < initial_poly->totloop; i++) {
-    if (len_squared_v3v3(mvert[ss->mloop[initial_poly->loopstart + i].v].co, ss->cursor_location) < len_squared_v3v3(mvert[closest_vert_index].co, ss->cursor_location)) {
-      closest_vert_index = ss->mloop[initial_poly->loopstart + i].v;
+    if (len_squared_v3v3(mvert[ss->mloop[initial_poly->loopstart + i].v].co, location) < len_squared_v3v3(mvert[closest_vert].co, location)) {
+      closest_vert = ss->mloop[initial_poly->loopstart + i].v;
     }
   }
 
-  int initial_edge_index = ss->vemap[closest_vert_index].indices[0];
-  int closest_vert_on_initial_edge_index = mesh->medge[initial_edge_index].v1 == closest_vert_index ? mesh->medge[initial_edge_index].v2 : mesh->medge[initial_edge_index].v1;
-  for (int i = 0; i < ss->vemap[closest_vert_index].count; i++) {
-    const int edge_index = ss->vemap[closest_vert_index].indices[i];
-    const int other_vert = mesh->medge[edge_index].v1 == closest_vert_index ? mesh->medge[edge_index].v2 : mesh->medge[edge_index].v1;
-    if (len_squared_v3v3(mvert[other_vert].co, ss->cursor_location) < len_squared_v3v3(mvert[closest_vert_on_initial_edge_index].co, ss->cursor_location)) {
-      initial_edge_index = edge_index;
-      closest_vert_on_initial_edge_index = other_vert;
+  int initial_edge = ss->vemap[closest_vert].indices[0];
+  int closest_vert_on_initial_edge = mesh->medge[initial_edge].v1 == closest_vert ? mesh->medge[initial_edge].v2 : mesh->medge[initial_edge].v1;
+  for (int i = 0; i < ss->vemap[closest_vert].count; i++) {
+    const int edge_index = ss->vemap[closest_vert].indices[i];
+    const int other_vert = mesh->medge[edge_index].v1 == closest_vert ? mesh->medge[edge_index].v2 : mesh->medge[edge_index].v1;
+    if (dist_to_line_segment_v3(location, mvert[closest_vert].co, mvert[other_vert].co) < dist_to_line_segment_v3(location, mvert[closest_vert].co, mvert[closest_vert_on_initial_edge].co)) {
+      initial_edge = edge_index;
+      closest_vert_on_initial_edge = other_vert;
     }
   }
-  printf("CLOSEST VERT INDEX %d\n", closest_vert_index);
-  printf("INITIAL EDGE INDEX %d\n", initial_edge_index);
-  return initial_edge_index;
+  return initial_edge;
 }
 
 static void sculpt_poly_loop_topology_data_ensure(Object *ob) {



More information about the Bf-blender-cvs mailing list