mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	 364300055e
			
		
	
	
		364300055e
		
	
	
	
	
		
			
			(non-spiral vase layers) were being closed. Fixes Bad slicing in vase mode (unexpected bridge and solid infill layers) #3326 Fixes Model with holes in the base does not slice properly in "Vase Mode" #5359
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef slic3r_PerimeterGenerator_hpp_
 | |
| #define slic3r_PerimeterGenerator_hpp_
 | |
| 
 | |
| #include "libslic3r.h"
 | |
| #include <vector>
 | |
| #include "Flow.hpp"
 | |
| #include "Polygon.hpp"
 | |
| #include "PrintConfig.hpp"
 | |
| #include "SurfaceCollection.hpp"
 | |
| 
 | |
| namespace Slic3r {
 | |
| 
 | |
| class PerimeterGenerator {
 | |
| public:
 | |
|     // Inputs:
 | |
|     const SurfaceCollection     *slices;
 | |
|     const ExPolygons            *lower_slices;
 | |
|     double                       layer_height;
 | |
|     int                          layer_id;
 | |
|     Flow                         perimeter_flow;
 | |
|     Flow                         ext_perimeter_flow;
 | |
|     Flow                         overhang_flow;
 | |
|     Flow                         solid_infill_flow;
 | |
|     const PrintRegionConfig     *config;
 | |
|     const PrintObjectConfig     *object_config;
 | |
|     const PrintConfig           *print_config;
 | |
|     // Outputs:
 | |
|     ExtrusionEntityCollection   *loops;
 | |
|     ExtrusionEntityCollection   *gap_fill;
 | |
|     SurfaceCollection           *fill_surfaces;
 | |
|     
 | |
|     PerimeterGenerator(
 | |
|         // Input:
 | |
|         const SurfaceCollection*    slices, 
 | |
|         double                      layer_height,
 | |
|         Flow                        flow,
 | |
|         const PrintRegionConfig*    config,
 | |
|         const PrintObjectConfig*    object_config,
 | |
|         const PrintConfig*          print_config,
 | |
|         const bool                  spiral_vase,
 | |
|         // Output:
 | |
|         // Loops with the external thin walls
 | |
|         ExtrusionEntityCollection*  loops,
 | |
|         // Gaps without the thin walls
 | |
|         ExtrusionEntityCollection*  gap_fill,
 | |
|         // Infills without the gap fills
 | |
|         SurfaceCollection*          fill_surfaces)
 | |
|         : slices(slices), lower_slices(nullptr), layer_height(layer_height),
 | |
|             layer_id(-1), perimeter_flow(flow), ext_perimeter_flow(flow),
 | |
|             overhang_flow(flow), solid_infill_flow(flow),
 | |
|             config(config), object_config(object_config), print_config(print_config),
 | |
|             m_spiral_vase(spiral_vase),
 | |
|             loops(loops), gap_fill(gap_fill), fill_surfaces(fill_surfaces),
 | |
|             m_ext_mm3_per_mm(-1), m_mm3_per_mm(-1), m_mm3_per_mm_overhang(-1)
 | |
|         {}
 | |
| 
 | |
|     void        process();
 | |
| 
 | |
|     double      ext_mm3_per_mm()        const { return m_ext_mm3_per_mm; }
 | |
|     double      mm3_per_mm()            const { return m_mm3_per_mm; }
 | |
|     double      mm3_per_mm_overhang()   const { return m_mm3_per_mm_overhang; }
 | |
|     Polygons    lower_slices_polygons() const { return m_lower_slices_polygons; }
 | |
| 
 | |
| private:
 | |
|     bool        m_spiral_vase;
 | |
|     double      m_ext_mm3_per_mm;
 | |
|     double      m_mm3_per_mm;
 | |
|     double      m_mm3_per_mm_overhang;
 | |
|     Polygons    m_lower_slices_polygons;
 | |
| };
 | |
| 
 | |
| }
 | |
| 
 | |
| #endif
 |