Merge pull request #1261 from wgm4321/Development
Add Filament menu and add Filament/Retract settings to config store.
This commit is contained in:
		@@ -215,6 +215,15 @@ int extruder_multiply[EXTRUDERS] = {100
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
};
 | 
			
		||||
bool volumetric_enabled = false;
 | 
			
		||||
float filament_size[EXTRUDERS] = { DEFAULT_NOMINAL_FILAMENT_DIA
 | 
			
		||||
  #if EXTRUDERS > 1
 | 
			
		||||
      , DEFAULT_NOMINAL_FILAMENT_DIA
 | 
			
		||||
    #if EXTRUDERS > 2
 | 
			
		||||
       , DEFAULT_NOMINAL_FILAMENT_DIA
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
};
 | 
			
		||||
float volumetric_multiplier[EXTRUDERS] = {1.0
 | 
			
		||||
  #if EXTRUDERS > 1
 | 
			
		||||
    , 1.0
 | 
			
		||||
@@ -2823,21 +2832,7 @@ Sigma_Exit:
 | 
			
		||||
    #endif //BLINKM
 | 
			
		||||
    case 200: // M200 D<millimeters> set filament diameter and set E axis units to cubic millimeters (use S0 to set back to millimeters).
 | 
			
		||||
      {
 | 
			
		||||
        float area = .0;
 | 
			
		||||
        float radius = .0;
 | 
			
		||||
        if(code_seen('D')) {
 | 
			
		||||
          radius = (float)code_value() * .5;
 | 
			
		||||
          if(radius == 0) {
 | 
			
		||||
            area = 1;
 | 
			
		||||
          } else {
 | 
			
		||||
            area = M_PI * pow(radius, 2);
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          //reserved for setting filament diameter via UFID or filament measuring device
 | 
			
		||||
          break;
 | 
			
		||||
        
 | 
			
		||||
          
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        tmp_extruder = active_extruder;
 | 
			
		||||
        if(code_seen('T')) {
 | 
			
		||||
          tmp_extruder = code_value();
 | 
			
		||||
@@ -2847,7 +2842,32 @@ Sigma_Exit:
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        volumetric_multiplier[tmp_extruder] = 1 / area;
 | 
			
		||||
 | 
			
		||||
        float area = .0;
 | 
			
		||||
        if(code_seen('D')) {
 | 
			
		||||
		  float diameter = (float)code_value();
 | 
			
		||||
		  if (diameter == 0.0) {
 | 
			
		||||
			// setting any extruder filament size disables volumetric on the assumption that
 | 
			
		||||
			// slicers either generate in extruder values as cubic mm or as as filament feeds
 | 
			
		||||
			// for all extruders
 | 
			
		||||
		    volumetric_enabled = false;
 | 
			
		||||
		  } else {
 | 
			
		||||
            filament_size[tmp_extruder] = (float)code_value();
 | 
			
		||||
			// make sure all extruders have some sane value for the filament size
 | 
			
		||||
			filament_size[0] = (filament_size[0] == 0.0 ? DEFAULT_NOMINAL_FILAMENT_DIA : filament_size[0]);
 | 
			
		||||
            #if EXTRUDERS > 1
 | 
			
		||||
			filament_size[1] = (filament_size[1] == 0.0 ? DEFAULT_NOMINAL_FILAMENT_DIA : filament_size[1]);
 | 
			
		||||
            #if EXTRUDERS > 2
 | 
			
		||||
			filament_size[2] = (filament_size[2] == 0.0 ? DEFAULT_NOMINAL_FILAMENT_DIA : filament_size[2]);
 | 
			
		||||
            #endif
 | 
			
		||||
            #endif
 | 
			
		||||
			volumetric_enabled = true;
 | 
			
		||||
		  }
 | 
			
		||||
        } else {
 | 
			
		||||
          //reserved for setting filament diameter via UFID or filament measuring device
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
		calculate_volumetric_multipliers();
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case 201: // M201
 | 
			
		||||
@@ -4580,3 +4600,29 @@ bool setTargetedHotend(int code){
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
float calculate_volumetric_multiplier(float diameter) {
 | 
			
		||||
	float area = .0;
 | 
			
		||||
	float radius = .0;
 | 
			
		||||
 | 
			
		||||
	radius = diameter * .5;
 | 
			
		||||
	if (! volumetric_enabled || radius == 0) {
 | 
			
		||||
		area = 1;
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		area = M_PI * pow(radius, 2);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1.0 / area;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void calculate_volumetric_multipliers() {
 | 
			
		||||
	volumetric_multiplier[0] = calculate_volumetric_multiplier(filament_size[0]);
 | 
			
		||||
#if EXTRUDERS > 1
 | 
			
		||||
	volumetric_multiplier[1] = calculate_volumetric_multiplier(filament_size[1]);
 | 
			
		||||
#if EXTRUDERS > 2
 | 
			
		||||
	volumetric_multiplier[2] = calculate_volumetric_multiplier(filament_size[2]);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user