mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Refinement of the slice index interface
This commit is contained in:
		
							parent
							
								
									c72522d566
								
							
						
					
					
						commit
						2a31f5e6fc
					
				
					 2 changed files with 15 additions and 1 deletions
				
			
		|  | @ -564,6 +564,8 @@ void SLAPrint::process() | |||
|     // layers according to quantized height levels
 | ||||
|     std::map<LevelID, LayerRefs> levels; | ||||
| 
 | ||||
|     // We have the layer polygon collection but we need to unite them into
 | ||||
|     // an index where the key is the height level in discrete levels (clipper)
 | ||||
|     auto index_slices = [this, ilh, ilhd, &levels](SLAPrintObject& po) { | ||||
|         auto sih = LevelID(scale_(ilh)); | ||||
| 
 | ||||
|  | @ -606,11 +608,18 @@ void SLAPrint::process() | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // shortcut for empty index into the slice vectors
 | ||||
|         static const auto EMPTY_SLICE = SLAPrintObject::SliceRecord::NONE; | ||||
| 
 | ||||
|         for(int i = 0; i < oslices.size(); ++i) { | ||||
|             LevelID h = levelids[i]; | ||||
|             auto& lyrs = levels[h]; // this initializes a new record
 | ||||
|             lyrs.emplace_back(oslices[i], po.m_instances); | ||||
| 
 | ||||
|             // now for the public slice index:
 | ||||
|             SLAPrintObject::SliceRecord& sr = po.m_slice_index[h]; | ||||
|             // There should be only one slice layer for each print object
 | ||||
|             assert(sr.model_slices_idx == EMPTY_SLICE); | ||||
|             sr.model_slices_idx = i; | ||||
|         } | ||||
| 
 | ||||
|  | @ -625,6 +634,7 @@ void SLAPrint::process() | |||
|                 lyrs.emplace_back(sslices[i], po.m_instances); | ||||
| 
 | ||||
|                 SLAPrintObject::SliceRecord& sr = po.m_slice_index[h]; | ||||
|                 assert(sr.support_slices_idx == EMPTY_SLICE); | ||||
|                 sr.support_slices_idx = i; | ||||
|             } | ||||
|         } | ||||
|  |  | |||
|  | @ -87,12 +87,16 @@ public: | |||
|     const std::vector<ExPolygons>& get_model_slices() const; | ||||
|     const std::vector<ExPolygons>& get_support_slices() const; | ||||
| 
 | ||||
|     // An index record referencing the slices
 | ||||
|     // (get_model_slices(), get_support_slices()) where the keys are the height
 | ||||
|     // levels of the model in scaled-clipper coordinates. The levels correspond
 | ||||
|     // to the z coordinate of the object coordinate system.
 | ||||
|     struct SliceRecord { | ||||
|         using Key = long long; | ||||
|         inline static float scale_back(Key h) { return float(scale_(h)); } | ||||
| 
 | ||||
|         using Idx = size_t; | ||||
|         static const Idx NONE = ULONG_MAX; // std::numeric_limits<Idx>::max() // damn msvc 2013... ;
 | ||||
|         static const Idx NONE = Idx(-1); // this will be the max limit of size_t
 | ||||
| 
 | ||||
|         Idx model_slices_idx = NONE; | ||||
|         Idx support_slices_idx = NONE; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tamasmeszaros
						tamasmeszaros