Commit: ab2ace99a7b6d264aa16d571768a857cf238520c
Author: Jeroen Bakker
Date:   Tue Jul 5 13:08:29 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rBab2ace99a7b6d264aa16d571768a857cf238520c

Use vertex lookup to lookup edges as well.

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

M       source/blender/blenkernel/BKE_uv_islands.hh

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

diff --git a/source/blender/blenkernel/BKE_uv_islands.hh 
b/source/blender/blenkernel/BKE_uv_islands.hh
index 27172e7ed40..c60f1e08c90 100644
--- a/source/blender/blenkernel/BKE_uv_islands.hh
+++ b/source/blender/blenkernel/BKE_uv_islands.hh
@@ -9,7 +9,7 @@
 #include "BLI_array.hh"
 #include "BLI_edgehash.h"
 #include "BLI_float3x3.hh"
-#include "BLI_kdtree.h"
+#include "BLI_map.hh"
 #include "BLI_math.h"
 #include "BLI_math_vec_types.hh"
 #include "BLI_rect.h"
@@ -644,30 +644,13 @@ struct UVIsland {
    * be completely encapsulated by another one.
    */
   Vector<UVBorder> borders;
-  KDTree_2d *uv_vertex_lookup;
+  Map<int64_t, Vector<UVVertex *>> uv_vertex_lookup;
 
   UVIsland()
   {
     uv_vertices.reserve(100000);
     uv_edges.reserve(100000);
     uv_primitives.reserve(100000);
-    uv_vertex_lookup = BLI_kdtree_2d_new(uv_vertices.capacity());
-    BLI_kdtree_2d_balance(uv_vertex_lookup);
-  }
-
-  UVIsland(UVIsland &&other)
-  {
-    uv_vertices = std::move(other.uv_vertices);
-    uv_edges = std::move(other.uv_edges);
-    uv_primitives = std::move(other.uv_primitives);
-    borders = std::move(other.borders);
-    uv_vertex_lookup = other.uv_vertex_lookup;
-    other.uv_vertex_lookup = nullptr;
-  }
-
-  ~UVIsland()
-  {
-    BLI_kdtree_2d_free(uv_vertex_lookup);
   }
 
   UVPrimitive *add_primitive(MeshPrimitive &primitive)
@@ -689,39 +672,30 @@ struct UVIsland {
     return uv_primitive_ptr;
   }
 
-  UVVertex *lookup_or_create(const UVVertex &vertex)
+  UVVertex *lookup(const UVVertex &vertex)
   {
-    struct CallbackData {
-      UVVertex *found_vertex;
-      const UVVertex &vertex;
-      Vector<UVVertex> &uv_vertices;
-    } callback_data = {nullptr, vertex, uv_vertices};
-    BLI_kdtree_2d_range_search_cb(
-        uv_vertex_lookup,
-        vertex.uv,
-        0.0001f,
-        [](void *user_data, int index, const float *UNUSED(co), float 
UNUSED(dist_sq)) {
-          CallbackData *data = static_cast<CallbackData *>(user_data);
-          UVVertex &vertex = data->uv_vertices[index];
-          if (vertex.uv == data->vertex.uv && vertex.vertex == 
data->vertex.vertex) {
-            data->found_vertex = &vertex;
-            return false;
-          }
-
-          return true;
-        },
-        static_cast<void *>(&callback_data));
+    int64_t vert_index = vertex.vertex->v;
+    Vector<UVVertex *> &vertices = 
uv_vertex_lookup.lookup_or_add_default(vert_index);
+    for (UVVertex *v : vertices) {
+      if (v->uv == vertex.uv) {
+        return v;
+      }
+    }
+    return nullptr;
+  }
 
-    if (callback_data.found_vertex != nullptr) {
-      return callback_data.found_vertex;
+  UVVertex *lookup_or_create(const UVVertex &vertex)
+  {
+    UVVertex *found_vertex = lookup(vertex);
+    if (found_vertex != nullptr) {
+      return found_vertex;
     }
 
-    int64_t vert_index = uv_vertices.size();
-    BLI_kdtree_2d_insert(uv_vertex_lookup, vert_index, vertex.uv);
-    BLI_kdtree_2d_balance(uv_vertex_lookup);
     uv_vertices.append(vertex);
     UVVertex *result = &uv_vertices.last();
     result->uv_edges.clear();
+    /* v is already a key. Ensured by UVIsland::lookup in this method. */
+    uv_vertex_lookup.lookup(vertex.vertex->v).append(result);
     return result;
   }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to