mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Preparation for new infill
This commit is contained in:
		
							parent
							
								
									e010d287c5
								
							
						
					
					
						commit
						0d26df3cf6
					
				
					 9 changed files with 95 additions and 1 deletions
				
			
		|  | @ -46,6 +46,8 @@ add_library(libslic3r STATIC | |||
|     Fill/Fill.hpp | ||||
|     Fill/Fill3DHoneycomb.cpp | ||||
|     Fill/Fill3DHoneycomb.hpp | ||||
|     Fill/FillAdaptive.cpp | ||||
|     Fill/FillAdaptive.hpp | ||||
|     Fill/FillBase.cpp | ||||
|     Fill/FillBase.hpp | ||||
|     Fill/FillConcentric.cpp | ||||
|  |  | |||
|  | @ -345,6 +345,7 @@ void Layer::make_fills() | |||
|         f->layer_id = this->id(); | ||||
|         f->z 		= this->print_z; | ||||
|         f->angle 	= surface_fill.params.angle; | ||||
|         f->adapt_fill_octree = this->object()->adaptiveInfillOctree(); | ||||
| 
 | ||||
|         // calculate flow spacing for infill pattern generation
 | ||||
|         bool using_internal_flow = ! surface_fill.surface.is_solid() && ! surface_fill.params.flow.bridge; | ||||
|  |  | |||
							
								
								
									
										19
									
								
								src/libslic3r/Fill/FillAdaptive.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/libslic3r/Fill/FillAdaptive.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| #include "../ClipperUtils.hpp" | ||||
| #include "../ExPolygon.hpp" | ||||
| #include "../Surface.hpp" | ||||
| 
 | ||||
| #include "FillAdaptive.hpp" | ||||
| 
 | ||||
| namespace Slic3r { | ||||
| 
 | ||||
| void FillAdaptive::_fill_surface_single( | ||||
|     const FillParams                ¶ms,  | ||||
|     unsigned int                     thickness_layers, | ||||
|     const std::pair<float, Point>   &direction,  | ||||
|     ExPolygon                       &expolygon,  | ||||
|     Polylines                       &polylines_out) | ||||
| { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| } // namespace Slic3r
 | ||||
							
								
								
									
										53
									
								
								src/libslic3r/Fill/FillAdaptive.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/libslic3r/Fill/FillAdaptive.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | |||
| #ifndef slic3r_FillAdaptive_hpp_ | ||||
| #define slic3r_FillAdaptive_hpp_ | ||||
| 
 | ||||
| #include "FillBase.hpp" | ||||
| 
 | ||||
| namespace Slic3r { | ||||
| 
 | ||||
| namespace FillAdaptive_Internal | ||||
| { | ||||
|     struct CubeProperties | ||||
|     { | ||||
|         double edge_length;     // Lenght of edge of a cube
 | ||||
|         double height;          // Height of rotated cube (standing on the corner)
 | ||||
|         double diagonal_length; // Length of diagonal of a cube a face
 | ||||
|         double line_z_distance; // Defines maximal distance from a center of a cube on Z axis on which lines will be created
 | ||||
|         double line_xy_distance;// Defines maximal distance from a center of a cube on X and Y axis on which lines will be created
 | ||||
|     }; | ||||
| 
 | ||||
|     struct Cube | ||||
|     { | ||||
|         Vec3d center; | ||||
|         size_t depth; | ||||
|         CubeProperties properties; | ||||
|         std::vector<Cube*> children; | ||||
|     }; | ||||
| 
 | ||||
|     struct Octree | ||||
|     { | ||||
|         Cube *root_cube; | ||||
|         Vec3d origin; | ||||
|     }; | ||||
| }; // namespace FillAdaptive_Internal
 | ||||
| 
 | ||||
| class FillAdaptive : public Fill | ||||
| { | ||||
| public: | ||||
|     virtual ~FillAdaptive() {} | ||||
| 
 | ||||
| protected: | ||||
|     virtual Fill* clone() const { return new FillAdaptive(*this); }; | ||||
| 	virtual void _fill_surface_single( | ||||
| 	    const FillParams                ¶ms,  | ||||
| 	    unsigned int                     thickness_layers, | ||||
| 	    const std::pair<float, Point>   &direction,  | ||||
| 	    ExPolygon                       &expolygon,  | ||||
| 	    Polylines                       &polylines_out); | ||||
| 
 | ||||
| 	virtual bool no_sort() const { return true; } | ||||
| }; | ||||
| 
 | ||||
| } // namespace Slic3r
 | ||||
| 
 | ||||
| #endif // slic3r_FillAdaptive_hpp_
 | ||||
|  | @ -16,6 +16,7 @@ | |||
| #include "FillRectilinear.hpp" | ||||
| #include "FillRectilinear2.hpp" | ||||
| #include "FillRectilinear3.hpp" | ||||
| #include "FillAdaptive.hpp" | ||||
| 
 | ||||
| namespace Slic3r { | ||||
| 
 | ||||
|  | @ -37,6 +38,7 @@ Fill* Fill::new_from_type(const InfillPattern type) | |||
|     case ipArchimedeanChords:   return new FillArchimedeanChords(); | ||||
|     case ipHilbertCurve:        return new FillHilbertCurve(); | ||||
|     case ipOctagramSpiral:      return new FillOctagramSpiral(); | ||||
|     case ipAdaptiveCubic:       return new FillAdaptive(); | ||||
|     default: throw std::invalid_argument("unknown type"); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -19,6 +19,10 @@ class ExPolygon; | |||
| class Surface; | ||||
| enum InfillPattern : int; | ||||
| 
 | ||||
| namespace FillAdaptive_Internal { | ||||
|     struct Octree; | ||||
| }; | ||||
| 
 | ||||
| class InfillFailedException : public std::runtime_error { | ||||
| public: | ||||
|     InfillFailedException() : std::runtime_error("Infill failed") {} | ||||
|  | @ -69,6 +73,8 @@ public: | |||
|     // In scaled coordinates. Bounding box of the 2D projection of the object.
 | ||||
|     BoundingBox bounding_box; | ||||
| 
 | ||||
|     FillAdaptive_Internal::Octree* adapt_fill_octree = nullptr; | ||||
| 
 | ||||
| public: | ||||
|     virtual ~Fill() {} | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,6 +30,10 @@ enum class SlicingMode : uint32_t; | |||
| class Layer; | ||||
| class SupportLayer; | ||||
| 
 | ||||
| namespace FillAdaptive_Internal { | ||||
|     struct Octree; | ||||
| }; | ||||
| 
 | ||||
| // Print step IDs for keeping track of the print state.
 | ||||
| enum PrintStep { | ||||
|     psSkirt,  | ||||
|  | @ -194,6 +198,7 @@ public: | |||
|     // Helpers to project custom facets on slices
 | ||||
|     void project_and_append_custom_facets(bool seam, EnforcerBlockerType type, std::vector<ExPolygons>& expolys) const; | ||||
| 
 | ||||
|     FillAdaptive_Internal::Octree* adaptiveInfillOctree() { return m_adapt_fill_octree; } | ||||
| private: | ||||
|     // to be called from Print only.
 | ||||
|     friend class Print; | ||||
|  | @ -235,6 +240,7 @@ private: | |||
|     void discover_horizontal_shells(); | ||||
|     void combine_infill(); | ||||
|     void _generate_support_material(); | ||||
|     void prepare_adaptive_infill_data(); | ||||
| 
 | ||||
|     // XYZ in scaled coordinates
 | ||||
|     Vec3crd									m_size; | ||||
|  | @ -255,6 +261,8 @@ private: | |||
|     // so that next call to make_perimeters() performs a union() before computing loops
 | ||||
|     bool                    				m_typed_slices = false; | ||||
| 
 | ||||
|     FillAdaptive_Internal::Octree*          m_adapt_fill_octree = nullptr; | ||||
| 
 | ||||
|     std::vector<ExPolygons> slice_region(size_t region_id, const std::vector<float> &z, SlicingMode mode) const; | ||||
|     std::vector<ExPolygons> slice_modifiers(size_t region_id, const std::vector<float> &z) const; | ||||
|     std::vector<ExPolygons> slice_volumes(const std::vector<float> &z, SlicingMode mode, const std::vector<const ModelVolume*> &volumes) const; | ||||
|  |  | |||
|  | @ -881,6 +881,7 @@ void PrintConfigDef::init_fff_params() | |||
|     def->enum_values.push_back("hilbertcurve"); | ||||
|     def->enum_values.push_back("archimedeanchords"); | ||||
|     def->enum_values.push_back("octagramspiral"); | ||||
|     def->enum_values.push_back("adaptivecubic"); | ||||
|     def->enum_labels.push_back(L("Rectilinear")); | ||||
|     def->enum_labels.push_back(L("Grid")); | ||||
|     def->enum_labels.push_back(L("Triangles")); | ||||
|  | @ -894,6 +895,7 @@ void PrintConfigDef::init_fff_params() | |||
|     def->enum_labels.push_back(L("Hilbert Curve")); | ||||
|     def->enum_labels.push_back(L("Archimedean Chords")); | ||||
|     def->enum_labels.push_back(L("Octagram Spiral")); | ||||
|     def->enum_labels.push_back(L("Adaptive Cubic")); | ||||
|     def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipStars)); | ||||
| 
 | ||||
|     def = this->add("first_layer_acceleration", coFloat); | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ enum AuthorizationType { | |||
| 
 | ||||
| enum InfillPattern : int { | ||||
|     ipRectilinear, ipMonotonous, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb, | ||||
|     ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipCount, | ||||
|     ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipAdaptiveCubic, ipCount, | ||||
| }; | ||||
| 
 | ||||
| enum class IroningType { | ||||
|  | @ -139,6 +139,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<InfillPattern>::g | |||
|         keys_map["hilbertcurve"]        = ipHilbertCurve; | ||||
|         keys_map["archimedeanchords"]   = ipArchimedeanChords; | ||||
|         keys_map["octagramspiral"]      = ipOctagramSpiral; | ||||
|         keys_map["adaptivecubic"]       = ipAdaptiveCubic; | ||||
|     } | ||||
|     return keys_map; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lukáš Hejl
						Lukáš Hejl