Fixed an issue that some triangles weren't selected when bucket fill was used in the multi-material painting gizmo.

This commit is contained in:
Lukáš Hejl 2021-07-30 16:11:23 +02:00
parent 0092c448b8
commit d13c08837c

View file

@ -277,22 +277,22 @@ void TriangleSelector::append_touching_subtriangles(int itriangle, int vertexi,
if (itriangle == -1) if (itriangle == -1)
return; return;
auto process_subtriangle = [this, &itriangle, &vertexi, &vertexj, &touching_subtriangles_out](const int subtriangle_idx) -> void { auto process_subtriangle = [this, &itriangle, &vertexi, &vertexj, &touching_subtriangles_out](const int subtriangle_idx, Partition partition) -> void {
assert(subtriangle_idx == -1); assert(subtriangle_idx == -1);
if (!m_triangles[subtriangle_idx].is_split()) if (!m_triangles[subtriangle_idx].is_split())
touching_subtriangles_out.emplace_back(subtriangle_idx); touching_subtriangles_out.emplace_back(subtriangle_idx);
else if (int midpoint = this->triangle_midpoint(itriangle, vertexi, vertexj); midpoint != -1) else if (int midpoint = this->triangle_midpoint(itriangle, vertexi, vertexj); midpoint != -1)
append_touching_subtriangles(subtriangle_idx, vertexi, midpoint, touching_subtriangles_out); append_touching_subtriangles(subtriangle_idx, partition == Partition::First ? vertexi : midpoint, partition == Partition::First ? midpoint : vertexj, touching_subtriangles_out);
else else
append_touching_subtriangles(subtriangle_idx, vertexi, vertexj, touching_subtriangles_out); append_touching_subtriangles(subtriangle_idx, vertexi, vertexj, touching_subtriangles_out);
}; };
std::pair<int, int> touching = this->triangle_subtriangles(itriangle, vertexi, vertexj); std::pair<int, int> touching = this->triangle_subtriangles(itriangle, vertexi, vertexj);
if (touching.first != -1) if (touching.first != -1)
process_subtriangle(touching.first); process_subtriangle(touching.first, Partition::First);
if (touching.second != -1) if (touching.second != -1)
process_subtriangle(touching.second); process_subtriangle(touching.second, Partition::Second);
} }
void TriangleSelector::bucket_fill_select_triangles(const Vec3f& hit, int facet_start, bool propagate) void TriangleSelector::bucket_fill_select_triangles(const Vec3f& hit, int facet_start, bool propagate)
@ -437,7 +437,7 @@ int TriangleSelector::neighbor_child(int itriangle, int vertexi, int vertexj, Pa
std::pair<int, int> TriangleSelector::triangle_subtriangles(int itriangle, int vertexi, int vertexj) const std::pair<int, int> TriangleSelector::triangle_subtriangles(int itriangle, int vertexi, int vertexj) const
{ {
return itriangle == -1 ? std::make_pair(-1, -1) : this->triangle_subtriangles(m_triangles[itriangle], vertexi, vertexj); return itriangle == -1 ? std::make_pair(-1, -1) : Slic3r::TriangleSelector::triangle_subtriangles(m_triangles[itriangle], vertexi, vertexj);
} }
std::pair<int, int> TriangleSelector::triangle_subtriangles(const Triangle &tr, int vertexi, int vertexj) std::pair<int, int> TriangleSelector::triangle_subtriangles(const Triangle &tr, int vertexi, int vertexj)