[Bf-blender-cvs] [13b04dec48e] temp-T97352-3d-texturing-seam-bleeding-b2: renamed FanSegment => InnerEdge

Jeroen Bakker noreply at git.blender.org
Fri Jun 17 15:06:52 CEST 2022


Commit: 13b04dec48ef24829e7db6416cf1f0eb720aabae
Author: Jeroen Bakker
Date:   Fri Jun 17 12:42:21 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rB13b04dec48ef24829e7db6416cf1f0eb720aabae

renamed FanSegment => InnerEdge

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

M	source/blender/blenkernel/intern/uv_islands.cc

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

diff --git a/source/blender/blenkernel/intern/uv_islands.cc b/source/blender/blenkernel/intern/uv_islands.cc
index dbe0c546170..b123efe0f27 100644
--- a/source/blender/blenkernel/intern/uv_islands.cc
+++ b/source/blender/blenkernel/intern/uv_islands.cc
@@ -68,7 +68,8 @@ static std::optional<UVBorderCorner> sharpest_border_corner(UVIsland &island)
   return result;
 }
 
-struct FanSegment {
+/** The inner edge of a fan. */
+struct InnerEdge {
   MeshPrimitive *primitive;
   /* UVs order are already applied. So uvs[0] mathes primitive->vertices[vert_order[0]]/ */
   float2 uvs[3];
@@ -76,13 +77,11 @@ struct FanSegment {
 
   struct {
     bool found : 1;
-    bool should_be_added : 1;
   } flags;
 
-  FanSegment(MeshPrimitive *primitive, MeshVertex *vertex) : primitive(primitive)
+  InnerEdge(MeshPrimitive *primitive, MeshVertex *vertex) : primitive(primitive)
   {
     flags.found = false;
-    flags.should_be_added = false;
 
     /* Reorder so the first edge starts with the given vertex. */
     if (primitive->vertices[1].vertex == vertex) {
@@ -107,7 +106,7 @@ struct FanSegment {
 // TODO: should have InnerEdges and Primitives to reduce complexity in algorithm
 struct Fan {
   /* Blades of the fan. */
-  Vector<FanSegment> segments;
+  Vector<InnerEdge> inner_edges;
 
   Fan(MeshVertex &vertex)
   {
@@ -128,13 +127,17 @@ struct Fan {
           if (edge == current_edge || (edge->vert1 != &vertex && edge->vert2 != &vertex)) {
             continue;
           }
-          segments.append(FanSegment(other, &vertex));
+          inner_edges.append(InnerEdge(other, &vertex));
           current_edge = edge;
           previous_primitive = other;
           stop = true;
           break;
         }
       }
+      if (stop == false) {
+        printf("unknown how to create the fan for vert %lld\n", vertex.v);
+        break;
+      }
       if (stop_primitive == previous_primitive) {
         break;
       }
@@ -144,8 +147,8 @@ struct Fan {
   int count_num_to_add() const
   {
     int result = 0;
-    for (const FanSegment &segment : segments) {
-      if (!segment.flags.found) {
+    for (const InnerEdge &fan_edge : inner_edges) {
+      if (!fan_edge.flags.found) {
         result++;
       }
     }
@@ -154,15 +157,15 @@ struct Fan {
 
   void mark_already_added_segments(const UVVertex &uv_vertex)
   {
-    for (FanSegment &segment : segments) {
-      segment.flags.found = false;
-      const MeshVertex *v0 = segment.primitive->vertices[segment.vert_order[0]].vertex;
-      const MeshVertex *v1 = segment.primitive->vertices[segment.vert_order[1]].vertex;
+    for (InnerEdge &fan_edge : inner_edges) {
+      fan_edge.flags.found = false;
+      const MeshVertex *v0 = fan_edge.primitive->vertices[fan_edge.vert_order[0]].vertex;
+      const MeshVertex *v1 = fan_edge.primitive->vertices[fan_edge.vert_order[1]].vertex;
       for (const UVEdge *edge : uv_vertex.uv_edges) {
         const MeshVertex *e0 = edge->vertices[0]->vertex;
         const MeshVertex *e1 = edge->vertices[1]->vertex;
         if ((e0 == v0 && e1 == v1) || (e0 == v1 && e1 == v0)) {
-          segment.flags.found = true;
+          fan_edge.flags.found = true;
           break;
         }
       }
@@ -171,18 +174,18 @@ struct Fan {
 
   void init_uv_coordinates(UVVertex &uv_vertex, const UVIsland &island)
   {
-    for (FanSegment &segment : segments) {
-      int2 test_edge = int2(segment.primitive->vertices[segment.vert_order[0]].vertex->v,
-                            segment.primitive->vertices[segment.vert_order[1]].vertex->v);
+    for (InnerEdge &fan_edge : inner_edges) {
+      int2 test_edge = int2(fan_edge.primitive->vertices[fan_edge.vert_order[0]].vertex->v,
+                            fan_edge.primitive->vertices[fan_edge.vert_order[1]].vertex->v);
       for (const UVPrimitive &uv_primitive : island.uv_primitives) {
         for (UVEdge *edge : uv_primitive.edges) {
           int2 o(edge->vertices[0]->vertex->v, edge->vertices[1]->vertex->v);
           if ((test_edge.x == o.x && test_edge.y == o.y) ||
               (test_edge.x == o.y && test_edge.y == o.x)) {
-            segment.uvs[0] = uv_vertex.uv;
+            fan_edge.uvs[0] = uv_vertex.uv;
             for (int i = 0; i < 2; i++) {
               if (edge->vertices[i]->uv == uv_vertex.uv) {
-                segment.uvs[1] = edge->vertices[1 - i]->uv;
+                fan_edge.uvs[1] = edge->vertices[1 - i]->uv;
                 break;
               }
             }
@@ -191,24 +194,24 @@ struct Fan {
       }
     }
 
-    segments.last().uvs[2] = segments.first().uvs[1];
-    for (int i = 0; i < segments.size() - 1; i++) {
-      segments[i].uvs[2] = segments[i + 1].uvs[1];
+    inner_edges.last().uvs[2] = inner_edges.first().uvs[1];
+    for (int i = 0; i < inner_edges.size() - 1; i++) {
+      inner_edges[i].uvs[2] = inner_edges[i + 1].uvs[1];
     }
   }
 };
 
 static void print(const Fan &fan)
 {
-  for (const FanSegment &segment : fan.segments) {
+  for (const InnerEdge &fan_edge : fan.inner_edges) {
     for (int i = 0; i < 3; i++) {
-      int vert_index = segment.vert_order[i];
+      int vert_index = fan_edge.vert_order[i];
       printf("%lld(%f,%f) ",
-             segment.primitive->vertices[vert_index].vertex->v,
-             segment.uvs[i].x,
-             segment.uvs[i].y);
+             fan_edge.primitive->vertices[vert_index].vertex->v,
+             fan_edge.uvs[i].x,
+             fan_edge.uvs[i].y);
     }
-    printf(" %d\n", segment.flags.found);
+    printf(" %d\n", fan_edge.flags.found);
   }
 }
 
@@ -398,7 +401,7 @@ static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, const MeshD
       float2 new_uv = corner.uv(factor);
 
       // Find an segment that contains the 'current edge'.
-      for (FanSegment &segment : fan.segments) {
+      for (InnerEdge &segment : fan.inner_edges) {
         if (segment.flags.found) {
           continue;
         }



More information about the Bf-blender-cvs mailing list