diff --git a/src/libslic3r/Triangulation.cpp b/src/libslic3r/Triangulation.cpp
index fc811277e5..9119df7d9b 100644
--- a/src/libslic3r/Triangulation.cpp
+++ b/src/libslic3r/Triangulation.cpp
@@ -26,7 +26,9 @@ inline void insert_edge(Triangulation::HalfEdges &edges, uint32_t &offset, const
} // namespace Private
-Triangulation::Indices Triangulation::triangulate(const Points &points, const HalfEdges &half_edges)
+Triangulation::Indices Triangulation::triangulate(const Points & points,
+ const HalfEdges &half_edges,
+ bool allow_opposit_edge)
{
// IMPROVE use int point insted of float !!!
@@ -67,12 +69,11 @@ Triangulation::Indices Triangulation::triangulate(const Points &points, const Ha
for (size_t i = 0; i < 3; ++i) pi[i] = map[face->vertex(i)];
// Do not use triangles with opposit edges
- if (half_edges.find(std::make_pair(pi[1], pi[0])) != half_edges.end())
- continue;
- if (half_edges.find(std::make_pair(pi[2], pi[1])) != half_edges.end())
- continue;
- if (half_edges.find(std::make_pair(pi[0], pi[2])) != half_edges.end())
- continue;
+ if (!allow_opposit_edge) {
+ if (half_edges.find(std::make_pair(pi[1], pi[0])) != half_edges.end()) continue;
+ if (half_edges.find(std::make_pair(pi[2], pi[1])) != half_edges.end()) continue;
+ if (half_edges.find(std::make_pair(pi[0], pi[2])) != half_edges.end()) continue;
+ }
indices.emplace_back(pi[0], pi[1], pi[2]);
}
diff --git a/src/libslic3r/Triangulation.hpp b/src/libslic3r/Triangulation.hpp
index a143587232..ccc08b52a6 100644
--- a/src/libslic3r/Triangulation.hpp
+++ b/src/libslic3r/Triangulation.hpp
@@ -26,9 +26,12 @@ public:
///
/// Points to connect
/// Constraint for edges, pair is from point(first) to
- /// point(second) Triangles
+ /// point(second)
+ /// Flag for filtration result indices by opposit half edge
+ /// Triangles
static Indices triangulate(const Points & points,
- const HalfEdges &half_edges);
+ const HalfEdges &half_edges,
+ bool allow_opposit_edge = false);
static Indices triangulate(const Polygon &polygon);
static Indices triangulate(const Polygons &polygons);
static Indices triangulate(const ExPolygons &expolygons);
diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt
index 05898db28a..3f732d1a39 100644
--- a/tests/libslic3r/CMakeLists.txt
+++ b/tests/libslic3r/CMakeLists.txt
@@ -22,6 +22,9 @@ add_executable(${_TEST_NAME}_tests
test_optimizers.cpp
test_png_io.cpp
test_timeutils.cpp
+ test_quadric_edge_collapse.cpp
+ test_triangulation.cpp
+ test_emboss.cpp
test_indexed_triangle_set.cpp
../libnest2d/printer_parts.cpp
)
diff --git a/tests/libslic3r/Simplify.h b/tests/libslic3r/Simplify.h
new file mode 100644
index 0000000000..24c126e34e
--- /dev/null
+++ b/tests/libslic3r/Simplify.h
@@ -0,0 +1,1036 @@
+/////////////////////////////////////////////
+//
+// Mesh Simplification Tutorial
+//
+// (C) by Sven Forstmann in 2014
+//
+// License : MIT
+// http://opensource.org/licenses/MIT
+//
+//https://github.com/sp4cerat/Fast-Quadric-Mesh-Simplification
+//
+// 5/2016: Chris Rorden created minimal version for OSX/Linux/Windows compile
+
+//#include
+//#include
+//#include
+//#include
+//#include
+#include
+//#include
+//#include
+#include
+#include
+#include