mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-05 13:40:37 +08:00
Make the printer interface a bit more user friendly.
This commit is contained in:
parent
7ec27fec92
commit
a8963b1cc1
@ -5,6 +5,7 @@ import wx, threading
|
||||
|
||||
from gui import machineCom
|
||||
from gui import icon
|
||||
from util import gcodeInterpreter
|
||||
|
||||
printWindowHandle = None
|
||||
|
||||
@ -21,6 +22,7 @@ class printWindow(wx.Frame):
|
||||
def __init__(self):
|
||||
super(printWindow, self).__init__(None, -1, title='Printing')
|
||||
self.machineCom = None
|
||||
self.machineConnected = False
|
||||
self.thread = None
|
||||
self.gcodeList = None
|
||||
self.printIdx = None
|
||||
@ -37,8 +39,8 @@ class printWindow(wx.Frame):
|
||||
|
||||
sb = wx.StaticBox(self.panel, label="Statistics")
|
||||
boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
|
||||
boxsizer.Add(wx.StaticText(self.panel, -1, "Filament: #.##m #.##g"), flag=wx.LEFT, border=5)
|
||||
boxsizer.Add(wx.StaticText(self.panel, -1, "Print time: ##:##"), flag=wx.LEFT, border=5)
|
||||
self.statsText = wx.StaticText(self.panel, -1, "Filament: #.##m #.##g\nPrint time: ##:##")
|
||||
boxsizer.Add(self.statsText, flag=wx.LEFT, border=5)
|
||||
|
||||
self.sizer.Add(boxsizer, pos=(0,0), span=(4,1), flag=wx.EXPAND)
|
||||
|
||||
@ -46,11 +48,12 @@ class printWindow(wx.Frame):
|
||||
self.loadButton = wx.Button(self.panel, -1, 'Load GCode')
|
||||
self.printButton = wx.Button(self.panel, -1, 'Print GCode')
|
||||
self.cancelButton = wx.Button(self.panel, -1, 'Cancel print')
|
||||
self.progress = wx.Gauge(self.panel, -1)
|
||||
self.sizer.Add(self.connectButton, pos=(0,1))
|
||||
self.sizer.Add(self.loadButton, pos=(1,1))
|
||||
self.sizer.Add(self.printButton, pos=(2,1))
|
||||
self.sizer.Add(self.cancelButton, pos=(3,1))
|
||||
self.sizer.Add(wx.Gauge(self.panel, -1), pos=(4,0), span=(1,2), flag=wx.EXPAND)
|
||||
self.sizer.Add(self.progress, pos=(4,0), span=(1,2), flag=wx.EXPAND)
|
||||
self.sizer.AddGrowableRow(3)
|
||||
self.sizer.AddGrowableCol(0)
|
||||
|
||||
@ -63,6 +66,24 @@ class printWindow(wx.Frame):
|
||||
self.Layout()
|
||||
self.Fit()
|
||||
self.Centre()
|
||||
|
||||
self.UpdateButtonStates()
|
||||
self.UpdateProgress()
|
||||
|
||||
def UpdateButtonStates(self):
|
||||
self.connectButton.Enable(not self.machineConnected)
|
||||
self.loadButton.Enable(self.printIdx == None)
|
||||
self.printButton.Enable(self.machineConnected and self.gcodeList != None and self.printIdx == None)
|
||||
self.cancelButton.Enable(self.printIdx != None)
|
||||
|
||||
def UpdateProgress(self):
|
||||
status = ""
|
||||
if self.printIdx == None:
|
||||
self.progress.SetValue(0)
|
||||
else:
|
||||
self.progress.SetValue(self.printIdx)
|
||||
status += 'Line: %d/%d\n' % (self.printIdx, len(self.gcodeList))
|
||||
self.statsText.SetLabel(status)
|
||||
|
||||
def OnConnect(self, e):
|
||||
if self.machineCom != None:
|
||||
@ -71,12 +92,13 @@ class printWindow(wx.Frame):
|
||||
self.machineCom = machineCom.MachineCom()
|
||||
self.thread = threading.Thread(target=self.PrinterMonitor)
|
||||
self.thread.start()
|
||||
self.UpdateButtonStates()
|
||||
|
||||
def OnLoad(self, e):
|
||||
pass
|
||||
|
||||
def OnPrint(self, e):
|
||||
if self.machineCom == None:
|
||||
if not self.machineConnected:
|
||||
return
|
||||
if self.gcodeList == None:
|
||||
return
|
||||
@ -85,9 +107,11 @@ class printWindow(wx.Frame):
|
||||
self.printIdx = 1
|
||||
self.sendLine(0)
|
||||
self.sendCnt = self.bufferLineCount
|
||||
self.UpdateButtonStates()
|
||||
|
||||
def OnCancel(self, e):
|
||||
pass
|
||||
self.printIdx = None
|
||||
self.UpdateButtonStates()
|
||||
|
||||
def OnClose(self, e):
|
||||
global printWindowHandle
|
||||
@ -105,8 +129,15 @@ class printWindow(wx.Frame):
|
||||
line = line.strip()
|
||||
if len(line) > 0:
|
||||
gcodeList.append(line)
|
||||
gcode = gcodeInterpreter.gcode()
|
||||
gcode.loadList(gcodeList)
|
||||
print gcode.extrusionAmount
|
||||
print gcode.totalMoveTimeMinute
|
||||
print "Loaded: %s (%d)" % (filename, len(gcodeList))
|
||||
self.progress.SetRange(len(gcodeList))
|
||||
self.gcodeList = gcodeList
|
||||
self.UpdateButtonStates()
|
||||
self.UpdateProgress()
|
||||
|
||||
def sendLine(self, lineNr):
|
||||
if lineNr >= len(self.gcodeList):
|
||||
@ -119,11 +150,17 @@ class printWindow(wx.Frame):
|
||||
while True:
|
||||
line = self.machineCom.readline()
|
||||
if line == None:
|
||||
self.machineConnected = False
|
||||
wx.CallAfter(self.UpdateButtonState)
|
||||
return
|
||||
while self.sendCnt > 0:
|
||||
self.sendLine(self.printIdx)
|
||||
self.printIdx += 1
|
||||
self.sendCnt -= 1
|
||||
if self.machineConnected:
|
||||
while self.sendCnt > 0:
|
||||
self.sendLine(self.printIdx)
|
||||
self.printIdx += 1
|
||||
self.sendCnt -= 1
|
||||
elif line.startswith("start"):
|
||||
self.machineConnected = True
|
||||
wx.CallAfter(self.UpdateButtonState)
|
||||
if self.printIdx != None:
|
||||
if line.startswith("ok"):
|
||||
if skipCount > 0:
|
||||
@ -131,6 +168,7 @@ class printWindow(wx.Frame):
|
||||
else:
|
||||
self.sendLine(self.printIdx)
|
||||
self.printIdx += 1
|
||||
wx.CallAfter(self.UpdateProgress)
|
||||
elif "resend" in line.lower() or "rs" in line:
|
||||
try:
|
||||
lineNr=int(line.replace("N:"," ").replace("N"," ").replace(":"," ").split()[-1])
|
||||
@ -138,3 +176,4 @@ class printWindow(wx.Frame):
|
||||
if "rs" in line:
|
||||
lineNr=int(line.split()[1])
|
||||
self.printIdx = lineNr
|
||||
|
||||
|
@ -23,9 +23,16 @@ class gcode():
|
||||
self.progressCallback = None
|
||||
|
||||
def load(self, filename):
|
||||
fileSize = os.stat(filename).st_size
|
||||
filePos = 0
|
||||
self._fileSize = os.stat(filename).st_size
|
||||
gcodeFile = open(filename, 'r')
|
||||
self._load(gcodeFile)
|
||||
gcodeFile.close()
|
||||
|
||||
def loadList(self, l):
|
||||
self._load(l)
|
||||
|
||||
def _load(self, gcodeFile):
|
||||
filePos = 0
|
||||
pos = util3d.Vector3()
|
||||
posOffset = util3d.Vector3()
|
||||
currentE = 0.0
|
||||
@ -42,10 +49,10 @@ class gcode():
|
||||
currentPath.list[0].e = totalExtrusion
|
||||
currentLayer.append(currentPath)
|
||||
for line in gcodeFile:
|
||||
if filePos != gcodeFile.tell():
|
||||
filePos = gcodeFile.tell()
|
||||
if self.progressCallback != None:
|
||||
self.progressCallback(float(filePos) / float(fileSize))
|
||||
if self.progressCallback != None:
|
||||
if filePos != gcodeFile.tell():
|
||||
filePos = gcodeFile.tell()
|
||||
self.progressCallback(float(filePos) / float(self._fileSize))
|
||||
|
||||
#Parse Cura_SF comments
|
||||
if line.startswith(';TYPE:'):
|
||||
@ -183,7 +190,6 @@ class gcode():
|
||||
pass
|
||||
else:
|
||||
print "Unknown M code:" + str(M)
|
||||
gcodeFile.close()
|
||||
self.layerList.append(currentLayer)
|
||||
self.extrusionAmount = maxExtrusion
|
||||
self.totalMoveTimeMinute = totalMoveTimeMinute
|
||||
|
Loading…
x
Reference in New Issue
Block a user