Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2017-08-02 17:05:18 +0300
committerbubnikv <bubnikv@gmail.com>2017-08-02 17:05:18 +0300
commit31085fb1d70510e3d73c64c0b7fc7a394b6e6f72 (patch)
treed530f611f63ed407cdff8cef6779274378dfccb6 /xs/src/libslic3r/TriangleMesh.cpp
parent777023c7a8f09754d158df39bf79c23e44b90a2f (diff)
Ported some ModelObject methods from Perl to C++.
Added some utility functions to TriangleMesh, thanks to @alexrj Some porting to C++ based on work by @alexrj.
Diffstat (limited to 'xs/src/libslic3r/TriangleMesh.cpp')
-rw-r--r--xs/src/libslic3r/TriangleMesh.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/xs/src/libslic3r/TriangleMesh.cpp b/xs/src/libslic3r/TriangleMesh.cpp
index ee1dc7315..f2f05a841 100644
--- a/xs/src/libslic3r/TriangleMesh.cpp
+++ b/xs/src/libslic3r/TriangleMesh.cpp
@@ -215,6 +215,47 @@ TriangleMesh::repair() {
BOOST_LOG_TRIVIAL(debug) << "TriangleMesh::repair() finished";
}
+
+float TriangleMesh::volume()
+{
+ if (this->stl.stats.volume == -1)
+ stl_calculate_volume(&this->stl);
+ return this->stl.stats.volume;
+}
+
+void TriangleMesh::check_topology()
+{
+ // checking exact
+ stl_check_facets_exact(&stl);
+ stl.stats.facets_w_1_bad_edge = (stl.stats.connected_facets_2_edge - stl.stats.connected_facets_3_edge);
+ stl.stats.facets_w_2_bad_edge = (stl.stats.connected_facets_1_edge - stl.stats.connected_facets_2_edge);
+ stl.stats.facets_w_3_bad_edge = (stl.stats.number_of_facets - stl.stats.connected_facets_1_edge);
+
+ // checking nearby
+ //int last_edges_fixed = 0;
+ float tolerance = stl.stats.shortest_edge;
+ float increment = stl.stats.bounding_diameter / 10000.0;
+ int iterations = 2;
+ if (stl.stats.connected_facets_3_edge < stl.stats.number_of_facets) {
+ for (int i = 0; i < iterations; i++) {
+ if (stl.stats.connected_facets_3_edge < stl.stats.number_of_facets) {
+ //printf("Checking nearby. Tolerance= %f Iteration=%d of %d...", tolerance, i + 1, iterations);
+ stl_check_facets_nearby(&stl, tolerance);
+ //printf(" Fixed %d edges.\n", stl.stats.edges_fixed - last_edges_fixed);
+ //last_edges_fixed = stl.stats.edges_fixed;
+ tolerance += increment;
+ } else {
+ break;
+ }
+ }
+ }
+}
+
+bool TriangleMesh::is_manifold() const
+{
+ return this->stl.stats.connected_facets_3_edge == this->stl.stats.number_of_facets;
+}
+
void
TriangleMesh::reset_repair_stats() {
this->stl.stats.degenerate_facets = 0;