from newui import util3d
class gcode():
- def __init__(self, filename):
+ def __init__(self):
self.regMatch = {}
+ self.layerCount = 0
+ self.pathList = []
+ self.extrusionAmount = 0
+ self.totalMoveTimeMinute = 0
+ self.progressCallback = None
+ def load(self, filename):
fileSize = os.stat(filename).st_size
filePos = 0
gcodeFile = open(filename, 'r')
for line in gcodeFile:
if filePos != gcodeFile.tell():
filePos = gcodeFile.tell()
- #print float(filePos) / float(fileSize)
+ if self.progressCallback != None:
+ self.progressCallback(float(filePos) / float(fileSize))
if line.startswith(';TYPE:'):
pathType = line[6:].strip()
if pathType != "CUSTOM":
if __name__ == '__main__':
for filename in sys.argv[1:]:
- gcode(filename)
+ gcode().load(filename)
self.triangleMesh = None\r
self.gcode = None\r
self.modelFilename = None\r
+ self.loadingProgressAmount = 0\r
+ self.loadThread = None\r
self.machineSize = Vector3(float(profile.getPreference('machine_width')), float(profile.getPreference('machine_depth')), float(profile.getPreference('machine_height')))\r
self.machineCenter = Vector3(0, 0, 0)\r
\r
self.gcodeFilename = filename[: filename.rfind('.')] + "_export.gcode"\r
self.logFilename = filename[: filename.rfind('.')] + "_export.log"\r
#Do the STL file loading in a background thread so we don't block the UI.\r
- threading.Thread(target=self.doFileLoad).start()\r
+ if self.loadThread != None and self.loadThread.isAlive():\r
+ self.loadThread.join()\r
+ self.loadThread = threading.Thread(target=self.doFileLoadThread)\r
+ self.loadThread.daemon = True\r
+ self.loadThread.start()\r
\r
def loadReModelFile(self, filename):\r
#Only load this again if the filename matches the file we have already loaded (for auto loading GCode after slicing)\r
if self.modelFilename != filename:\r
return\r
- threading.Thread(target=self.doFileLoad).start()\r
+ self.loadModelFile(filename)\r
\r
- def doFileLoad(self):\r
+ def doFileLoadThread(self):\r
if os.path.isfile(self.modelFilename) and self.modelFileTime != os.stat(self.modelFilename).st_mtime:\r
self.modelFileTime = os.stat(self.modelFilename).st_mtime\r
triangleMesh = fabmetheus_interpret.getCarving(self.modelFilename)\r
\r
if os.path.isfile(self.gcodeFilename) and self.gcodeFileTime != os.stat(self.gcodeFilename).st_mtime:\r
self.gcodeFileTime = os.stat(self.gcodeFilename).st_mtime\r
- gcode = gcodeInterpreter.gcode(self.gcodeFilename)\r
+ gcode = gcodeInterpreter.gcode()\r
+ gcode.progressCallback = self.loadProgress\r
+ gcode.load(self.gcodeFilename)\r
+ self.loadingProgressAmount = 0\r
self.gcodeDirty = False\r
self.errorList = []\r
self.gcode = gcode\r
self.errorList = errorList\r
wx.CallAfter(self.glCanvas.Refresh)\r
\r
+ def loadProgress(self, progress):\r
+ self.loadingProgressAmount = progress\r
+ wx.CallAfter(self.glCanvas.Refresh)\r
+ \r
def updateToolbar(self):\r
self.layerSpin.Show(self.gcode != None)\r
if self.gcode != None:\r
glVertex3f(v3.x, v3.y, v3.z - 0.01)\r
glVertex3f(v2.x, v2.y, v2.z - 0.01)\r
glEnd()\r
- for v in path['list']:\r
- glBegin(GL_TRIANGLE_FAN)\r
- glVertex3f(v.x, v.y, v.z - 0.001)\r
- for i in xrange(0, 16+1):\r
- if path['pathType'] == 'FILL': #Remove depth buffer fighting on infill/wall overlap\r
- glVertex3f(v.x + math.cos(math.pi*2/16*i) * lineWidth, v.y + math.sin(math.pi*2/16*i) * lineWidth, v.z - 0.02)\r
- else:\r
- glVertex3f(v.x + math.cos(math.pi*2/16*i) * lineWidth, v.y + math.sin(math.pi*2/16*i) * lineWidth, v.z - 0.01)\r
- glEnd()\r
+ \r
+ #for v in path['list']:\r
+ # glBegin(GL_TRIANGLE_FAN)\r
+ # glVertex3f(v.x, v.y, v.z - 0.001)\r
+ # for i in xrange(0, 16+1):\r
+ # if path['pathType'] == 'FILL': #Remove depth buffer fighting on infill/wall overlap\r
+ # glVertex3f(v.x + math.cos(math.pi*2/16*i) * lineWidth, v.y + math.sin(math.pi*2/16*i) * lineWidth, v.z - 0.02)\r
+ # else:\r
+ # glVertex3f(v.x + math.cos(math.pi*2/16*i) * lineWidth, v.y + math.sin(math.pi*2/16*i) * lineWidth, v.z - 0.01)\r
+ # glEnd()\r
else:\r
glBegin(GL_LINE_STRIP)\r
for v in path['list']:\r
glVertex3f(err[0].x, err[0].y, err[0].z)\r
glVertex3f(err[1].x, err[1].y, err[1].z)\r
glEnd()\r
+ \r
glFlush()\r
\r
def InitGL(self):\r