Commit: 6f7c3f40c3f8bcd84f22dae69fd67a4eb72acb86 Author: Jeroen Bakker Date: Tue Jun 7 09:25:32 2022 +0200 Branches: temp-T97352-3d-texturing-seam-bleeding-b2 https://developer.blender.org/rB6f7c3f40c3f8bcd84f22dae69fd67a4eb72acb86
Let Bordervert point to uvvertex. =================================================================== M source/blender/blenkernel/BKE_uv_islands.hh M source/blender/blenkernel/intern/uv_islands.cc =================================================================== diff --git a/source/blender/blenkernel/BKE_uv_islands.hh b/source/blender/blenkernel/BKE_uv_islands.hh index ec9cf65af66..b90fee409bb 100644 --- a/source/blender/blenkernel/BKE_uv_islands.hh +++ b/source/blender/blenkernel/BKE_uv_islands.hh @@ -262,10 +262,7 @@ struct UVPrimitive { }; struct UVBorderVert { - float2 uv; - - /* Index of this vert in the vertices of the original mesh. */ - MeshVertex *vertex; + UVVertex *uv_vertex; /* Indexes of connected border verts. */ int64_t index; @@ -273,15 +270,12 @@ struct UVBorderVert { int64_t next_index; int64_t border_index; - /** Index of the uv primitive (UVIsland) */ - int64_t uv_primitive_index; - struct { /** Should this vertex still be checked when performing extension. */ bool extendable : 1; } flags; - explicit UVBorderVert(float2 &uv, MeshVertex *vertex) : uv(uv), vertex(vertex) + explicit UVBorderVert(UVVertex *uv_vertex) : uv_vertex(uv_vertex) { flags.extendable = true; } diff --git a/source/blender/blenkernel/intern/uv_islands.cc b/source/blender/blenkernel/intern/uv_islands.cc index 6d592d84f2c..ce66658e757 100644 --- a/source/blender/blenkernel/intern/uv_islands.cc +++ b/source/blender/blenkernel/intern/uv_islands.cc @@ -37,8 +37,8 @@ void UVIsland::extract_border() starting_border_edge->tag = true; float2 first_uv = starting_border_edge->edge->vertices[0]->uv; float2 current_uv = starting_border_edge->edge->vertices[1]->uv; - MeshVertex *current_vert = starting_border_edge->edge->vertices[1]->vertex; - border.verts.append(UVBorderVert(first_uv, starting_border_edge->edge->vertices[0]->vertex)); + UVVertex *current_vert = starting_border_edge->edge->vertices[1]; + border.verts.append(UVBorderVert(starting_border_edge->edge->vertices[0])); while (current_uv != first_uv) { for (UVBorderEdge &border_edge : edges) { if (border_edge.tag == true) { @@ -47,9 +47,9 @@ void UVIsland::extract_border() int i; for (i = 0; i < 2; i++) { if (border_edge.edge->vertices[i]->uv == current_uv) { - border.verts.append(UVBorderVert(current_uv, current_vert)); + border.verts.append(UVBorderVert(current_vert)); current_uv = border_edge.edge->vertices[1 - i]->uv; - current_vert = border_edge.edge->vertices[1 - i]->vertex; + current_vert = border_edge.edge->vertices[1 - i]; border_edge.tag = true; break; } @@ -95,7 +95,7 @@ static UVBorderVert *sharpest_border_vert(UVIsland &island) return result; } -struct FanTri { +struct FanSegment { MeshPrimitive *primitive; /* UVs order are already applied. So uvs[0] mathes primitive->vertices[vert_order[0]]/ */ float2 uvs[3]; @@ -106,7 +106,7 @@ struct FanTri { bool should_be_added : 1; } flags; - FanTri(MeshPrimitive *primitive, MeshVertex *vertex) : primitive(primitive) + FanSegment(MeshPrimitive *primitive, MeshVertex *vertex) : primitive(primitive) { flags.found = false; flags.should_be_added = false; @@ -133,7 +133,7 @@ struct FanTri { struct Fan { /* Blades of the fan. */ - Vector<FanTri> segments; + Vector<FanSegment> segments; Fan(MeshVertex &vertex) { @@ -154,7 +154,7 @@ struct Fan { if (edge == current_edge || (edge->vert1 != &vertex && edge->vert2 != &vertex)) { continue; } - segments.append(FanTri(other, &vertex)); + segments.append(FanSegment(other, &vertex)); current_edge = edge; previous_primitive = other; stop = true; @@ -170,7 +170,7 @@ struct Fan { void init_uv_coordinates(UVBorderVert &vert, const UVIsland &island) { - for (FanTri &segment : segments) { + 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 (const UVPrimitive &uv_primitive : island.uv_primitives) { @@ -178,9 +178,9 @@ struct Fan { 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] = vert.uv; + segment.uvs[0] = vert.uv_vertex->uv; for (int i = 0; i < 2; i++) { - if (edge->vertices[i]->uv == vert.uv) { + if (edge->vertices[i]->uv == vert.uv_vertex->uv) { segment.uvs[1] = edge->vertices[1 - i]->uv; break; } @@ -199,7 +199,7 @@ struct Fan { static void print(const Fan &fan) { - for (const FanTri &segment : fan.segments) { + for (const FanSegment &segment : fan.segments) { for (int i = 0; i < 3; i++) { int vert_index = segment.vert_order[i]; printf("%lld(%f,%f) ", @@ -213,7 +213,7 @@ static void print(const Fan &fan) static void extend_at_vert(UVIsland &island, UVBorderVert &vert, const MeshData &mesh_data) { - Fan fan(*vert.vertex); + Fan fan(*vert.uv_vertex->vertex); print(fan); fan.init_uv_coordinates(vert, island); print(fan); @@ -368,7 +368,7 @@ void UVIsland::extend_border(const UVIslandsMask &mask, } /* When outside the mask, the uv should not be considered for extension. */ - if (!mask.is_masked(island_index, extension_vert->uv)) { + if (!mask.is_masked(island_index, extension_vert->uv_vertex->uv)) { extension_vert->flags.extendable = false; continue; } @@ -403,7 +403,7 @@ static const UVBorderVert *previous_vert(const UVBorder &border, const UVBorderV { const UVBorderVert *result = &border.verts.last(); for (const UVBorderVert &other : border.verts) { - if (other.uv == vert.uv) { + if (other.uv_vertex->uv == vert.uv_vertex->uv) { return result; } result = &other; @@ -419,7 +419,7 @@ static const UVBorderVert *next_vert(const UVBorder &border, const UVBorderVert // look at it later on. for (int i = border.verts.size() - 1; i >= 0; i--) { const UVBorderVert &other = border.verts[i]; - if (other.uv == vert.uv) { + if (other.uv_vertex->uv == vert.uv_vertex->uv) { return result; } result = &other; @@ -434,7 +434,8 @@ float UVBorder::outside_angle(const UVBorderVert &vert) const const UVBorderVert &next = *next_vert(*this, vert); // TODO: need detection if the result is inside or outside. // return angle_v2v2v2(prev.uv, vert.uv, next.uv); - return M_PI - angle_signed_v2v2(vert.uv - prev.uv, next.uv - vert.uv); + return M_PI - angle_signed_v2v2(vert.uv_vertex->uv - prev.uv_vertex->uv, + next.uv_vertex->uv - vert.uv_vertex->uv); } void UVBorder::update_indexes(uint64_t border_index) @@ -745,17 +746,17 @@ void svg(std::ostream &ss, const UVBorder &border) ss << " <g stroke=\"lightgrey\">\n"; for (const UVBorderVert &vert : border.verts) { const UVBorderVert &prev = *previous_vert(border, vert); - float2 v1 = prev.uv * float2(1024, 1024); - float2 v2 = vert.uv * float2(1024, 1024); - ss << " <line x1=\"" << v1.x << "\" y1=\"" << v1.y << "\" x2=\"" << v2.x << "\" y2=\"" - << v2.y << "\"/>\n"; + float2 v1 = prev.uv_vertex->uv; + float2 v2 = vert.uv_vertex->uv; + ss << " <line x1=\"" << svg_x(v1) << "\" y1=\"" << svg_y(v1) << "\" x2=\"" << svg_x(v2) + << "\" y2=\"" << svg_y(v2) << "\"/>\n"; } ss << " </g>\n"; ss << " <g fill=\"red\">\n"; for (const UVBorderVert &vert : border.verts) { - float2 v1 = vert.uv * float2(1024, 1024); - ss << " <text x=\"" << v1.x << "\" y=\"" << v1.y << "\">" + float2 v1 = vert.uv_vertex->uv; + ss << " <text x=\"" << svg_x(v1) << "\" y=\"" << svg_y(v1) << "\">" << (border.outside_angle(vert) / M_PI * 180) << "</text>\n"; } ss << " </g>\n"; _______________________________________________ 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