mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Merge branch 'master' of https://github.com/prusa3d/Slic3r
This commit is contained in:
		
						commit
						bf0b75b398
					
				
					 3 changed files with 45 additions and 32 deletions
				
			
		|  | @ -4,6 +4,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <libslic3r/libslic3r.h> | #include <libslic3r/libslic3r.h> | ||||||
| #include <libslic3r/TriangleMesh.hpp> | #include <libslic3r/TriangleMesh.hpp> | ||||||
|  | #include <libslic3r/Tesselate.hpp> | ||||||
| #include <libslic3r/SLA/SLABasePool.hpp> | #include <libslic3r/SLA/SLABasePool.hpp> | ||||||
| #include <libslic3r/SLA/SLABoilerPlate.hpp> | #include <libslic3r/SLA/SLABoilerPlate.hpp> | ||||||
| #include <libnest2d/tools/benchmark.h> | #include <libnest2d/tools/benchmark.h> | ||||||
|  | @ -14,7 +15,9 @@ const std::string USAGE_STR = { | ||||||
| 
 | 
 | ||||||
| namespace Slic3r { namespace sla { | 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, | Contour3D walls(const Polygon& floor_plate, const Polygon& ceiling, | ||||||
|                 double floor_z_mm, double ceiling_z_mm, |                 double floor_z_mm, double ceiling_z_mm, | ||||||
|                 double offset_difference_mm, ThrowOnCancel thr); |                 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; |     if(ground_slice.empty()) return EXIT_FAILURE; | ||||||
| 
 | 
 | ||||||
|     ExPolygon bottom_plate = ground_slice.front(); | //    ExPolygon bottom_plate = ground_slice.front();
 | ||||||
|     ExPolygon top_plate = bottom_plate; | //    ExPolygon top_plate = bottom_plate;
 | ||||||
|     sla::offset(top_plate, coord_t(3.0/SCALING_FACTOR)); | //    sla::offset(top_plate, coord_t(3.0/SCALING_FACTOR));
 | ||||||
|     sla::offset(bottom_plate, coord_t(1.0/SCALING_FACTOR)); | //    sla::offset(bottom_plate, coord_t(1.0/SCALING_FACTOR));
 | ||||||
| 
 | 
 | ||||||
|     bench.start(); |     bench.start(); | ||||||
| 
 | 
 | ||||||
|     Polygons top_plate_triangles, bottom_plate_triangles; | //    TriangleMesh pool;
 | ||||||
|     top_plate.triangulate_p2t(&top_plate_triangles); |     sla::PoolConfig cfg; | ||||||
|     bottom_plate.triangulate_p2t(&bottom_plate_triangles); |     cfg.min_wall_height_mm = 0; | ||||||
| 
 |     cfg.edge_radius_mm = 0.2; | ||||||
|     auto top_plate_mesh = sla::convert(top_plate_triangles, coord_t(3.0/SCALING_FACTOR), false); |     mesh = sla::create_base_pool(ground_slice, cfg); | ||||||
|     auto bottom_plate_mesh = sla::convert(bottom_plate_triangles, 0, true); |      | ||||||
| 
 | //    mesh.merge(triangulate_expolygon_3d(top_plate, 3.0, false));
 | ||||||
|     mesh.merge(bottom_plate_mesh); | //    mesh.merge(triangulate_expolygon_3d(bottom_plate, 0.0, true));
 | ||||||
|     mesh.merge(top_plate_mesh); | //    mesh = sla::walls(bottom_plate.contour, top_plate.contour, 0, 3, 2.0, [](){});
 | ||||||
| 
 |      | ||||||
|     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);
 |  | ||||||
|     bench.stop(); |     bench.stop(); | ||||||
| 
 | 
 | ||||||
|     cout << "Base pool creation time: " << std::setprecision(10) |     cout << "Base pool creation time: " << std::setprecision(10) | ||||||
|          << bench.getElapsedSec() << " seconds." << endl; |          << 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");
 | //    basepool.write_ascii("out.stl");
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -582,8 +582,8 @@ void base_plate(const TriangleMesh &mesh, ExPolygons &output, float h, | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out, | Contour3D create_base_pool(const ExPolygons &ground_layer,  | ||||||
|                       const PoolConfig& cfg) |                            const PoolConfig& cfg = PoolConfig())  | ||||||
| { | { | ||||||
|     // for debugging:
 |     // for debugging:
 | ||||||
|     // Benchmark bench;
 |     // Benchmark bench;
 | ||||||
|  | @ -618,7 +618,7 @@ void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out, | ||||||
|     Contour3D pool; |     Contour3D pool; | ||||||
| 
 | 
 | ||||||
|     for(ExPolygon& concaveh : concavehs) { |     for(ExPolygon& concaveh : concavehs) { | ||||||
|         if(concaveh.contour.points.empty()) return; |         if(concaveh.contour.points.empty()) return pool; | ||||||
| 
 | 
 | ||||||
|         // Get rid of any holes in the concave hull output.
 |         // Get rid of any holes in the concave hull output.
 | ||||||
|         concaveh.holes.clear(); |         concaveh.holes.clear(); | ||||||
|  | @ -683,7 +683,7 @@ void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out, | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         // Generate the smoothed edge geometry
 |         // Generate the smoothed edge geometry
 | ||||||
|         pool.merge(round_edges(ob, |         if(s_eradius > 0) pool.merge(round_edges(ob, | ||||||
|                                r, |                                r, | ||||||
|                                phi, |                                phi, | ||||||
|                                0,    // z position of the input plane
 |                                0,    // z position of the input plane
 | ||||||
|  | @ -698,7 +698,8 @@ void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out, | ||||||
| 
 | 
 | ||||||
|         if(wingheight > 0) { |         if(wingheight > 0) { | ||||||
|             // Generate the smoothed edge geometry
 |             // Generate the smoothed edge geometry
 | ||||||
|             pool.merge(round_edges(middle_base, |             wh = 0; | ||||||
|  |             if(s_eradius) pool.merge(round_edges(middle_base, | ||||||
|                                    r, |                                    r, | ||||||
|                                    phi - 90, // from tangent lines
 |                                    phi - 90, // from tangent lines
 | ||||||
|                                    0,  // z position of the input plane
 |                                    0,  // z position of the input plane
 | ||||||
|  | @ -722,6 +723,14 @@ void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out, | ||||||
|             pool.merge(triangulate_expolygon_3d(inner_base, -wingheight)); |             pool.merge(triangulate_expolygon_3d(inner_base, -wingheight)); | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
|  |      | ||||||
|  |     return pool; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out, | ||||||
|  |                       const PoolConfig& cfg) | ||||||
|  | { | ||||||
|  |      | ||||||
| 
 | 
 | ||||||
|     // For debugging:
 |     // For debugging:
 | ||||||
|     // bench.stop();
 |     // bench.stop();
 | ||||||
|  | @ -729,7 +738,7 @@ void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out, | ||||||
|     // std::fstream fout("pad_debug.obj", std::fstream::out);
 |     // std::fstream fout("pad_debug.obj", std::fstream::out);
 | ||||||
|     // if(fout.good()) pool.to_obj(fout);
 |     // if(fout.good()) pool.to_obj(fout);
 | ||||||
| 
 | 
 | ||||||
|     out.merge(mesh(pool)); |     out.merge(mesh(create_base_pool(ground_layer, cfg))); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1053,8 +1053,6 @@ void SLAPrint::process() | ||||||
|         const double width              = m_printer_config.display_width.getFloat() / SCALING_FACTOR; |         const double width              = m_printer_config.display_width.getFloat() / SCALING_FACTOR; | ||||||
|         const double height             = m_printer_config.display_height.getFloat() / SCALING_FACTOR; |         const double height             = m_printer_config.display_height.getFloat() / SCALING_FACTOR; | ||||||
|         const double display_area       = width*height; |         const double display_area       = width*height; | ||||||
|          |  | ||||||
|         const coord_t clpr_back_offs    = - coord_t(m_printer_config.absolute_correction.getFloat() / SCALING_FACTOR); |  | ||||||
| 
 | 
 | ||||||
|         // get polygons for all instances in the object
 |         // get polygons for all instances in the object
 | ||||||
|         auto get_all_polygons = |         auto get_all_polygons = | ||||||
|  | @ -1138,7 +1136,7 @@ void SLAPrint::process() | ||||||
|         auto printlayerfn = [this, |         auto printlayerfn = [this, | ||||||
|                 // functions and read only vars
 |                 // functions and read only vars
 | ||||||
|                 get_all_polygons, polyunion, polydiff, areafn, |                 get_all_polygons, polyunion, polydiff, areafn, | ||||||
|                 area_fill, display_area, exp_time, init_exp_time, fast_tilt, slow_tilt, delta_fade_time, clpr_back_offs, |                 area_fill, display_area, exp_time, init_exp_time, fast_tilt, slow_tilt, delta_fade_time, | ||||||
| 
 | 
 | ||||||
|                 // write vars
 |                 // write vars
 | ||||||
|                 &mutex, &models_volume, &supports_volume, &estim_time, &slow_layers, |                 &mutex, &models_volume, &supports_volume, &estim_time, &slow_layers, | ||||||
|  | @ -1174,8 +1172,6 @@ void SLAPrint::process() | ||||||
|             for(const SliceRecord& record : layer.slices()) { |             for(const SliceRecord& record : layer.slices()) { | ||||||
|                 const SLAPrintObject *po = record.print_obj(); |                 const SLAPrintObject *po = record.print_obj(); | ||||||
| 
 | 
 | ||||||
|                 // const ExPolygons &rawmodelslices = record.get_slice(soModel);
 |  | ||||||
|                 // const ExPolygons &modelslices = clpr_back_offs != 0 ? offset_ex(rawmodelslices, clpr_back_offs) : rawmodelslices;
 |  | ||||||
|                 const ExPolygons &modelslices = record.get_slice(soModel); |                 const ExPolygons &modelslices = record.get_slice(soModel); | ||||||
|                  |                  | ||||||
|                 bool is_lefth = record.print_obj()->is_left_handed(); |                 bool is_lefth = record.print_obj()->is_left_handed(); | ||||||
|  | @ -1184,8 +1180,6 @@ void SLAPrint::process() | ||||||
|                     for(ClipperPolygon& p_tmp : v) model_polygons.emplace_back(std::move(p_tmp)); |                     for(ClipperPolygon& p_tmp : v) model_polygons.emplace_back(std::move(p_tmp)); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 // const ExPolygons &rawsupportslices = record.get_slice(soSupport);
 |  | ||||||
|                 // const ExPolygons &supportslices = clpr_back_offs != 0 ? offset_ex(rawsupportslices, clpr_back_offs) : rawsupportslices;
 |  | ||||||
|                 const ExPolygons &supportslices = record.get_slice(soSupport); |                 const ExPolygons &supportslices = record.get_slice(soSupport); | ||||||
|                  |                  | ||||||
|                 if (!supportslices.empty()) { |                 if (!supportslices.empty()) { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bubnikv
						bubnikv