[Bf-blender-cvs] [8bbecabd3d0] temp-T97352-3d-texturing-seam-bleeding-b2: Update borders.
Jeroen Bakker
noreply at git.blender.org
Fri Jun 10 12:16:36 CEST 2022
Commit: 8bbecabd3d06fc0779f6f052d9794f1d7241b28a
Author: Jeroen Bakker
Date: Fri Jun 10 12:16:32 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rB8bbecabd3d06fc0779f6f052d9794f1d7241b28a
Update borders.
===================================================================
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 129ce693d79..e48f76a4487 100644
--- a/source/blender/blenkernel/intern/uv_islands.cc
+++ b/source/blender/blenkernel/intern/uv_islands.cc
@@ -244,6 +244,14 @@ static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, const MeshD
prim1.append_to_uv_edges();
prim1.append_to_uv_vertices();
island.uv_primitives.append(prim1);
+
+ /* Update border */
+ UVPrimitive &new_prim = island.uv_primitives.last();
+ UVEdge *new_edge = new_prim.edges[1];
+ UVBorderEdge *border_edge = corner.first;
+ border_edge->uv_primitive = &new_prim;
+ border_edge->edge = new_edge;
+ border_edge->reverse_order = new_edge->vertices[0]->uv == center_vertex_ptr->uv;
}
{
MeshPrimitive *mesh_primitive = corner.first->uv_primitive->primitive;
@@ -267,103 +275,18 @@ static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, const MeshD
prim1.append_to_uv_edges();
prim1.append_to_uv_vertices();
island.uv_primitives.append(prim1);
- }
- }
- else {
- }
-#if 0
-
- if (num_to_add > 0) {
- UVBorder &border = island.borders[vert.border_index];
- int i = 0;
- {
- UVPrimitive test(0);
- test.edges[0].vertices[0].uv = border.verts[vert.index].uv;
- test.edges[0].vertices[1].uv = border.verts[vert.next_index].uv;
- test.edges[1].vertices[0].uv = border.verts[vert.next_index].uv;
- test.edges[1].vertices[1].uv = border.verts[vert.prev_index].uv;
- test.edges[2].vertices[0].uv = border.verts[vert.prev_index].uv;
- test.edges[2].vertices[1].uv = border.verts[vert.index].uv;
- // island.primitives.append(test);
- // return;
- }
- FanTri *prev_tri = &fan.tris.last();
- for (int tri_index = 0; tri_index < fan.tris.size(); tri_index++) {
- FanTri &tri = fan.tris[tri_index];
- if (tri.flags.found) {
- prev_tri = &tri;
- continue;
- }
- float factor = float(i + 1) / float(num_to_add + 1);
- float2 new_pos;
- interp_v2_v2v2(
- new_pos, border.verts[vert.prev_index].uv, border.verts[vert.next_index].uv, factor);
- print_v2_id(new_pos);
- // TODO change length of edge.
-
- tri.uvs[1] = new_pos;
- prev_tri->uvs[2] = new_pos;
- tri.flags.should_be_added = true;
- prev_tri->flags.should_be_added = true;
-
- i++;
- prev_tri = &tri;
- }
- print(fan);
-
- for (FanTri &tri : fan.tris) {
- if (!tri.flags.should_be_added) {
- continue;
- }
- /*
- UVPrimitive prim(tri.prim_index);
- prim.edges[0].vertices[0].uv = tri.uvs[0];
- prim.edges[0].vertices[1].uv = tri.uvs[1];
- prim.edges[1].vertices[0].uv = tri.uvs[1];
- prim.edges[1].vertices[1].uv = tri.uvs[2];
- prim.edges[2].vertices[0].uv = tri.uvs[2];
- prim.edges[2].vertices[1].uv = tri.uvs[0];
-
- // prim.edges[0].adjacent_uv_primitive = prev_tri.uv_prim_index;
- // prim.edges[1].adjacent_uv_primitive = next_tri.uv_prim_index;
- island.primitives.append(prim);
- */
+ /* Update border */
+ UVPrimitive &new_prim = island.uv_primitives.last();
+ UVEdge *new_edge = new_prim.edges[1];
+ UVBorderEdge *border_edge = corner.second;
+ border_edge->uv_primitive = &new_prim;
+ border_edge->edge = new_edge;
+ border_edge->reverse_order = new_edge->vertices[1]->uv == center_vertex_ptr->uv;
}
}
else {
- // TODO duplicate tris or fill tri.
- // Currently we only do the duplication.
- /*
- UVBorder &border = island.borders[vert.border_index];
-
- float2 center_uv = (border.verts[vert.next_index].uv + border.verts[vert.prev_index].uv) /
- 2.0f;
- UVPrimitive prim1(0);
- prim1.edges[0].vertices[0].uv = border.verts[vert.index].uv;
- prim1.edges[0].vertices[1].uv = border.verts[vert.prev_index].uv;
- prim1.edges[1].vertices[0].uv = border.verts[vert.prev_index].uv;
- prim1.edges[1].vertices[1].uv = center_uv;
- prim1.edges[2].vertices[0].uv = center_uv;
- prim1.edges[2].vertices[1].uv = border.verts[vert.index].uv;
- island.uv_primitives.append(prim1);
-
- UVPrimitive prim2(0);
- prim2.edges[0].vertices[0].uv = border.verts[vert.index].uv;
- prim2.edges[0].vertices[1].uv = center_uv;
- prim2.edges[1].vertices[0].uv = center_uv;
- prim2.edges[1].vertices[1].uv = border.verts[vert.next_index].uv;
- prim2.edges[2].vertices[0].uv = border.verts[vert.next_index].uv;
- prim2.edges[2].vertices[1].uv = border.verts[vert.index].uv;
- island.uv_primitives.append(prim2);
-
- vert.uv = center_uv;
- */
- }
-
- // count fan-sections between border edges.
- // 0 : split in half.
-#endif
+ }
}
void UVIsland::extend_border(const UVIslandsMask &mask,
@@ -665,6 +588,20 @@ void svg(std::ostream &ss, const UVIsland &island, int step)
}
ss << " </g>\n";
+ /* Mark Border corners that can be extended. */
+ for (const UVBorder &border : island.borders) {
+ ss << " <g fill=\"green\">\n";
+ for (const UVBorderEdge &edge : border.edges) {
+ if (edge.flags.extendable) {
+ const UVVertex *uv_vertex = edge.get_uv_vertex(0);
+ ss << "<circle cx=\"" << svg_x(*uv_vertex) << "\"";
+ ss << " cy=\"" << svg_y(*uv_vertex) << "\"";
+ ss << " r=\"3\" />\n";
+ }
+ }
+ ss << " </g>\n";
+ }
+
ss << " </g>\n";
ss << "</g>\n";
More information about the Bf-blender-cvs
mailing list