Add test checking diference in volume before/after simplification

FIX warnings
..\src\libslic3r\QuadricEdgeCollapse.cpp(173): warning C4056: overflow in floating-point constant arithmetic
..\src\libslic3r\QuadricEdgeCollapse.cpp(232): warning C4056: overflow in floating-point constant arithmetic
This commit is contained in:
Filip Sykala 2021-06-22 09:41:38 +02:00
parent e3cdeda673
commit 7c13cfa1d9
2 changed files with 16 additions and 1 deletions

View File

@ -123,7 +123,7 @@ bool Slic3r::its_quadric_edge_collapse(indexed_triangle_set &its,
EdgeInfos e_infos;
std::tie(t_infos, v_infos, e_infos) = init(its);
static constexpr double max_error = std::numeric_limits<double>::max();
static constexpr float max_error = std::numeric_limits<float>::max();
auto cmp = [&t_infos](size_t vi0, size_t vi1) -> bool {
const Error &e0 = t_infos[vi0].e;

View File

@ -139,4 +139,19 @@ TEST_CASE("Reduce one edge by Quadric Edge Collapse", "[its]")
(v[i] > v4[i] && v[i] < v2[i]);
CHECK(is_between);
}
}
#include "test_utils.hpp"
TEST_CASE("Symplify mesh by Quadric edge collapse to 5%", "[its]")
{
TriangleMesh mesh = load_model("frog_legs.obj");
double original_volume = its_volume(mesh.its);
size_t wanted_count = mesh.its.indices.size() * 0.05;
REQUIRE_FALSE(mesh.empty());
indexed_triangle_set its = mesh.its; // copy
its_quadric_edge_collapse(its, wanted_count);
// its_write_obj(its, "frog_legs_qec.obj");
CHECK(its.indices.size() <= wanted_count);
double volume = its_volume(its);
CHECK(fabs(original_volume - volume) < 30.);
}