added dictionary algorithm to speed up feedrate and intensity override
This commit is contained in:
parent
1f2d9f1243
commit
ced9688647
1 changed files with 16 additions and 4 deletions
|
|
@ -82,6 +82,8 @@ class MachineCom(object):
|
||||||
self._actual_feedrate = None
|
self._actual_feedrate = None
|
||||||
self._intensity_factor = 1
|
self._intensity_factor = 1
|
||||||
self._actual_intensity = None
|
self._actual_intensity = None
|
||||||
|
self._feedrate_dict = {}
|
||||||
|
self._intensity_dict = {}
|
||||||
|
|
||||||
# regular expressions
|
# regular expressions
|
||||||
self._regex_command = re.compile("^\s*\$?([GM]\d+|[TH])")
|
self._regex_command = re.compile("^\s*\$?([GM]\d+|[TH])")
|
||||||
|
|
@ -643,6 +645,7 @@ class MachineCom(object):
|
||||||
temp = value / 100.0
|
temp = value / 100.0
|
||||||
if temp > 0:
|
if temp > 0:
|
||||||
self._feedrate_factor = temp
|
self._feedrate_factor = temp
|
||||||
|
self._feedrate_dict = {}
|
||||||
if self._actual_feedrate is not None:
|
if self._actual_feedrate is not None:
|
||||||
temp = round(self._actual_feedrate * self._feedrate_factor)
|
temp = round(self._actual_feedrate * self._feedrate_factor)
|
||||||
# TODO replace with value from printer profile
|
# TODO replace with value from printer profile
|
||||||
|
|
@ -654,6 +657,7 @@ class MachineCom(object):
|
||||||
temp = value / 100.0
|
temp = value / 100.0
|
||||||
if temp >= 0:
|
if temp >= 0:
|
||||||
self._intensity_factor = temp
|
self._intensity_factor = temp
|
||||||
|
self._intensity_dict = {}
|
||||||
if self._actual_intensity is not None:
|
if self._actual_intensity is not None:
|
||||||
temp = round(self._actual_intensity * self._intensity_factor)
|
temp = round(self._actual_intensity * self._intensity_factor)
|
||||||
if temp > 1000:
|
if temp > 1000:
|
||||||
|
|
@ -665,8 +669,12 @@ class MachineCom(object):
|
||||||
obj = self._regex_feedrate.search(cmd)
|
obj = self._regex_feedrate.search(cmd)
|
||||||
if obj is not None:
|
if obj is not None:
|
||||||
feedrate_cmd = cmd[obj.start():obj.end()]
|
feedrate_cmd = cmd[obj.start():obj.end()]
|
||||||
self._actual_feedrate = int(feedrate_cmd[1:])
|
if feedrate_cmd in self._feedrate_dict:
|
||||||
new_feedrate = round(self._actual_feedrate * self._feedrate_factor)
|
new_feedrate = self._feedrate_dict[feedrate_cmd]
|
||||||
|
else:
|
||||||
|
self._actual_feedrate = int(feedrate_cmd[1:])
|
||||||
|
new_feedrate = round(self._actual_feedrate * self._feedrate_factor)
|
||||||
|
self._feedrate_dict[feedrate_cmd] = new_feedrate
|
||||||
# TODO replace with value from printer profile
|
# TODO replace with value from printer profile
|
||||||
if new_feedrate > 5000:
|
if new_feedrate > 5000:
|
||||||
new_feedrate = 5000
|
new_feedrate = 5000
|
||||||
|
|
@ -682,8 +690,12 @@ class MachineCom(object):
|
||||||
obj = self._regex_intensity.search(cmd)
|
obj = self._regex_intensity.search(cmd)
|
||||||
if obj is not None:
|
if obj is not None:
|
||||||
intensity_cmd = cmd[obj.start():obj.end()]
|
intensity_cmd = cmd[obj.start():obj.end()]
|
||||||
self._actual_intensity = int(intensity_cmd[1:])
|
if intensity_cmd in self._intensity_dict:
|
||||||
new_intensity = round(self._actual_intensity * self._intensity_factor)
|
new_intensity = self._intensity_dict[intensity_cmd]
|
||||||
|
else:
|
||||||
|
self._actual_intensity = int(intensity_cmd[1:])
|
||||||
|
new_intensity = round(self._actual_intensity * self._intensity_factor)
|
||||||
|
self._intensity_dict[intensity_cmd] = new_intensity
|
||||||
if new_intensity > 1000:
|
if new_intensity > 1000:
|
||||||
new_intensity = 1000
|
new_intensity = 1000
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue