FIX Simplify test
This commit is contained in:
parent
8b4588d361
commit
2c0b89e4a7
@ -15,15 +15,12 @@ namespace QuadricEdgeCollapse {
|
||||
// smallest error caused by edges, identify smallest edge in triangle
|
||||
struct Error
|
||||
{
|
||||
float value = -1.;
|
||||
// range(0 .. 2),
|
||||
float value = -1.; // identifying of smallest edge is stored inside of TriangleInfo
|
||||
uint32_t triangle_index = 0;
|
||||
Error(float value, uint32_t triangle_index)
|
||||
: value(value)
|
||||
, triangle_index(triangle_index)
|
||||
{
|
||||
assert(min_index < 3);
|
||||
}
|
||||
{}
|
||||
Error() = default;
|
||||
};
|
||||
using Errors = std::vector<Error>;
|
||||
@ -31,6 +28,7 @@ namespace QuadricEdgeCollapse {
|
||||
// merge information together - faster access during processing
|
||||
struct TriangleInfo {
|
||||
Vec3f n; // normalized normal - speed up calcualtion of q and check flip
|
||||
// range(0 .. 2),
|
||||
unsigned char min_index = 0; // identify edge for minimal Error -> lightweight Error structure
|
||||
TriangleInfo() = default;
|
||||
bool is_deleted() const { return n.x() > 2.f; }
|
||||
@ -141,6 +139,8 @@ void Slic3r::its_quadric_edge_collapse(
|
||||
if (triangle_count >= its.indices.size()) return;
|
||||
float maximal_error = (max_error == nullptr)? std::numeric_limits<float>::max() : *max_error;
|
||||
if (maximal_error <= 0.f) return;
|
||||
if (throw_on_cancel == nullptr) throw_on_cancel = []() {};
|
||||
if (statusfn == nullptr) statusfn = [](int) {};
|
||||
|
||||
TriangleInfos t_infos; // only normals with information about deleted triangle
|
||||
VertexInfos v_infos;
|
||||
|
@ -233,18 +233,17 @@ TEST_CASE("Reduce one edge by Quadric Edge Collapse", "[its]")
|
||||
#include "test_utils.hpp"
|
||||
TEST_CASE("Symplify mesh by Quadric edge collapse to 5%", "[its]")
|
||||
{
|
||||
TriangleMesh mesh = load_model("frog_legs.obj");
|
||||
TriangleMesh mesh = load_model("frog_legs.obj");
|
||||
double original_volume = its_volume(mesh.its);
|
||||
uint32_t wanted_count = mesh.its.indices.size() * 0.05;
|
||||
REQUIRE_FALSE(mesh.empty());
|
||||
indexed_triangle_set its = mesh.its; // copy
|
||||
// its_write_obj(its, "frog_legs_qec.obj");
|
||||
float max_error = std::numeric_limits<float>::max();
|
||||
its_quadric_edge_collapse(its, wanted_count, &max_error);
|
||||
//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.);
|
||||
|
||||
CHECK(fabs(original_volume - volume) < 33.);
|
||||
float avg_distance = compare(mesh.its, its, 10);
|
||||
CHECK(avg_distance < 0.021f); // 0.02022 | 0.0199614074
|
||||
CHECK(avg_distance < 0.022f); // 0.02022 | 0.0199614074
|
||||
}
|
Loading…
Reference in New Issue
Block a user