[Bf-blender-cvs] [b03d22e39d5] temp-T97352-3d-texturing-seam-bleeding-b2: Limit upto 1 extension, due to mismatch somewhere....
Jeroen Bakker
noreply at git.blender.org
Fri Jun 17 15:06:52 CEST 2022
Commit: b03d22e39d546c05c227d2e9a84c2d6e1b20c80b
Author: Jeroen Bakker
Date: Fri Jun 17 14:21:16 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rBb03d22e39d546c05c227d2e9a84c2d6e1b20c80b
Limit upto 1 extension, due to mismatch somewhere....
===================================================================
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 b123efe0f27..87dd1af8322 100644
--- a/source/blender/blenkernel/intern/uv_islands.cc
+++ b/source/blender/blenkernel/intern/uv_islands.cc
@@ -108,8 +108,18 @@ struct Fan {
/* Blades of the fan. */
Vector<InnerEdge> inner_edges;
+ struct {
+ /**
+ * Do all segments of the fan make a full fan, or are there parts missing. Non manifold meshes
+ * can have missing parts.
+ */
+ bool full : 1;
+
+ } flags;
+
Fan(MeshVertex &vertex)
{
+ flags.full = true;
MeshEdge *current_edge = vertex.edges[0];
MeshPrimitive *stop_primitive = current_edge->primitives[0];
MeshPrimitive *previous_primitive = stop_primitive;
@@ -136,6 +146,7 @@ struct Fan {
}
if (stop == false) {
printf("unknown how to create the fan for vert %lld\n", vertex.v);
+ flags.full = false;
break;
}
if (stop_primitive == previous_primitive) {
@@ -333,6 +344,10 @@ static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, const MeshD
UVVertex *uv_vertex = corner.second->get_uv_vertex(0);
Fan fan(*(uv_vertex->vertex));
+ if (!fan.flags.full) {
+ printf("TODO: Unknown how to handle non-manifold meshes.\n");
+ return;
+ }
fan.init_uv_coordinates(*uv_vertex, island);
fan.mark_already_added_segments(*uv_vertex);
print(fan);
@@ -482,7 +497,9 @@ static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, const MeshD
border_next--;
}
border.remove(border_next);
-
+ for (UVBorderEdge &edge : new_border_edges) {
+ edge.flags.extendable = false;
+ }
border.edges.insert(border_insert, new_border_edges);
border.update_indexes(border_index);
@@ -499,8 +516,10 @@ void UVIsland::extend_border(const UVIslandsMask &mask,
// exit when no corner could be found.
#ifdef DEBUG_SVG
int step = 0;
+ std::stringstream filename;
+ filename << "/tmp/extend." << island_index << ".svg";
std::ofstream of;
- of.open("/tmp/extend.svg");
+ of.open(filename.str());
svg_header(of);
svg(of, *this, step++);
for (UVBorder &border : borders) {
@@ -519,8 +538,9 @@ void UVIsland::extend_border(const UVIslandsMask &mask,
int num_iterations = 99999;
while (num_iterations) {
printf("**iterations left %d**\n", num_iterations);
- if (num_iterations == 1) {
- printf("Last iteration\n");
+ if (step == 366) {
+ printf("Debug iteration\n");
+ // break;
}
validate_border();
std::optional<UVBorderCorner> extension_corner = sharpest_border_corner(*this);
More information about the Bf-blender-cvs
mailing list