diff options
author | tamasmeszaros <meszaros.q@gmail.com> | 2019-05-07 14:06:15 +0300 |
---|---|---|
committer | tamasmeszaros <meszaros.q@gmail.com> | 2019-05-07 14:06:15 +0300 |
commit | c03a202e20641cc373f44ba8dc1996b62d8c3775 (patch) | |
tree | b8e0bf6e4e471ca1aab3847e4f814d6e12c6545c /sandboxes | |
parent | 806dc34421b607059b70b222f3ad3a445d8f79da (diff) |
Prevent degenerate triangles in pad.
Diffstat (limited to 'sandboxes')
-rw-r--r-- | sandboxes/slabasebed/slabasebed.cpp | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/sandboxes/slabasebed/slabasebed.cpp b/sandboxes/slabasebed/slabasebed.cpp index 323741609..0c34eb9f5 100644 --- a/sandboxes/slabasebed/slabasebed.cpp +++ b/sandboxes/slabasebed/slabasebed.cpp @@ -4,6 +4,7 @@ #include <libslic3r/libslic3r.h> #include <libslic3r/TriangleMesh.hpp> +#include <libslic3r/Tesselate.hpp> #include <libslic3r/SLA/SLABasePool.hpp> #include <libslic3r/SLA/SLABoilerPlate.hpp> #include <libnest2d/tools/benchmark.h> @@ -14,7 +15,9 @@ const std::string USAGE_STR = { namespace Slic3r { namespace sla { -Contour3D convert(const Polygons& triangles, coord_t z, bool dir); +Contour3D create_base_pool(const ExPolygons &ground_layer, + const PoolConfig& cfg = PoolConfig()); + Contour3D walls(const Polygon& floor_plate, const Polygon& ceiling, double floor_z_mm, double ceiling_z_mm, double offset_difference_mm, ThrowOnCancel thr); @@ -47,31 +50,38 @@ int main(const int argc, const char *argv[]) { if(ground_slice.empty()) return EXIT_FAILURE; - ExPolygon bottom_plate = ground_slice.front(); - ExPolygon top_plate = bottom_plate; - sla::offset(top_plate, coord_t(3.0/SCALING_FACTOR)); - sla::offset(bottom_plate, coord_t(1.0/SCALING_FACTOR)); +// ExPolygon bottom_plate = ground_slice.front(); +// ExPolygon top_plate = bottom_plate; +// sla::offset(top_plate, coord_t(3.0/SCALING_FACTOR)); +// sla::offset(bottom_plate, coord_t(1.0/SCALING_FACTOR)); bench.start(); - Polygons top_plate_triangles, bottom_plate_triangles; - top_plate.triangulate_p2t(&top_plate_triangles); - bottom_plate.triangulate_p2t(&bottom_plate_triangles); - - auto top_plate_mesh = sla::convert(top_plate_triangles, coord_t(3.0/SCALING_FACTOR), false); - auto bottom_plate_mesh = sla::convert(bottom_plate_triangles, 0, true); - - mesh.merge(bottom_plate_mesh); - mesh.merge(top_plate_mesh); - - sla::Contour3D w = sla::walls(bottom_plate.contour, top_plate.contour, 0, 3, 2.0, [](){}); - - mesh.merge(w); -// sla::create_base_pool(ground_slice, basepool); +// TriangleMesh pool; + sla::PoolConfig cfg; + cfg.min_wall_height_mm = 0; + cfg.edge_radius_mm = 0.2; + mesh = sla::create_base_pool(ground_slice, cfg); + +// mesh.merge(triangulate_expolygon_3d(top_plate, 3.0, false)); +// mesh.merge(triangulate_expolygon_3d(bottom_plate, 0.0, true)); +// mesh = sla::walls(bottom_plate.contour, top_plate.contour, 0, 3, 2.0, [](){}); + bench.stop(); cout << "Base pool creation time: " << std::setprecision(10) << bench.getElapsedSec() << " seconds." << endl; + +// auto point = []() + for(auto& trind : mesh.indices) { + Vec3d p0 = mesh.points[size_t(trind[0])]; + Vec3d p1 = mesh.points[size_t(trind[1])]; + Vec3d p2 = mesh.points[size_t(trind[2])]; + Vec3d p01 = p1 - p0; + Vec3d p02 = p2 - p0; + auto a = p01.cross(p02).norm() / 2.0; + if(std::abs(a) < 1e-6) std::cout << "degenerate triangle" << std::endl; + } // basepool.write_ascii("out.stl"); |