예제 #1
0
	def __init__(self, parent):
		self.parent = parent
		self.history = parent.history
		wx.Frame.__init__(self, None, wx.ID_ANY, TITLE_PREFIX, size=(600, 600))
		self.Show()
		ico = wx.Icon(os.path.join(cmdFolder, "images", "geditico.png"), wx.BITMAP_TYPE_PNG)
		self.SetIcon(ico)
		
		self.Bind(wx.EVT_CLOSE, self.onClose)
		self.settings = Settings(cmdFolder)
		self.propDlg = None
		self.legend = None
		
		self.log = self.parent.log
		
		self.images = Images(os.path.join(cmdFolder, "images"))
		
		self.shiftX = 0
		self.shiftY = 0
		self.modified = False
		self.filename = None
		self.importFileName = None
		self.okToImport = False
		
		self.gObj = self.loadGCode(self.filename)
		if self.gObj is not None:
			self.updateTitle()

		self.gcFrame = GcFrame(self, self.gObj, self.settings)
		self.stLayerText = wx.StaticText(self, wx.ID_ANY, "Layer Height:   0.00")

		ht = self.gcFrame.GetSize().Get()[1] - 2*BUTTONDIM[1] - 20
		
		if self.gObj is None:
			lmax = 1
		else:
			lmax = self.gObj.layerCount()-1
		
		self.slLayers = wx.Slider(
			self, wx.ID_ANY, 0, 0, 1000, size=(-1, ht), 
			style=wx.SL_VERTICAL | wx.SL_AUTOTICKS | wx.SL_LABELS | wx.SL_INVERSE)
		self.Bind(wx.EVT_SCROLL, self.onLayerScroll, self.slLayers)
		if self.gObj is None:
			self.slLayers.Enable(False)
			
		self.lcGCode = GcodeListCtrl(self, self.gcode, self.images)
		self.lcGCode.setLineNumbers(self.settings.uselinenbrs)
		self.currentLayer = 0
		self.setLayerText()
		if self.gObj is not None:
			self.lcGCode.setLayerBounds(self.gObj.getGCodeLines(0))
			
		self.bShift = wx.BitmapButton(self, wx.ID_ANY, self.images.pngShift, size=BUTTONDIM)
		self.bShift.SetToolTip("Move model in x/y direction")
		self.Bind(wx.EVT_BUTTON, self.doShiftModel, self.bShift)
		self.bShift.Enable(False)

		self.bModTemp = wx.BitmapButton(self, wx.ID_ANY, self.images.pngModtemp, size=BUTTONDIM)
		self.bModTemp.SetToolTip("Modify Temperatures")
		self.Bind(wx.EVT_BUTTON, self.onModTemps, self.bModTemp)
		self.bModTemp.Enable(False)
				
		self.bModSpeed = wx.BitmapButton(self, wx.ID_ANY, self.images.pngModspeed, size=BUTTONDIM)
		self.bModSpeed.SetToolTip("Modify Speed")
		self.Bind(wx.EVT_BUTTON, self.onModSpeed, self.bModSpeed)
		self.bModSpeed.Enable(False)
		
		self.bFilChange = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFilchange, size=BUTTONDIM)
		self.bFilChange.SetToolTip("Insert G Code to assist with changing filament")
		self.Bind(wx.EVT_BUTTON, self.onFilChange, self.bFilChange)
		self.bFilChange.Enable(False)
		
		self.bEdit = wx.BitmapButton(self, wx.ID_ANY, self.images.pngEdit, size=BUTTONDIM)
		self.bEdit.SetToolTip("Free edit G Code")
		self.Bind(wx.EVT_BUTTON, self.onEditGCode, self.bEdit)
		self.bEdit.Enable(False)
		
		self.bUp = wx.BitmapButton(self, wx.ID_ANY, self.images.pngUp, size=BUTTONDIM)
		self.bUp.SetToolTip("Move up one layer")
		self.Bind(wx.EVT_BUTTON, self.onUp, self.bUp)
		self.bUp.Enable(False)
		
		self.bDown = wx.BitmapButton(self, wx.ID_ANY, self.images.pngDown, size=BUTTONDIM)
		self.bDown.SetToolTip("Move down one layer")
		self.Bind(wx.EVT_BUTTON, self.onDown, self.bDown)
		self.bDown.Enable(False)
		
		self.bInfo = wx.BitmapButton(self, wx.ID_ANY, self.images.pngInfo, size=BUTTONDIM)
		self.bInfo.SetToolTip("Information")
		self.Bind(wx.EVT_BUTTON, self.onInfo, self.bInfo)
		self.bInfo.Enable(False)
		
		self.bLegend = wx.BitmapButton(self, wx.ID_ANY, self.images.pngLegend, size=BUTTONDIM)
		self.bLegend.SetToolTip("Display a color legend")
		self.Bind(wx.EVT_BUTTON, self.onLegend, self.bLegend)
		self.bLegend.Enable(True)
		
		self.bSaveLayers = wx.BitmapButton(self, wx.ID_ANY, self.images.pngSavelayers, size=BUTTONDIM)
		self.bSaveLayers.SetToolTip("Save specific layers to a file")
		self.Bind(wx.EVT_BUTTON, self.onSaveLayers, self.bSaveLayers)
		self.bSaveLayers.Enable(False)

		self.bOpen = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFileopen, size=BUTTONDIM)
		self.bOpen.SetToolTip("Open a G Code file")
		self.Bind(wx.EVT_BUTTON, self.onOpen, self.bOpen)
		
		self.bImport = wx.BitmapButton(self, wx.ID_ANY, self.images.pngImport, size=BUTTONDIM)
		self.bImport.SetToolTip("Import the current toolbox G Code file")
		self.Bind(wx.EVT_BUTTON, self.onImport, self.bImport)
		self.bImport.Enable(False)
		
		self.bImportQ = wx.BitmapButton(self, wx.ID_ANY, self.images.pngNext, size=BUTTONDIM)
		self.bImportQ.SetToolTip("Import the next G Code file from the queue")
		self.Bind(wx.EVT_BUTTON, self.onImportFromQueue, self.bImportQ)
		self.bImportQ.Enable(False)
		
		self.bExport = wx.BitmapButton(self, wx.ID_ANY, self.images.pngExport, size=BUTTONDIM)
		self.bExport.SetToolTip("Export the current toolbox G Code file")
		self.Bind(wx.EVT_CHECKBOX, self.onExport, self.bExport)
		self.bExport.Enable(not self.settings.autoexport)
		
		self.cbExport = wx.CheckBox(self, wx.ID_ANY, "Auto-export")
		self.cbExport.SetToolTip("Auto-export the current G Code file when saving")
		self.Bind(wx.EVT_CHECKBOX, self.onCbExport, self.cbExport)
		
		self.cbEnqueue = wx.CheckBox(self, wx.ID_ANY, "Add to queue")
		self.cbEnqueue.SetToolTip("Enqueue the current G Code file on the end of the G Code queue when exporting")
		self.Bind(wx.EVT_BUTTON, self.onEnqueue, self.cbEnqueue)
		
		self.bSave = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFilesave, size=BUTTONDIM)
		self.bSave.SetToolTip("Save G Code to the current file")
		self.Bind(wx.EVT_BUTTON, self.onSave, self.bSave)
		self.bSave.Enable(False)
		
		self.bSaveAs = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFilesaveas, size=BUTTONDIM)
		self.bSaveAs.SetToolTip("Save G Code to a different file")
		self.Bind(wx.EVT_BUTTON, self.onSaveAs, self.bSaveAs)
		self.bSaveAs.Enable(False)
		
		self.cbShowMoves = wx.CheckBox(self, wx.ID_ANY, "Show Moves")
		self.cbShowMoves.SetToolTip("Show/Hide non-extrusion moves")
		self.cbShowMoves.SetValue(self.settings.showmoves)
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowMoves, self.cbShowMoves)

		self.cbShowPrevious = wx.CheckBox(self, wx.ID_ANY, "Show Previous Layer")
		self.cbShowPrevious.SetToolTip("Show/Hide the previous layer")
		self.cbShowPrevious.SetValue(self.settings.showprevious)
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowPrevious, self.cbShowPrevious)

		self.cbShowRetractions = wx.CheckBox(self, wx.ID_ANY, "Show Retractions")
		self.cbShowRetractions.SetToolTip("Show/Hide retractions")
		self.cbShowRetractions.SetValue(self.settings.showretractions)
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowRetractions, self.cbShowRetractions)

		self.cbShowRevRetractions = wx.CheckBox(self, wx.ID_ANY, "Show Reverse Retractions")
		self.cbShowRevRetractions.SetToolTip("Show/Hide reverse retractions")
		self.cbShowRevRetractions.SetValue(self.settings.showrevretractions)
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowRevRetractions, self.cbShowRevRetractions)
		
		self.cmbTool = wx.ComboBox(self, wx.ID_ANY, "None", choices = ["None", "0", "1", "2", "3"],
			style = wx.CB_DROPDOWN + wx.CB_READONLY)
		self.cmbTool.SetToolTip("Choose which tool, if any, is highlighted in the display")
		self.Bind(wx.EVT_COMBOBOX, self.onCmbTool, self.cmbTool)

		self.cbLineNbrs = wx.CheckBox(self, wx.ID_ANY, "Line Numbers")
		self.cbLineNbrs.SetToolTip("Use G Code line numbers")
		self.cbLineNbrs.SetValue(self.settings.uselinenbrs)
		self.Bind(wx.EVT_CHECKBOX, self.onCbLineNbrs, self.cbLineNbrs)
		
		self.bBracketStart = wx.BitmapButton(self, wx.ID_ANY, self.images.pngBracketopen, size=BUTTONDIM)
		self.bBracketStart.SetToolTip("Mark the beginning of a block of G code")
		self.Bind(wx.EVT_BUTTON, self.onBracketStart, self.bBracketStart)
		self.bBracketStart.Enable(False)
		
		self.bBracketEnd = wx.BitmapButton(self, wx.ID_ANY, self.images.pngBracketclose, size=BUTTONDIM)
		self.bBracketEnd.SetToolTip("Mark the end of a block of G code")
		self.Bind(wx.EVT_BUTTON, self.onBracketEnd, self.bBracketEnd)
		self.bBracketEnd.Enable(False)
		
		self.bBracketDel = wx.BitmapButton(self, wx.ID_ANY, self.images.pngBracketdel, size=BUTTONDIM)
		self.bBracketDel.SetToolTip("Delete the marked block of G code")
		self.Bind(wx.EVT_BUTTON, self.onBracketDel, self.bBracketDel)
		self.bBracketDel.Enable(False)
		
			
		btnszr = wx.BoxSizer(wx.HORIZONTAL)
		btnszr.AddSpacer(20)
		btnszr.Add(self.bShift)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bModTemp)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bModSpeed)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bFilChange)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bEdit)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bInfo)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bLegend)
		btnszr.AddSpacer(50)
		btnszr.Add(self.bSaveLayers)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bOpen)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bImport)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bImportQ)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bExport)
		btnszr.AddSpacer(5)
		
		optszr = wx.BoxSizer(wx.VERTICAL)
		optszr.AddSpacer(1)
		optszr.Add(self.cbExport)
		optszr.AddSpacer(1)
		optszr.Add(self.cbEnqueue)
		btnszr.Add(optszr)
		
		btnszr.AddSpacer(10)
		btnszr.Add(self.bSave)
		btnszr.AddSpacer(10)
		btnszr.Add(self.bSaveAs)
		btnszr.AddSpacer(10)

		hszr = wx.BoxSizer(wx.HORIZONTAL)
		hszr.AddSpacer(20)
		
		vszr = wx.BoxSizer(wx.VERTICAL)
		vszr.Add(self.gcFrame)
		vszr.Add(self.stLayerText, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)
		vszr.AddSpacer(10)

		opthszr = wx.BoxSizer(wx.HORIZONTAL)
		optszr = wx.BoxSizer(wx.VERTICAL)
		optszr.AddSpacer(1)
		optszr.Add(self.cbShowMoves)
		optszr.AddSpacer(1)
		optszr.Add(self.cbShowPrevious)
		opthszr.Add(optszr)
		opthszr.AddSpacer(10)
		optszr = wx.BoxSizer(wx.VERTICAL)
		optszr.AddSpacer(1)
		optszr.Add(self.cbShowRetractions)
		optszr.AddSpacer(1)
		optszr.Add(self.cbShowRevRetractions)
		opthszr.Add(optszr)
		opthszr.AddSpacer(10)
		optszr = wx.BoxSizer(wx.VERTICAL)
		optszr.AddSpacer(1)
		hsz = wx.BoxSizer(wx.HORIZONTAL)
		hsz.Add(wx.StaticText(self, wx.ID_ANY, "Tool to Hi-light: "), 1, wx.TOP, 5)
		hsz.AddSpacer(5)
		hsz.Add(self.cmbTool)
		optszr.Add(hsz)
		opthszr.Add(optszr)
		vszr.Add(opthszr)
		hszr.Add(vszr)

		szNav = wx.BoxSizer(wx.VERTICAL)
		szNav.Add(self.bUp, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)
		szNav.AddSpacer(10)
		szNav.Add(self.slLayers)
		szNav.AddSpacer(10)
		szNav.Add(self.bDown, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)

		hszr.Add(szNav)
		hszr.AddSpacer(20)
		
		listszr = wx.BoxSizer(wx.VERTICAL)
		listszr.Add(self.lcGCode)
		listszr.AddSpacer(10)
		listszr.Add(self.cbLineNbrs, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)
		
		brksz = wx.BoxSizer(wx.HORIZONTAL)
		brksz.Add(self.bBracketStart)
		brksz.AddSpacer(20)
		brksz.Add(self.bBracketDel)
		brksz.AddSpacer(20)
		brksz.Add(self.bBracketEnd)
		listszr.AddSpacer(10)
		listszr.Add(brksz, 0, wx.ALIGN_CENTER_HORIZONTAL, 1)
		
		hszr.Add(listszr)
		hszr.AddSpacer(20)
		
		vszr = wx.BoxSizer(wx.VERTICAL)
		vszr.AddSpacer(20)
		vszr.Add(btnszr)
		vszr.AddSpacer(10)
		vszr.Add(hszr)
		vszr.AddSpacer(20)
		
		
		self.SetSizer(vszr)
		self.Layout()
		self.Fit()
		
		self.slLayers.SetRange(0, lmax)
		self.slLayers.SetPageSize(int(lmax/10))
		
		if self.gObj is not None:
			self.enableButtons()
예제 #2
0
	def __init__(self, parent, server, gcode, filenm, pname, settings, images, cbexit):
		wx.Frame.__init__(self, None, wx.ID_ANY, self.formatTitle(pname, filenm))
		self.SetBackgroundColour("white")
		self.Bind(wx.EVT_CLOSE, self.onClose)

		self.parent = parent
		self.server = server
		self.gcode = gcode
		self.filenm = filenm
		self.pname = pname
		self.settings = settings
		self.images = images
		self.exitDlg = cbexit
		self.nExtr = self.parent.nExtr
		self.layerCount = 0
		if self.gcode:
			self.sTotalTime = " / " + formatElapsed(self.gcode.getPrintTime())
			self.filament = self.gcode.getFilament()
		else:
			self.sTotalTime = ""
			self.filament = [[0.0, 0.0]]

		self.printPosition = 0
		self.followPrint = True

		self.lx = 0

		lbFont = wx.Font(10, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)

		self.gcf = GcFrame(self, self.pname, self.gcode, self.settings)
		self.stHeight = wx.StaticText(self, wx.ID_ANY, "")
		self.stHeight.SetFont(lbFont)
		self.stTime = wx.StaticText(self, wx.ID_ANY, "")
		self.stTime.SetFont(lbFont)
		self.stFilament = wx.StaticText(self, wx.ID_ANY, "")
		self.stFilament.SetFont(lbFont)
		self.slLayer = wx.Slider(self, wx.ID_ANY, 1, 1, 10, style=wx.SL_VERTICAL+wx.SL_LABELS+wx.SL_INVERSE)
		self.Bind(wx.EVT_SLIDER, self.onSlLayer, self.slLayer)
		self.bUp =  wx.BitmapButton(self, wx.ID_ANY, self.images.pngUp, size=BTNDIM, style=wx.NO_BORDER)
		self.bUp.SetBackgroundColour("white")
		self.Bind(wx.EVT_BUTTON, self.onBUp, self.bUp)
		self.bDown =  wx.BitmapButton(self, wx.ID_ANY, self.images.pngDown, size=BTNDIM, style=wx.NO_BORDER)
		self.bDown.SetBackgroundColour("white")
		self.Bind(wx.EVT_BUTTON, self.onBDown, self.bDown)

		self.setSliderRange()

		self.cbSync = wx.CheckBox(self, wx.ID_ANY, "Sync with print")
		self.cbSync.SetValue(True)
		self.Bind(wx.EVT_CHECKBOX, self.onCbSync, self.cbSync)
		self.cbPrintedOnly = wx.CheckBox(self, wx.ID_ANY, "Only show printed")
		self.cbPrintedOnly.SetValue(self.settings.getSetting("showprintedonly", self.pname, "False"))
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowPrintedOnly, self.cbPrintedOnly)
		self.cbShowPrev = wx.CheckBox(self, wx.ID_ANY, "Show previous layer")
		self.cbShowPrev.SetValue(self.settings.getSetting("showprevious", self.pname, "False"))
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowPrev, self.cbShowPrev)
		self.cbShowMoves = wx.CheckBox(self, wx.ID_ANY, "Show moves")
		self.cbShowMoves.SetValue(self.settings.getSetting("showmoves", self.pname, "False"))
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowMoves, self.cbShowMoves)
		self.cbShowRetr = wx.CheckBox(self, wx.ID_ANY, "Show retractions")
		self.cbShowRetr.SetValue(self.settings.getSetting("showretractions", self.pname, "False"))
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowRetr, self.cbShowRetr)
		self.cbShowRevRetr = wx.CheckBox(self, wx.ID_ANY, "Show reverse retractions")
		self.cbShowRevRetr.SetValue(self.settings.getSetting("showrevretractions", self.pname, "False"))
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowRevRetr, self.cbShowRevRetr)

		sznavgc = wx.BoxSizer(wx.VERTICAL)
		sznavgc.Add(self.bUp, 0, wx.LEFT, 12 if os.name == 'posix' else 25)
		sznavgc.Add(self.slLayer, 1, wx.GROW)
		sznavgc.Add(self.bDown, 0, wx.LEFT, 12 if os.name == 'posix' else 25)

		szgcf = wx.BoxSizer(wx.VERTICAL)
		szgcf.Add(self.gcf)
		szgcf.AddSpacer(5)
		szgcf.Add(self.stHeight, 0, wx.ALIGN_CENTER)
		szgcf.AddSpacer(5)
		szgcf.Add(self.stTime, 0, wx.ALIGN_CENTER)
		szgcf.AddSpacer(5)
		szgcf.Add(self.stFilament, 0, wx.ALIGN_CENTER)

		szgc = wx.BoxSizer(wx.HORIZONTAL)
		szgc.AddSpacer(15)
		szgc.Add(szgcf)
		if os.name == 'posix':
			szgc.AddSpacer(10)
		szgc.Add(sznavgc, 1, wx.GROW)
		szgc.AddSpacer(15)

		szopt1 = wx.BoxSizer(wx.VERTICAL)
		szopt1.Add(self.cbSync, 1, wx.EXPAND)
		szopt1.Add(self.cbPrintedOnly, 1, wx.EXPAND)

		szopt2 = wx.BoxSizer(wx.VERTICAL)
		szopt2.Add(self.cbShowPrev, 1, wx.EXPAND)
		szopt2.Add(self.cbShowMoves, 1, wx.EXPAND)

		szopt3 = wx.BoxSizer(wx.VERTICAL)
		szopt3.Add(self.cbShowRetr, 1, wx.EXPAND)
		szopt3.Add(self.cbShowRevRetr, 1, wx.EXPAND)

		szoptions = wx.BoxSizer(wx.HORIZONTAL)
		szoptions.AddSpacer(20)
		szoptions.Add(szopt1, 1, wx.EXPAND)
		szoptions.AddSpacer(5)
		szoptions.Add(szopt2, 1, wx.EXPAND)
		szoptions.AddSpacer(5)
		szoptions.Add(szopt3, 1, wx.EXPAND)
		szoptions.AddSpacer(10)

		sz = wx.BoxSizer(wx.VERTICAL)
		sz.AddSpacer(10)
		sz.Add(szgc)
		sz.AddSpacer(5)
		sz.Add(szoptions)
		sz.AddSpacer(10)

		self.showLayerInfo()

		self.SetSizer(sz)
		self.Fit()
		self.Layout()
예제 #3
0
	def __init__(self):
		wx.Frame.__init__(self, None, wx.ID_ANY, TITLE_PREFIX, size=(600, 600))
		self.SetBackgroundColour(wx.Colour(40, 100, 160))
		self.SetForegroundColour(wx.Colour(255, 255, 255))
		self.Show()
		ico = wx.Icon(os.path.join(cmdFolder, "images", "geditico.png"), wx.BITMAP_TYPE_PNG)
		self.SetIcon(ico)
		
		self.Bind(wx.EVT_CLOSE, self.onClose)
		self.settings = Settings(cmdFolder)
		self.propDlg = None
		self.editDlg = None
		self.legend = None
		self.currentTool = 0

		self.paramStr = None
		self.totalTime = None
		self.layerTimes = None

		self.totalTimeStr = None
		self.layerTimeStr = None


		self.images = Images(os.path.join(cmdFolder, "images"))
		
		self.shiftX = 0
		self.shiftY = 0
		self.modified = False
		self.filename = None
		self.downloadSource = None
		self.gcode = None
		
		self.gObj = self.loadGCode(self.filename)
		if self.gObj is not None:
			self.updateTitle()

		self.gcFrame = GcFrame(self, self.gObj, self.settings)
		self.stLayerText = wx.StaticText(self, wx.ID_ANY, "Layer Height:   0.00")

		ht = self.gcFrame.GetSize().Get()[1] - 2*BUTTONDIM[1] - 20
		
		if self.gObj is None:
			lmax = 1
		else:
			lmax = self.gObj.layerCount()-1
		
		self.slLayers = wx.Slider(
			self, wx.ID_ANY, 0, 0, 1000, size=(-1, ht), 
			style=wx.SL_VERTICAL | wx.SL_AUTOTICKS | wx.SL_LABELS | wx.SL_INVERSE)
		self.Bind(wx.EVT_SCROLL, self.onLayerScroll, self.slLayers)
		if self.gObj is None:
			self.slLayers.Enable(False)
			
		self.lcGCode = GcodeListCtrl(self, self.gcode, self.images)
		self.lcGCode.setLineNumbers(self.settings.uselinenbrs)
		self.currentLayer = 0
		self.setLayerText()
		if self.gObj is not None:
			self.lcGCode.setLayerBounds(self.gObj.getGCodeLines(0))
			
		self.bShift = wx.BitmapButton(self, wx.ID_ANY, self.images.pngShift, size=BUTTONDIM)
		self.bShift.SetToolTip("Move model in x/y direction")
		self.Bind(wx.EVT_BUTTON, self.doShiftModel, self.bShift)
		self.bShift.Enable(False)

		self.bModTemp = wx.BitmapButton(self, wx.ID_ANY, self.images.pngModtemp, size=BUTTONDIM)
		self.bModTemp.SetToolTip("Modify Temperatures")
		self.Bind(wx.EVT_BUTTON, self.onModTemps, self.bModTemp)
		self.bModTemp.Enable(False)
				
		self.bModSpeed = wx.BitmapButton(self, wx.ID_ANY, self.images.pngModspeed, size=BUTTONDIM)
		self.bModSpeed.SetToolTip("Modify Speed")
		self.Bind(wx.EVT_BUTTON, self.onModSpeed, self.bModSpeed)
		self.bModSpeed.Enable(False)
		
		self.bFilChange = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFilchange, size=BUTTONDIM)
		self.bFilChange.SetToolTip("Insert G Code to assist with changing filament")
		self.Bind(wx.EVT_BUTTON, self.onFilChange, self.bFilChange)
		self.bFilChange.Enable(False)
		
		self.bEdit = wx.BitmapButton(self, wx.ID_ANY, self.images.pngEdit, size=BUTTONDIM)
		self.bEdit.SetToolTip("Free edit G Code")
		self.Bind(wx.EVT_BUTTON, self.onEditGCode, self.bEdit)
		self.bEdit.Enable(False)
		
		self.bUp = wx.BitmapButton(self, wx.ID_ANY, self.images.pngUp, size=BUTTONDIM)
		self.bUp.SetToolTip("Move up one layer")
		self.Bind(wx.EVT_BUTTON, self.onUp, self.bUp)
		self.bUp.Enable(False)
		
		self.bDown = wx.BitmapButton(self, wx.ID_ANY, self.images.pngDown, size=BUTTONDIM)
		self.bDown.SetToolTip("Move down one layer")
		self.Bind(wx.EVT_BUTTON, self.onDown, self.bDown)
		self.bDown.Enable(False)
		
		self.bInfo = wx.BitmapButton(self, wx.ID_ANY, self.images.pngInfo, size=BUTTONDIM)
		self.bInfo.SetToolTip("Information")
		self.Bind(wx.EVT_BUTTON, self.onInfo, self.bInfo)
		self.bInfo.Enable(False)
		
		self.bLegend = wx.BitmapButton(self, wx.ID_ANY, self.images.pngLegend, size=BUTTONDIM)
		self.bLegend.SetToolTip("Display a color legend")
		self.Bind(wx.EVT_BUTTON, self.onLegend, self.bLegend)
		self.bLegend.Enable(True)
		
		self.bSaveLayers = wx.BitmapButton(self, wx.ID_ANY, self.images.pngSavelayers, size=BUTTONDIM)
		self.bSaveLayers.SetToolTip("Save specific layers to a file")
		self.Bind(wx.EVT_BUTTON, self.onSaveLayers, self.bSaveLayers)
		self.bSaveLayers.Enable(False)

		self.bOpen = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFileopen, size=BUTTONDIM)
		self.bOpen.SetToolTip("Open a G Code file")
		self.Bind(wx.EVT_BUTTON, self.onOpen, self.bOpen)

		self.bSave = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFilesave, size=BUTTONDIM)
		self.bSave.SetToolTip("Save G Code to the current file")
		self.Bind(wx.EVT_BUTTON, self.onSave, self.bSave)
		self.bSave.Enable(False)
		
		self.bSaveAs = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFilesaveas, size=BUTTONDIM)
		self.bSaveAs.SetToolTip("Save G Code to a different file")
		self.Bind(wx.EVT_BUTTON, self.onSaveAs, self.bSaveAs)
		self.bSaveAs.Enable(False)

		if len(self.settings.printers) > 0:	
			self.chOctPrint = wx.Choice(self, wx.ID_ANY, choices = self.settings.printers)
			self.chOctPrint.SetSelection(0)
				
			self.bUploadFile = wx.BitmapButton(self, wx.ID_ANY, self.images.pngUpload, size=BUTTONDIM)
			self.bUploadFile.SetToolTip("Upload file directly to a printer")
			self.Bind(wx.EVT_BUTTON, self.onUploadFile, self.bUploadFile)
			self.bUploadFile.Enable(False)
			
			self.bDownloadFile = wx.BitmapButton(self, wx.ID_ANY, self.images.pngDownload, size=BUTTONDIM)
			self.bDownloadFile.SetToolTip("Download file directly from a printer")
			self.Bind(wx.EVT_BUTTON, self.onDownloadFile, self.bDownloadFile)
		
		self.cbShowMoves = wx.CheckBox(self, wx.ID_ANY, "Show Moves")
		self.cbShowMoves.SetToolTip("Show/Hide non-extrusion moves")
		self.cbShowMoves.SetValue(self.settings.showmoves)
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowMoves, self.cbShowMoves)

		self.cbShowPrevious = wx.CheckBox(self, wx.ID_ANY, "Show Previous Layer")
		self.cbShowPrevious.SetToolTip("Show/Hide the previous layer")
		self.cbShowPrevious.SetValue(self.settings.showprevious)
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowPrevious, self.cbShowPrevious)

		self.cbShowRetractions = wx.CheckBox(self, wx.ID_ANY, "Show Retractions")
		self.cbShowRetractions.SetToolTip("Show/Hide retractions")
		self.cbShowRetractions.SetValue(self.settings.showretractions)
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowRetractions, self.cbShowRetractions)

		self.cbShowRevRetractions = wx.CheckBox(self, wx.ID_ANY, "Show Reverse Retractions")
		self.cbShowRevRetractions.SetToolTip("Show/Hide reverse retractions")
		self.cbShowRevRetractions.SetValue(self.settings.showrevretractions)
		self.Bind(wx.EVT_CHECKBOX, self.onCbShowRevRetractions, self.cbShowRevRetractions)
		
		self.cmbTool = wx.ComboBox(self, wx.ID_ANY, "None", choices = ["None", "0", "1", "2", "3"],
			size=(88, -1), style = wx.CB_DROPDOWN + wx.CB_READONLY)
		self.cmbTool.SetToolTip("Choose which tool, if any, is highlighted in the display")
		self.Bind(wx.EVT_COMBOBOX, self.onCmbTool, self.cmbTool)

		self.cbLineNbrs = wx.CheckBox(self, wx.ID_ANY, "Line Numbers")
		self.cbLineNbrs.SetToolTip("Use G Code line numbers")
		self.cbLineNbrs.SetValue(self.settings.uselinenbrs)
		self.Bind(wx.EVT_CHECKBOX, self.onCbLineNbrs, self.cbLineNbrs)
		
		self.bBracketStart = wx.BitmapButton(self, wx.ID_ANY, self.images.pngBracketopen, size=BUTTONDIM)
		self.bBracketStart.SetToolTip("Mark the beginning of a block of G code")
		self.Bind(wx.EVT_BUTTON, self.onBracketStart, self.bBracketStart)
		self.bBracketStart.Enable(False)
		
		self.bBracketEnd = wx.BitmapButton(self, wx.ID_ANY, self.images.pngBracketclose, size=BUTTONDIM)
		self.bBracketEnd.SetToolTip("Mark the end of a block of G code")
		self.Bind(wx.EVT_BUTTON, self.onBracketEnd, self.bBracketEnd)
		self.bBracketEnd.Enable(False)
		
		self.bBracketDel = wx.BitmapButton(self, wx.ID_ANY, self.images.pngBracketdel, size=BUTTONDIM)
		self.bBracketDel.SetToolTip("Delete the marked block of G code")
		self.Bind(wx.EVT_BUTTON, self.onBracketDel, self.bBracketDel)
		self.bBracketDel.Enable(False)
		
		btnszr = wx.BoxSizer(wx.HORIZONTAL)
			
		opBox = wx.StaticBox(self, wx.ID_ANY, "  Edit Operations  ")
		opszr = wx.StaticBoxSizer(opBox, wx.HORIZONTAL)
		opszr.AddSpacer(10)
		opszr.Add(self.bShift, 0, wx.TOP + wx.BOTTOM, 10)
		opszr.AddSpacer(10)
		opszr.Add(self.bModTemp, 0, wx.TOP + wx.BOTTOM, 10)
		opszr.AddSpacer(10)
		opszr.Add(self.bModSpeed, 0, wx.TOP + wx.BOTTOM, 10)
		opszr.AddSpacer(10)
		opszr.Add(self.bFilChange, 0, wx.TOP + wx.BOTTOM, 10)
		opszr.AddSpacer(10)
		opszr.Add(self.bEdit, 0, wx.TOP + wx.BOTTOM, 10)
		opszr.AddSpacer(10)
		opszr.Add(self.bSaveLayers, 0, wx.TOP + wx.BOTTOM, 10)
		opszr.AddSpacer(10)
		btnszr.Add(opszr, 0) #, wx.ALIGN_CENTER_HORIZONTAL, 1)
		
		infoBox = wx.StaticBox(self, wx.ID_ANY, "  Information  ")
		infoszr = wx.StaticBoxSizer(infoBox, wx.HORIZONTAL)
		infoszr.AddSpacer(10)
		infoszr.Add(self.bInfo, 0, wx.TOP + wx.BOTTOM, 10)
		infoszr.AddSpacer(10)
		infoszr.Add(self.bLegend, 0, wx.TOP + wx.BOTTOM, 10)
		infoszr.AddSpacer(10)
		btnszr.AddSpacer(20)
		btnszr.Add(infoszr, 0) #, wx.ALIGN_CENTER_HORIZONTAL, 1)
		
		flBox = wx.StaticBox(self, wx.ID_ANY, "  Local Files  ")
		flszr = wx.StaticBoxSizer(flBox, wx.HORIZONTAL)
		flszr.AddSpacer(10)
		flszr.Add(self.bOpen, 0, wx.TOP + wx.BOTTOM, 10)
		flszr.AddSpacer(10)
		flszr.Add(self.bSave, 0, wx.TOP + wx.BOTTOM, 10)
		flszr.AddSpacer(10)
		flszr.Add(self.bSaveAs, 0, wx.TOP + wx.BOTTOM, 10)
		flszr.AddSpacer(10)
		btnszr.AddSpacer(20)
		btnszr.Add(flszr, 0) #, wx.ALIGN_CENTER_HORIZONTAL, 1)

		if len(self.settings.printers) > 0:	
			octBox = wx.StaticBox(self, wx.ID_ANY, "  OctoPrint  ")
			bsizer = wx.StaticBoxSizer(octBox, wx.HORIZONTAL)
	
			bsizer.AddSpacer(10)
			bsizer.Add(self.chOctPrint, 1, wx.TOP, 20)
			bsizer.AddSpacer(20)
			bsizer.Add(self.bUploadFile, 0, wx.TOP + wx.BOTTOM, 10)
			bsizer.AddSpacer(10)
			bsizer.Add(self.bDownloadFile, 0, wx.TOP + wx.BOTTOM, 10)
			bsizer.AddSpacer(10)
			btnszr.AddSpacer(20)
			btnszr.Add(bsizer, 0) #, wx.ALIGN_CENTER_HORIZONTAL, 1)

		hszr = wx.BoxSizer(wx.HORIZONTAL)
		hszr.AddSpacer(20)
		
		vszr = wx.BoxSizer(wx.VERTICAL)
		vszr.Add(self.gcFrame)
		vszr.Add(self.stLayerText, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)
		vszr.AddSpacer(10)

		opthszr = wx.BoxSizer(wx.HORIZONTAL)
		optszr = wx.BoxSizer(wx.VERTICAL)
		optszr.AddSpacer(1)
		optszr.Add(self.cbShowMoves)
		optszr.AddSpacer(1)
		optszr.Add(self.cbShowPrevious)
		opthszr.Add(optszr)
		opthszr.AddSpacer(10)
		optszr = wx.BoxSizer(wx.VERTICAL)
		optszr.AddSpacer(1)
		optszr.Add(self.cbShowRetractions)
		optszr.AddSpacer(1)
		optszr.Add(self.cbShowRevRetractions)
		opthszr.Add(optszr)
		opthszr.AddSpacer(10)
		optszr = wx.BoxSizer(wx.VERTICAL)
		optszr.AddSpacer(1)
		hsz = wx.BoxSizer(wx.HORIZONTAL)
		hsz.Add(wx.StaticText(self, wx.ID_ANY, "Tool to Hi-light: "), 1, wx.TOP, 5)
		hsz.AddSpacer(5)
		hsz.Add(self.cmbTool)
		optszr.Add(hsz)
		opthszr.Add(optszr)
		vszr.Add(opthszr)
		vszr.AddSpacer(20)
		hszr.Add(vszr)

		szNav = wx.BoxSizer(wx.VERTICAL)
		szNav.Add(self.bUp, 0, wx.LEFT + wx.RIGHT, 15)
		szNav.AddSpacer(10)
		szNav.Add(self.slLayers, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)
		szNav.AddSpacer(10)
		szNav.Add(self.bDown, 0, wx.LEFT + wx.RIGHT, 15)

		hszr.AddSpacer(20)
		hszr.Add(szNav)
		hszr.AddSpacer(20)
		
		listszr = wx.BoxSizer(wx.VERTICAL)
		listszr.Add(self.lcGCode)
		listszr.AddSpacer(10)
		listszr.Add(self.cbLineNbrs, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)
		
		brksz = wx.BoxSizer(wx.HORIZONTAL)
		brksz.Add(self.bBracketStart)
		brksz.AddSpacer(20)
		brksz.Add(self.bBracketDel)
		brksz.AddSpacer(20)
		brksz.Add(self.bBracketEnd)
		listszr.AddSpacer(10)
		listszr.Add(brksz, 0, wx.ALIGN_CENTER_HORIZONTAL, 1)


		
		hszr.Add(listszr)
		hszr.AddSpacer(20)
		
		vszr = wx.BoxSizer(wx.VERTICAL)
		vszr.AddSpacer(20)
		vszr.Add(btnszr, 0, wx.ALIGN_CENTER_HORIZONTAL, 1)
		vszr.AddSpacer(10)
		vszr.Add(hszr)
		vszr.AddSpacer(30)
		
		self.SetSizer(vszr)
		self.Layout()
		self.Fit()
		
		self.slLayers.SetRange(0, lmax)
		self.slLayers.SetPageSize(int(lmax/10))
		
		if self.gObj is not None:
			self.enableButtons()
