1 from __future__ import absolute_import
2 __copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
6 from Cura.util import profile
8 class gcodeGenerator(object):
10 self._feedPrint = profile.getProfileSettingFloat('print_speed') * 60
11 self._feedTravel = profile.getProfileSettingFloat('travel_speed') * 60
12 self._feedRetract = profile.getProfileSettingFloat('retraction_speed') * 60
13 filamentRadius = profile.getProfileSettingFloat('filament_diameter') / 2
14 filamentArea = math.pi * filamentRadius * filamentRadius
15 self._ePerMM = (profile.getProfileSettingFloat('nozzle_size') * 0.1) / filamentArea
21 self._list = ['M110', 'G92 E0']
23 def setPrintSpeed(self, speed):
24 self._feedPrint = speed * 60
26 def setExtrusionRate(self, lineWidth, layerHeight):
27 filamentRadius = profile.getProfileSettingFloat('filament_diameter') / 2
28 filamentArea = math.pi * filamentRadius * filamentRadius
29 self._ePerMM = (lineWidth * layerHeight) / filamentArea
37 def addMove(self, x=None, y=None, z=None):
48 cmd += "F%d" % (self._feedTravel)
51 def addPrime(self, amount=5):
52 self._eValue += amount
53 self._list += ['G1 E%f F%f' % (self._eValue, self._feedRetract)]
55 def addRetract(self, amount=5):
56 self._eValue -= amount
57 self._list += ['G1 E%f F%f' % (self._eValue, self._feedRetract)]
59 def _addExtrude(self, x=None, y=None, z=None):
72 self._eValue += math.sqrt((self._x - oldX) * (self._x - oldX) + (self._y - oldY) * (self._y - oldY)) * self._ePerMM
73 cmd += "E%f F%d" % (self._eValue, self._feedPrint)
76 def addExtrude(self, x=None, y=None, z=None):
77 if x is not None and abs(self._x - x) > 10:
78 self.addExtrude((self._x + x) / 2.0, y, z)
79 self.addExtrude(x, y, z)
81 if y is not None and abs(self._y - y) > 10:
82 self.addExtrude(x, (self._y + y) / 2.0, z)
83 self.addExtrude(x, y, z)
85 self._addExtrude(x, y, z)
90 def addCmd(self, cmd):