mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 12:11:15 -06:00 
			
		
		
		
	Precision raised and big item classification improved
This commit is contained in:
		
							parent
							
								
									d1bd5a51b2
								
							
						
					
					
						commit
						224c0e74ea
					
				
					 2 changed files with 9 additions and 6 deletions
				
			
		|  | @ -706,7 +706,7 @@ public: | |||
| 
 | ||||
|                 opt::StopCriteria stopcr; | ||||
|                 stopcr.max_iterations = 100; | ||||
|                 stopcr.relative_score_difference = 1e-6; | ||||
|                 stopcr.relative_score_difference = 1e-12; | ||||
|                 opt::TOptimizer<opt::Method::L_SUBPLEX> solver(stopcr); | ||||
| 
 | ||||
|                 Optimum optimum(0, 0); | ||||
|  |  | |||
|  | @ -115,15 +115,18 @@ objfunc(const PointImpl& bincenter, | |||
|     using pl = PointLike; | ||||
|     using sl = ShapeLike; | ||||
| 
 | ||||
|     static const double BIG_ITEM_TRESHOLD = 0.04; | ||||
|     static const double BIG_ITEM_TRESHOLD = 0.02; | ||||
|     static const double ROUNDNESS_RATIO = 0.5; | ||||
|     static const double DENSITY_RATIO = 1.0 - ROUNDNESS_RATIO; | ||||
| 
 | ||||
|     // We will treat big items (compared to the print bed) differently
 | ||||
| 
 | ||||
|     auto isBig = [&areacache, bin_area](double a) { | ||||
|         bool t = areacache.empty() ? true :  a > 0.5*areacache.front(); | ||||
|         return a/bin_area > BIG_ITEM_TRESHOLD || t; | ||||
|         double farea = areacache.empty() ? 0 : areacache.front(); | ||||
|         bool fbig = farea / bin_area > BIG_ITEM_TRESHOLD; | ||||
|         bool abig = a/bin_area > BIG_ITEM_TRESHOLD; | ||||
|         bool rbig = fbig && a > 0.5*farea; | ||||
|         return abig || rbig; | ||||
|     }; | ||||
| 
 | ||||
|     // If a new bin has been created:
 | ||||
|  | @ -258,7 +261,7 @@ void fillConfig(PConf& pcfg) { | |||
| 
 | ||||
|     // The accuracy of optimization.
 | ||||
|     // Goes from 0.0 to 1.0 and scales performance as well
 | ||||
|     pcfg.accuracy = 0.6f; | ||||
|     pcfg.accuracy = 1.0f; | ||||
| } | ||||
| 
 | ||||
| template<class TBin> | ||||
|  | @ -355,7 +358,7 @@ public: | |||
|             auto diff = d - 2*bin.radius(); | ||||
| 
 | ||||
|             if(diff > 0) { | ||||
|                 if( item.area() > 0.01*bin_area_ && item.vertexCount() < 20) { | ||||
|                 if( item.area() > 0.01*bin_area_ && item.vertexCount() < 30) { | ||||
|                     pile.emplace_back(item.transformedShape()); | ||||
|                     auto chull = ShapeLike::convexHull(pile); | ||||
|                     pile.pop_back(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tamasmeszaros
						tamasmeszaros