예제 #4
0
    def __init__(self, parent, wparent, reprap, prtName):
        self.parent = parent
        self.wparent = wparent
        self.log = self.parent.log
        self.history = wparent.history
        self.reprap = reprap
        self.settings = self.parent.settings
        self.images = self.parent.images
        self.state = PrintState.idle
        self.oldState = None
        self.gcodeLoaded = False
        self.gcodeFile = None
        self.printerName = prtName
        self.layerMap = []
        self.okToImport = False
        self.importFile = None

        self.currentLayer = 0
        self.maxTool = 0
        self.eUsed = [0.0, 0.0, 0.0, 0.0]
        self.totalTime = 0
        self.totalTimeStr = ""
        self.layerTimes = []
        self.layerTimeStr = []
        self.layerRange = (0, 0)

        self.gObj = None
        self.printLayer = 0
        self.printPosition = None

        title = self.buildTitle()
        wx.Frame.__init__(self, wparent, wx.ID_ANY, title=title)
        self.Show()
        ico = wx.Icon(os.path.join(cmdFolder, "images", "printmon.png"),
                      wx.BITMAP_TYPE_PNG)
        self.SetIcon(ico)

        if self.settings.hassdcard:
            self.sdcard = SDCard(self.parent, self, self.reprap, self.log)
        else:
            self.sdcard = None

        self.gcf = GcFrame(self, self.gObj, self.settings)
        self.stLayerText = wx.StaticText(self, wx.ID_ANY,
                                         "Layer Height:   0.00")

        ht = self.gcf.GetSize().Get()[1] - BUTTONDIM[1] * 2 - 20

        self.slLayers = wx.Slider(self,
                                  wx.ID_ANY,
                                  0,
                                  0,
                                  1000,
                                  size=(-1, ht),
                                  style=wx.SL_VERTICAL | wx.SL_AUTOTICKS
                                  | wx.SL_LABELS | wx.SL_INVERSE)
        self.Bind(wx.EVT_SCROLL, self.onLayerScroll, self.slLayers)
        self.slLayers.Enable(False)

        self.cbShowMoves = wx.CheckBox(self, wx.ID_ANY, "Show moves")
        self.cbShowMoves.SetValue(self.settings.showmoves)
        self.Bind(wx.EVT_CHECKBOX, self.onShowMoves, self.cbShowMoves)

        self.cbShowPrevious = wx.CheckBox(self, wx.ID_ANY,
                                          "Show previous layer")
        self.cbShowPrevious.SetValue(self.settings.showprevious)
        self.Bind(wx.EVT_CHECKBOX, self.onShowPrevious, self.cbShowPrevious)

        self.cbToolPathOnly = wx.CheckBox(self, wx.ID_ANY,
                                          "Show tool paths only")
        self.cbToolPathOnly.SetValue(self.settings.toolpathonly)
        self.Bind(wx.EVT_CHECKBOX, self.onToolPathOnly, self.cbToolPathOnly)

        self.cbSyncPrint = wx.CheckBox(self, wx.ID_ANY, "Sync with print")
        self.cbSyncPrint.SetValue(True)
        self.Bind(wx.EVT_CHECKBOX, self.onSyncPrint, self.cbSyncPrint)

        self.bImport = wx.BitmapButton(self,
                                       wx.ID_ANY,
                                       self.images.pngImport,
                                       size=BUTTONDIM)
        self.bImport.SetToolTip("Import G Code file from toolbox")
        self.Bind(wx.EVT_BUTTON, self.onImport, self.bImport)

        self.bImportQ = wx.BitmapButton(self,
                                        wx.ID_ANY,
                                        self.images.pngNext,
                                        size=BUTTONDIM)
        self.Bind(wx.EVT_BUTTON, self.onImportFromQueue, self.bImportQ)

        self.bOpen = wx.BitmapButton(self,
                                     wx.ID_ANY,
                                     self.images.pngFileopen,
                                     size=BUTTONDIM)
        self.bOpen.SetToolTip("Open a G Code file")
        self.Bind(wx.EVT_BUTTON, self.onOpenFile, self.bOpen)

        self.Bind(wx.EVT_CLOSE, self.onClose)

        self.bPrint = PrintButton(self, self.images)
        self.bPrint.Enable(False)
        self.Bind(wx.EVT_BUTTON, self.onPrint, self.bPrint)

        self.bPause = PauseButton(self, self.images)
        self.bPause.Enable(False)
        self.Bind(wx.EVT_BUTTON, self.onPause, self.bPause)

        self.bSdPrintTo = wx.BitmapButton(self,
                                          wx.ID_ANY,
                                          self.images.pngSdprintto,
                                          size=(BUTTONDIMWIDE))
        self.bSdPrintTo.Enable(False)
        self.Bind(wx.EVT_BUTTON, self.onSdPrintTo, self.bSdPrintTo)

        self.bSdPrintFrom = wx.BitmapButton(self,
                                            wx.ID_ANY,
                                            self.images.pngSdprintfrom,
                                            size=(BUTTONDIMWIDE))
        self.bSdPrintFrom.Enable(False)
        self.Bind(wx.EVT_BUTTON, self.onSdPrintFrom, self.bSdPrintFrom)

        self.bSdDelete = wx.BitmapButton(self,
                                         wx.ID_ANY,
                                         self.images.pngSddelete,
                                         size=(BUTTONDIM))
        self.bSdDelete.Enable(False)
        self.Bind(wx.EVT_BUTTON, self.onSdDelete, self.bSdDelete)

        self.bUp = wx.BitmapButton(self,
                                   wx.ID_ANY,
                                   self.images.pngUp,
                                   size=BUTTONDIM)
        self.bUp.SetToolTip("Move up one layer")
        self.Bind(wx.EVT_BUTTON, self.onUp, self.bUp)
        self.bUp.Enable(False)

        self.bDown = wx.BitmapButton(self,
                                     wx.ID_ANY,
                                     self.images.pngDown,
                                     size=BUTTONDIM)
        self.bDown.SetToolTip("Move down one layer")
        self.Bind(wx.EVT_BUTTON, self.onDown, self.bDown)
        self.bDown.Enable(False)

        szGcf = wx.BoxSizer(wx.HORIZONTAL)
        szGcf.AddSpacer(10)
        szGcf.Add(self.gcf)
        szGcf.Add(self.stLayerText, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)
        szGcf.AddSpacer(10)

        szNav = wx.BoxSizer(wx.VERTICAL)
        szNav.Add(self.bUp, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)
        szNav.AddSpacer(10)
        szNav.Add(self.slLayers)
        szNav.AddSpacer(10)
        szNav.Add(self.bDown, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)

        szGcf.Add(szNav)
        szGcf.AddSpacer(10)

        szOpts = wx.BoxSizer(wx.HORIZONTAL)
        szOpts.AddSpacer(10)
        szOpts.Add(self.cbShowMoves)
        szOpts.AddSpacer(10)
        szOpts.Add(self.cbShowPrevious)
        szOpts.AddSpacer(10)
        szOpts.Add(self.cbToolPathOnly)
        szOpts.AddSpacer(10)
        szOpts.Add(self.cbSyncPrint)
        szOpts.AddSpacer(10)

        szBtn = wx.BoxSizer(wx.HORIZONTAL)
        szBtn.AddSpacer(10)
        szBtn.Add(self.bImport)
        szBtn.AddSpacer(10)
        szBtn.Add(self.bImportQ)
        szBtn.AddSpacer(10)
        szBtn.Add(self.bOpen)
        szBtn.AddSpacer(20)
        szBtn.Add(self.bPrint)
        szBtn.AddSpacer(10)
        szBtn.Add(self.bPause)
        if self.sdcard:
            szBtn.AddSpacer(20)
            szBtn.Add(self.bSdPrintTo)
            szBtn.AddSpacer(10)
            szBtn.Add(self.bSdPrintFrom)
            szBtn.AddSpacer(10)
            szBtn.Add(self.bSdDelete)

        szBtn.AddSpacer(10)

        szDlg = wx.BoxSizer(wx.VERTICAL)
        szDlg.AddSpacer(10)
        szDlg.Add(szGcf)
        szDlg.AddSpacer(10)
        szDlg.Add(szOpts)
        szDlg.AddSpacer(10)
        szDlg.Add(szBtn)
        szDlg.AddSpacer(10)

        self.SetSizer(szDlg)
        self.Fit()
        self.Layout()

        self.propDlg = PropertiesDlg(self, wparent, self.printerName)
        self.propDlg.Show()
        if not self.settings.propposition is None:
            self.propDlg.SetPosition(self.settings.propposition)

        self.enableButtonsByState()
        self.reprap.registerPositionHandler(self.updatePrintPosition)
        self.reprap.registerEventHandler(self.reprapEvent)
        self.reprap.registerSdEventHandler(self.sdcard)