[Bf-blender-cvs] [cb3c233ed3a] master: Cleanup: Return early

Hans Goudey noreply at git.blender.org
Fri Apr 15 23:44:30 CEST 2022


Commit: cb3c233ed3a5196269f0aa626ea20c7c8aeffebf
Author: Hans Goudey
Date:   Fri Apr 15 16:44:15 2022 -0500
Branches: master
https://developer.blender.org/rBcb3c233ed3a5196269f0aa626ea20c7c8aeffebf

Cleanup: Return early

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

M	source/blender/geometry/intern/mesh_merge_by_distance.cc

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

diff --git a/source/blender/geometry/intern/mesh_merge_by_distance.cc b/source/blender/geometry/intern/mesh_merge_by_distance.cc
index 6dc6271194b..5a4366f546d 100644
--- a/source/blender/geometry/intern/mesh_merge_by_distance.cc
+++ b/source/blender/geometry/intern/mesh_merge_by_distance.cc
@@ -830,133 +830,135 @@ static void weld_poly_split_recursive(Span<int> vert_dest_map,
                                       int *r_loop_kill)
 {
   int poly_len = r_wp->len;
-  if (poly_len > 3 && ctx_verts_len > 1) {
-    const int ctx_loops_len = r_wp->loops.len;
-    const int ctx_loops_ofs = r_wp->loops.ofs;
-    MutableSpan<WeldLoop> wloop = r_weld_mesh->wloop;
-    WeldPoly *wpoly_new = r_weld_mesh->wpoly_new;
-
-    int loop_kill = 0;
-
-    WeldLoop *poly_loops = &wloop[ctx_loops_ofs];
-    WeldLoop *wla = &poly_loops[0];
-    WeldLoop *wla_prev = &poly_loops[ctx_loops_len - 1];
-    while (wla_prev->flag == ELEM_COLLAPSED) {
-      wla_prev--;
-    }
-    const int la_len = ctx_loops_len - 1;
-    for (int la = 0; la < la_len; la++, wla++) {
-    wa_continue:
-      if (wla->flag == ELEM_COLLAPSED) {
-        continue;
-      }
-      int vert_a = wla->vert;
-      /* Only test vertices that will be merged. */
-      if (vert_dest_map[vert_a] != OUT_OF_CONTEXT) {
-        int lb = la + 1;
-        WeldLoop *wlb = wla + 1;
-        WeldLoop *wlb_prev = wla;
-        int killed_ab = 0;
-        ctx_verts_len = 1;
-        for (; lb < ctx_loops_len; lb++, wlb++) {
-          BLI_assert(wlb->loop_skip_to == OUT_OF_CONTEXT);
-          if (wlb->flag == ELEM_COLLAPSED) {
-            killed_ab++;
-            continue;
-          }
-          int vert_b = wlb->vert;
-          if (vert_dest_map[vert_b] != OUT_OF_CONTEXT) {
-            ctx_verts_len++;
+  if (poly_len < 3 || ctx_verts_len < 1) {
+    return;
+  }
+  
+  const int ctx_loops_len = r_wp->loops.len;
+  const int ctx_loops_ofs = r_wp->loops.ofs;
+  MutableSpan<WeldLoop> wloop = r_weld_mesh->wloop;
+  WeldPoly *wpoly_new = r_weld_mesh->wpoly_new;
+
+  int loop_kill = 0;
+
+  WeldLoop *poly_loops = &wloop[ctx_loops_ofs];
+  WeldLoop *wla = &poly_loops[0];
+  WeldLoop *wla_prev = &poly_loops[ctx_loops_len - 1];
+  while (wla_prev->flag == ELEM_COLLAPSED) {
+    wla_prev--;
+  }
+  const int la_len = ctx_loops_len - 1;
+  for (int la = 0; la < la_len; la++, wla++) {
+  wa_continue:
+    if (wla->flag == ELEM_COLLAPSED) {
+      continue;
+    }
+    int vert_a = wla->vert;
+    /* Only test vertices that will be merged. */
+    if (vert_dest_map[vert_a] != OUT_OF_CONTEXT) {
+      int lb = la + 1;
+      WeldLoop *wlb = wla + 1;
+      WeldLoop *wlb_prev = wla;
+      int killed_ab = 0;
+      ctx_verts_len = 1;
+      for (; lb < ctx_loops_len; lb++, wlb++) {
+        BLI_assert(wlb->loop_skip_to == OUT_OF_CONTEXT);
+        if (wlb->flag == ELEM_COLLAPSED) {
+          killed_ab++;
+          continue;
+        }
+        int vert_b = wlb->vert;
+        if (vert_dest_map[vert_b] != OUT_OF_CONTEXT) {
+          ctx_verts_len++;
+        }
+        if (vert_a == vert_b) {
+          const int dist_a = wlb->loop_orig - wla->loop_orig - killed_ab;
+          const int dist_b = poly_len - dist_a;
+
+          BLI_assert(dist_a != 0 && dist_b != 0);
+          if (dist_a == 1 || dist_b == 1) {
+            BLI_assert(dist_a != dist_b);
+            BLI_assert((wla->flag == ELEM_COLLAPSED) || (wlb->flag == ELEM_COLLAPSED));
           }
-          if (vert_a == vert_b) {
-            const int dist_a = wlb->loop_orig - wla->loop_orig - killed_ab;
-            const int dist_b = poly_len - dist_a;
-
-            BLI_assert(dist_a != 0 && dist_b != 0);
-            if (dist_a == 1 || dist_b == 1) {
-              BLI_assert(dist_a != dist_b);
-              BLI_assert((wla->flag == ELEM_COLLAPSED) || (wlb->flag == ELEM_COLLAPSED));
+          else {
+            WeldLoop *wl_tmp = nullptr;
+            if (dist_a == 2) {
+              wl_tmp = wlb_prev;
+              BLI_assert(wla->flag != ELEM_COLLAPSED);
+              BLI_assert(wl_tmp->flag != ELEM_COLLAPSED);
+              wla->flag = ELEM_COLLAPSED;
+              wl_tmp->flag = ELEM_COLLAPSED;
+              loop_kill += 2;
+              poly_len -= 2;
             }
-            else {
-              WeldLoop *wl_tmp = nullptr;
-              if (dist_a == 2) {
-                wl_tmp = wlb_prev;
-                BLI_assert(wla->flag != ELEM_COLLAPSED);
+            if (dist_b == 2) {
+              if (wl_tmp != nullptr) {
+                r_wp->flag = ELEM_COLLAPSED;
+                *r_poly_kill += 1;
+              }
+              else {
+                wl_tmp = wla_prev;
+                BLI_assert(wlb->flag != ELEM_COLLAPSED);
                 BLI_assert(wl_tmp->flag != ELEM_COLLAPSED);
-                wla->flag = ELEM_COLLAPSED;
+                wlb->flag = ELEM_COLLAPSED;
                 wl_tmp->flag = ELEM_COLLAPSED;
-                loop_kill += 2;
-                poly_len -= 2;
-              }
-              if (dist_b == 2) {
-                if (wl_tmp != nullptr) {
-                  r_wp->flag = ELEM_COLLAPSED;
-                  *r_poly_kill += 1;
-                }
-                else {
-                  wl_tmp = wla_prev;
-                  BLI_assert(wlb->flag != ELEM_COLLAPSED);
-                  BLI_assert(wl_tmp->flag != ELEM_COLLAPSED);
-                  wlb->flag = ELEM_COLLAPSED;
-                  wl_tmp->flag = ELEM_COLLAPSED;
-                }
-                loop_kill += 2;
-                poly_len -= 2;
               }
-              if (wl_tmp == nullptr) {
-                const int new_loops_len = lb - la;
-                const int new_loops_ofs = ctx_loops_ofs + la;
-
-                WeldPoly *new_wp = &wpoly_new[r_weld_mesh->wpoly_new_len++];
-                new_wp->poly_dst = OUT_OF_CONTEXT;
-                new_wp->poly_orig = r_wp->poly_orig;
-                new_wp->loops.len = new_loops_len;
-                new_wp->loops.ofs = new_loops_ofs;
-                new_wp->loop_start = wla->loop_orig;
-                new_wp->loop_end = wlb_prev->loop_orig;
-                new_wp->len = dist_a;
-                weld_poly_split_recursive(vert_dest_map,
+              loop_kill += 2;
+              poly_len -= 2;
+            }
+            if (wl_tmp == nullptr) {
+              const int new_loops_len = lb - la;
+              const int new_loops_ofs = ctx_loops_ofs + la;
+
+              WeldPoly *new_wp = &wpoly_new[r_weld_mesh->wpoly_new_len++];
+              new_wp->poly_dst = OUT_OF_CONTEXT;
+              new_wp->poly_orig = r_wp->poly_orig;
+              new_wp->loops.len = new_loops_len;
+              new_wp->loops.ofs = new_loops_ofs;
+              new_wp->loop_start = wla->loop_orig;
+              new_wp->loop_end = wlb_prev->loop_orig;
+              new_wp->len = dist_a;
+              weld_poly_split_recursive(vert_dest_map,
 #ifdef USE_WELD_DEBUG
-                                          mloop,
+                                        mloop,
 #endif
-                                          ctx_verts_len,
-                                          new_wp,
-                                          r_weld_mesh,
-                                          r_poly_kill,
-                                          r_loop_kill);
-                BLI_assert(dist_b == poly_len - dist_a);
-                poly_len = dist_b;
-                if (wla_prev->loop_orig > wla->loop_orig) {
-                  /* New start. */
-                  r_wp->loop_start = wlb->loop_orig;
-                }
-                else {
-                  /* The `loop_start` doesn't change but some loops must be skipped. */
-                  wla_prev->loop_skip_to = wlb->loop_orig;
-                }
-                wla = wlb;
-                la = lb;
-                goto wa_continue;
+                                        ctx_verts_len,
+                                        new_wp,
+                                        r_weld_mesh,
+                                        r_poly_kill,
+                                        r_loop_kill);
+              BLI_assert(dist_b == poly_len - dist_a);
+              poly_len = dist_b;
+              if (wla_prev->loop_orig > wla->loop_orig) {
+                /* New start. */
+                r_wp->loop_start = wlb->loop_orig;
               }
-              break;
+              else {
+                /* The `loop_start` doesn't change but some loops must be skipped. */
+                wla_prev->loop_skip_to = wlb->loop_orig;
+              }
+              wla = wlb;
+              la = lb;
+              goto wa_continue;
             }
-          }
-          if (wlb->flag != ELEM_COLLAPSED) {
-            wlb_prev = wlb;
+            break;
           }
         }
+        if (wlb->flag != ELEM_COLLAPSED) {
+          wlb_prev = wlb;
+        }
       }
-      if (wla->flag != ELEM_COLLAPSED) {
-        wla_prev = wla;
-      }
     }
-    r_wp->len = poly_len;
-    *r_loop_kill += loop_kill;
+    if (wla->flag != ELEM_COLLAPSED) {
+      wla_prev = wla;
+    }
+  }
+  r_wp->len = poly_len;
+  *r_loop_kill += loop_kill;
 
 #ifdef USE_WELD_DEBUG
-    weld_assert_poly_no_vert_repetition(*r_wp, wloop, mloop, r_weld_mesh->loop_map);
+  weld_assert_poly_no_vert_repetition(*r_wp, wloop, mloop, r_weld_mesh->loop_map);
 #endif
-  }
 }
 
 static void weld_poly_loop_ctx_setup(Span<MLoop> mloop,



More information about the Bf-blender-cvs mailing list