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()
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()
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()
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)