root_window.unbind("`") root_window.unbind("1") root_window.unbind("2") root_window.unbind("3") root_window.unbind("4") root_window.unbind("5") root_window.unbind("6") root_window.unbind("7") root_window.unbind("8") root_window.unbind("9") root_window.unbind("0") root_window.bind("1", lambda event: fro.step(-1)) root_window.bind("2", lambda event: fro.step(+1)) root_window.bind("3", lambda event: rro.step(-1)) root_window.bind("4", lambda event: rro.step(+1)) root_window.bind("5", lambda event: sro.step(-1)) root_window.bind("6", lambda event: sro.step(+1)) max_rapid_override = 100 min_feed_override = 0 min_rapid_override = 0 if inifile.find("DISPLAY", "MIN_SPINDLE_OVERRIDE"): min_spindle_override = int( float( inifile.find("DISPLAY", "MIN_SPINDLE_OVERRIDE" ) ) * 100.0 ) else: min_spindle_override = max_spindle_override def set_spindlerate(n): widgets.spinoverride.set(n) def clamp(x, low, high): return max(low, min(x, high)) def val2rate(val, val_max, power): rate = val_max * ( val / val_max ) ** power return round(rate) def rate2val(rate, val_max, power): val = val_max * ( float( rate ) / val_max ) ** ( 1.0 / power ) return round(val) class xro: def __init__(self, get_rate, set_rate, rate_min, rate_max, power=3.0, linear_threshold_rate=20.0): self.get_rate = get_rate self.set_rate = set_rate self.rate_min = float( rate_min ) self.rate_max = float( rate_max ) self.linear_threshold_rate = float( linear_threshold_rate ) self.power = float( power ) self.rate = float( self.get_rate() ) * 100.0 self.val_max = self.rate_max self.val_min = rate2val( self.rate_min, self.val_max, self.power ) self.val = rate2val( self.rate, self.val_max, self.power ) self.linear_threshold_val = rate2val( self.linear_threshold_rate, self.val_max, self.power ) def step(self, n): s.poll() n = float(n) self.rate = self.get_rate() * 100.0 self.val = rate2val( self.rate, self.val_max, self.power ) self.val += n if( self.val >= self.linear_threshold_val ): self.rate = val2rate( self.val, self.val_max, self.power ) else: self.rate += n self.rate = clamp(self.rate, self.rate_min, self.rate_max) self.set_rate( self.rate ) power = 3.0 linear_threshold_rate = 20.0 fro = xro(lambda: s.feedrate, set_feedrate, min_feed_override, max_feed_override , power, linear_threshold_rate) rro = xro(lambda: s.rapidrate, set_rapidrate, min_rapid_override, max_rapid_override , power, linear_threshold_rate) sro = xro(lambda: s.spindle[0]['override'], set_spindlerate, min_spindle_override, max_spindle_override, power, linear_threshold_rate)