chiark / gitweb /
Merge branch 'LulzBot-devel' into taz5-nozzle-size
authorYouness Alaoui <kakaroto@kakaroto.homelinux.net>
Tue, 2 Jun 2015 17:33:07 +0000 (13:33 -0400)
committerYouness Alaoui <kakaroto@kakaroto.homelinux.net>
Tue, 2 Jun 2015 17:33:07 +0000 (13:33 -0400)
13 files changed:
Cura/gui/configWizard.py
Cura/gui/mainWindow.py
Cura/gui/printWindow.py
Cura/gui/util/engineResultView.py
Cura/serialCommunication.py
Cura/util/machineCom.py
Cura/util/printerConnection/serialConnection.py
Cura/util/profile.py
Cura/util/sliceEngine.py
plugins/PronterfaceUI/script.py
plugins/pauseAtZ.py [new file with mode: 0644]
resources/images/glButtons.png
resources/images/source/Cura_Ui_buttons.svg

index c1a91a39f8dc43bf5694d38477fa454a209c6d3a..7b45bf986bb098da1f6ef42a0829bd231c4eab0b 100644 (file)
@@ -517,6 +517,12 @@ class MachineSelectPage(InfoPage):
                                profile.putMachineSetting('machine_name', 'LulzBot Mini')
                                profile.putMachineSetting('machine_type', 'lulzbot_mini')
                                profile.putMachineSetting('serial_baud', '115200')
+                               profile.putMachineSetting('extruder_head_size_min_x', '40')
+                               profile.putMachineSetting('extruder_head_size_max_x', '75')
+                               profile.putMachineSetting('extruder_head_size_min_y', '25')
+                               profile.putMachineSetting('extruder_head_size_max_y', '55')
+                               profile.putMachineSetting('extruder_head_size_height', '17')
+
                        profile.putMachineSetting('machine_center_is_zero', 'False')
                        profile.putMachineSetting('gcode_flavor', 'RepRap (Marlin/Sprinter)')
                        profile.putMachineSetting('has_heated_bed', 'True')
@@ -1080,7 +1086,7 @@ class ConfigWizard(wx.wizard.Wizard):
                #wx.wizard.WizardPageSimple.Chain(self.ultimakerCalibrationPage, self.ultimakerCalibrateStepsPerEPage)
                wx.wizard.WizardPageSimple.Chain(self.printrbotSelectType, self.otherMachineInfoPage)
                wx.wizard.WizardPageSimple.Chain(self.otherMachineSelectPage, self.customRepRapInfoPage)
-               wx.wizard.WizardPageSimple.Chain(self.machineSelectPage, self.taz5NozzleSelectPage)
+               wx.wizard.WizardPageSimple.Chain(self.machineSelectPage, self.lulzbotReadyPage)
                wx.wizard.WizardPageSimple.Chain(self.taz5NozzleSelectPage, self.lulzbotReadyPage)
 
                self.FitToPage(self.machineSelectPage)
index 23f79c45f56dc0fef9f6df56d11597da130bcdc2..27223f21539b7615ac410a69c4594ff755a1a0d6 100644 (file)
@@ -384,11 +384,6 @@ class mainWindow(wx.Frame):
                   profile.getMachineSetting('machine_type').startswith('lulzbot_'):
                        self.bedLevelWizardMenuItem.Enable(False)
                        self.headOffsetWizardMenuItem.Enable(False)
-                       self.oneAtATime.Enable(False)
-                       self.allAtOnceItem.Check(True)
-                       # Force the gantry height to 0 so we don't get a "info: print one at a time re-enabled"
-                       # notification since we're disabling that option
-                       profile.putMachineSetting('extruder_head_size_height', '0.0')
                else:
                        self.bedLevelWizardMenuItem.Enable(True)
                        self.headOffsetWizardMenuItem.Enable(False)
index c5a73f42f79f13e796b75713b4f7a44cbb0c8b28..e3e5eadb13a007079071b7307884637c661ab784 100644 (file)
@@ -226,7 +226,10 @@ class printWindowPlugin(wx.Frame):
                self._printerConnection.openActiveConnection()
 
        def script_startPrint(self, data = None):
-               self._printerConnection.startPrint()
+               if self._printerConnection.isPrinting() or self._printerConnection.isPaused():
+                       self._printerConnection.pause(not self._printerConnection.isPaused())
+               else:
+                       self._printerConnection.startPrint()
 
        def script_cancelPrint(self, e):
                self._printerConnection.cancelPrint()
@@ -253,7 +256,7 @@ class printWindowPlugin(wx.Frame):
 
        def OnClose(self, e):
                if self._printerConnection.hasActiveConnection():
-                       if self._printerConnection.isPrinting():
+                       if self._printerConnection.isPrinting() or self._printerConnection.isPaused():
                                pass #TODO: Give warning that the close will kill the print.
                        self._printerConnection.closeActiveConnection()
                self._printerConnection.removeCallback(self._doPrinterConnectionUpdate)
@@ -297,24 +300,55 @@ class printWindowPlugin(wx.Frame):
                        self._termLog.AppendText(line.encode('utf-8', 'replace'))
 
        def _updateButtonStates(self):
+               hasPauseButton = False
+               for button in self._buttonList:
+                       if button.command == self.script_pausePrint:
+                               hasPauseButton = True
+                               break
+
                for button in self._buttonList:
                        if button.command == self.script_connect:
                                button.Show(self._printerConnection.hasActiveConnection())
-                               button.Enable(not self._printerConnection.isActiveConnectionOpen() and not self._printerConnection.isActiveConnectionOpening())
+                               button.Enable(not self._printerConnection.isActiveConnectionOpen() and \
+                                                         not self._printerConnection.isActiveConnectionOpening())
                        elif button.command == self.script_pausePrint:
                                button.Show(self._printerConnection.hasPause())
-                               if not self._printerConnection.hasActiveConnection() or self._printerConnection.isActiveConnectionOpen():
-                                       button.Enable(self._printerConnection.isPrinting() or self._printerConnection.isPaused())
+                               if not self._printerConnection.hasActiveConnection() or \
+                                  self._printerConnection.isActiveConnectionOpen():
+                                       button.Enable(self._printerConnection.isPrinting() or \
+                                                                 self._printerConnection.isPaused())
+                                       if self._printerConnection.isPaused():
+                                               button.SetLabel(_("Resume"))
+                                       else:
+                                               button.SetLabel(_("Pause"))
                                else:
                                        button.Enable(False)
                        elif button.command == self.script_startPrint:
-                               if not self._printerConnection.hasActiveConnection() or self._printerConnection.isActiveConnectionOpen():
-                                       button.Enable(not self._printerConnection.isPrinting())
+                               if hasPauseButton or not self._printerConnection.hasPause():
+                                       if not self._printerConnection.hasActiveConnection() or \
+                                          self._printerConnection.isActiveConnectionOpen():
+                                                       button.Enable(not self._printerConnection.isPrinting() and \
+                                                                                 not self._printerConnection.isPaused())
+                                       else:
+                                               button.Enable(False)
                                else:
-                                       button.Enable(False)
+                                       if not self._printerConnection.hasActiveConnection() or \
+                                          self._printerConnection.isActiveConnectionOpen():
+                                               if self._printerConnection.isPrinting():
+                                                       button.SetLabel(_("Pause"))
+                                               else:
+                                                       if self._printerConnection.isPaused():
+                                                               button.SetLabel(_("Resume"))
+                                                       else:
+                                                               button.SetLabel(_("Print"))
+                                               button.Enable(True)
+                                       else:
+                                               button.Enable(False)
                        elif button.command == self.script_cancelPrint:
-                               if not self._printerConnection.hasActiveConnection() or self._printerConnection.isActiveConnectionOpen():
-                                       button.Enable(self._printerConnection.isPrinting())
+                               if not self._printerConnection.hasActiveConnection() or \
+                                  self._printerConnection.isActiveConnectionOpen():
+                                       button.Enable(self._printerConnection.isPrinting() or \
+                                                                 self._printerConnection.isPaused())
                                else:
                                        button.Enable(False)
                        elif button.command == self.script_showErrorLog:
@@ -340,12 +374,13 @@ class printWindowPlugin(wx.Frame):
                        return
                self._lastUpdateTime = t
 
-               if extraInfo is not None:
+               if extraInfo is not None and len(extraInfo) > 0:
                        self._addTermLog('< %s\n' % (extraInfo))
 
                self._updateButtonStates()
+               isPrinting = connection.isPrinting() or connection.isPaused()
                if self._progressBar is not None:
-                       if connection.isPrinting():
+                       if isPrinting:
                                self._progressBar.SetValue(connection.getPrintProgress() * 1000)
                        else:
                                self._progressBar.SetValue(0)
@@ -359,8 +394,8 @@ class printWindowPlugin(wx.Frame):
                        self._infoText.SetLabel(info)
                else:
                        self.SetTitle(info.replace('\n', ', '))
-               if connection.isPrinting() != self._isPrinting:
-                       self._isPrinting = connection.isPrinting()
+               if isPrinting != self._isPrinting:
+                       self._isPrinting = isPrinting
                        preventComputerFromSleeping(self, self._isPrinting)
 
 class printWindowBasic(wx.Frame):
@@ -450,7 +485,7 @@ class printWindowBasic(wx.Frame):
 
        def OnClose(self, e):
                if self._printerConnection.hasActiveConnection():
-                       if self._printerConnection.isPrinting():
+                       if self._printerConnection.isPrinting() or self._printerConnection.isPaused():
                                pass #TODO: Give warning that the close will kill the print.
                        self._printerConnection.closeActiveConnection()
                self._printerConnection.removeCallback(self._doPrinterConnectionUpdate)
@@ -487,11 +522,12 @@ class printWindowBasic(wx.Frame):
                        return
                self._lastUpdateTime = t
 
-               if extraInfo is not None:
+               if extraInfo is not None and len(extraInfo) > 0:
                        self._addTermLog('< %s\n' % (extraInfo))
 
                self._updateButtonStates()
-               if connection.isPrinting():
+               isPrinting = connection.isPrinting() or connection.isPaused()
+               if isPrinting:
                        self.progress.SetValue(connection.getPrintProgress() * 1000)
                else:
                        self.progress.SetValue(0)
@@ -503,8 +539,8 @@ class printWindowBasic(wx.Frame):
                        info += ' Bed: %d' % (self._printerConnection.getBedTemperature())
                info += '\n\n'
                self.statsText.SetLabel(info)
-               if connection.isPrinting() != self._isPrinting:
-                       self._isPrinting = connection.isPrinting()
+               if isPrinting != self._isPrinting:
+                       self._isPrinting = isPrinting
                        preventComputerFromSleeping(self, self._isPrinting)
 
 
@@ -519,7 +555,8 @@ class printWindowBasic(wx.Frame):
                self.connectButton.Enable(not self._printerConnection.isActiveConnectionOpen() and not self._printerConnection.isActiveConnectionOpening())
                self.pauseButton.Show(self._printerConnection.hasPause())
                if not self._printerConnection.hasActiveConnection() or self._printerConnection.isActiveConnectionOpen():
-                       self.printButton.Enable(not self._printerConnection.isPrinting())
+                       self.printButton.Enable(not self._printerConnection.isPrinting() and \
+                                                                       not self._printerConnection.isPaused())
                        self.pauseButton.Enable(self._printerConnection.isPrinting())
                        self.cancelButton.Enable(self._printerConnection.isPrinting())
                else:
index 8aeefd27ddbb9e5a561be9463e5343713dffda5c..00505cc3cdd5a1685bb198cc03eee907fbb736d3 100644 (file)
@@ -26,7 +26,7 @@ class engineResultView(object):
                self._layer20VBOs = []
 
                self.layerSelect = openglGui.glSlider(self._parent, 10000, 1, 1, (-1,-2), lambda : self._parent.QueueRefresh())
-               self.singleLayerToggle = openglGui.glButton(self._parent, 23, _("Single Layer"), (-1,-1.5), self.OnSingleLayerToggle, 0.5) #stay half size of the base size
+               self.singleLayerToggle = openglGui.glButton(self._parent, 27, _("Single Layer"), (-1.1,-1.4), self.OnSingleLayerToggle, 0.75) #stay at 75% size of the base size
 
        def setResult(self, result):
                if self._result == result:
index efc6e72d38f0836722117a5cca9effd2348faa53..4add5f2314d8c1efd58ac48055ecc5fae0d08a05 100644 (file)
@@ -68,6 +68,10 @@ class serialComm(object):
                                self._comm.sendCommand(line[1])
                        elif line[0] == 'START':
                                self._comm.printGCode(self._gcodeList)
+                       elif line[0] == 'PAUSE':
+                               self._comm.setPause(True)
+                       elif line[0] == 'RESUME':
+                               self._comm.setPause(False)
                        else:
                                sys.stderr.write(str(line))
 
index 650452dfbec1d4b43f8ba615756339870e7f016c..5fe86611c4aacdfe77b14981a1b54bd74c74f0da 100644 (file)
@@ -587,7 +587,7 @@ class MachineCom(object):
                        line = line[0]
                try:
                        if line == 'M0' or line == 'M1':
-                               #self.setPause(True)
+                               self.setPause(True)
                                line = 'M105'   #Don't send the M0 or M1 to the machine, as M0 and M1 are handled as an LCD menu pause.
                        if self._printSection in self._feedRateModifier:
                                line = re.sub('F([0-9]*)', lambda m: 'F' + str(int(int(m.group(1)) * self._feedRateModifier[self._printSection])), line)
index 2495f77a3c087040a2fc767c6c9b492ced7ce230..6a2c254859090b421928eb52afe9fe80a0d8d37e 100644 (file)
@@ -97,7 +97,7 @@ class serialConnection(printerConnectionBase.printerConnectionBase):
 
        #Abort the previously loaded print file
        def cancelPrint(self):
-               if not self.isPrinting()or self._process is None:
+               if not self.isPrinting() or self._process is None:
                        return
                self._process.stdin.write('STOP\n')
                self._printProgress = 0
@@ -105,6 +105,19 @@ class serialConnection(printerConnectionBase.printerConnectionBase):
        def isPrinting(self):
                return self._commState == machineCom.MachineCom.STATE_PRINTING
 
+       #Returns true if we have the ability to pause the file printing.
+       def hasPause(self):
+               return True
+
+       def isPaused(self):
+               return self._commState == machineCom.MachineCom.STATE_PAUSED
+
+       #Pause or unpause the printing depending on the value, if supported.
+       def pause(self, value):
+               if not (self.isPrinting() or self.isPaused) or self._process is None:
+                       return
+               self._process.stdin.write('PAUSE\n' if value else "RESUME\n")
+
        #Amount of progression of the current print file. 0.0 to 1.0
        def getPrintProgress(self):
                if len(self._gcodeData) < 1:
@@ -209,7 +222,7 @@ class serialConnection(printerConnectionBase.printerConnectionBase):
                                line = line[1].split(':', 1)
                                self._commState = int(line[0])
                                self._commStateString = line[1]
-                               self._doCallback()
+                               self._doCallback('')
                        elif line[0] == 'progress':
                                self._printProgress = int(line[1])
                                self._doCallback()
index ef9d454b5ccbdf4cd9cd8d2eed74bf01c6cd5b7b..43d54e9b8af19db6226aae02b8b8ac07e5f516ab 100644 (file)
@@ -180,6 +180,7 @@ setting('wall_thickness',            0.8, float, 'basic',    _('Quality')).setRa
 setting('retraction_enable',        True, bool,  'basic',    _('Quality')).setExpertSubCategory(_('Retraction')).setLabel(_("Enable retraction"), _("Retract the filament when the nozzle is moving over a none-printed area. Details about the retraction can be configured in the advanced tab."))
 setting('solid_layer_thickness',     0.6, float, 'basic',    _('Fill')).setRange(0).setLabel(_("Bottom/Top thickness (mm)"), _("This controls the thickness of the bottom and top layers, the amount of solid layers put down is calculated by the layer thickness and this value.\nHaving this value a multiple of the layer thickness makes sense. And keep it near your wall thickness to make an evenly strong part."))
 setting('fill_density',               20, float, 'basic',    _('Fill')).setExpertSubCategory(_('Infill')).setRange(0, 100).setLabel(_("Fill Density (%)"), _("This controls how densely filled the insides of your print will be. For a solid part use 100%, for an empty part use 0%. A value around 20% is usually enough.\nThis will not affect the outside of the print and only adjusts how strong the part becomes."))
+setting('perimeter_before_infill',               True, bool, 'basic',    _('Fill')).setLabel(_("Perimeters before Infill"), _("This controls whether the perimeters should be printed before or after the infill. Printing the perimeter after the infill may improve the quality of prints with very low layer heights, while printing the perimeters before the infill will give better results for layer height above 0.1mm"))
 setting('nozzle_size',               0.4, float, 'advanced', _('Machine')).setRange(0.1,10).setLabel(_("Nozzle size (mm)"), _("The nozzle size is very important, this is used to calculate the line width of the infill, and used to calculate the amount of outside wall lines and thickness for the wall thickness you entered in the print settings."))
 setting('print_speed',                50, float, 'basic',    _('Speed and Temperature')).setRange(1).setLabel(_("Print speed (mm/s)"), _("Speed at which printing happens. A well adjusted 3D printer can reach high speeds. However, for high quality prints slower speeds are required. Printing speed depends on a lot of factors. You will be experimenting with optimal settings for this."))
 setting('print_temperature',         210, int,   'basic',    _('Speed and Temperature')).setRange(0,340).setLabel(_("Printing temperature (C)"), _("Temperature used for printing. Set at 0 to pre-heat yourself.\nFor PLA 205C is recommended.\nFor ABS and HIPS 240C is recommended."))
@@ -483,7 +484,7 @@ setting('postSwitchExtruder.gcode', """;Switch between the current extruder and
 setting('startMode', 'Simple', ['Simple', 'Normal'], 'preference', 'hidden')
 setting('simpleModeProfile', '2_normal', str, 'hidden', 'hidden')
 setting('simpleModeMaterial', '1_pla', str, 'hidden', 'hidden')
-setting('oneAtATime', 'True', bool, 'preference', 'hidden')
+setting('oneAtATime', 'False', bool, 'preference', 'hidden')
 setting('lastFile', os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'resources', 'example', 'Rocktopus.stl')), str, 'preference', 'hidden')
 setting('save_profile', 'False', bool, 'preference', 'hidden').setLabel(_("Save profile on slice"), _("When slicing save the profile as [stl_file]_profile.ini next to the model."))
 setting('filament_cost_kg', '0', float, 'preference', 'hidden').setLabel(_("Cost (price/kg)"), _("Cost of your filament per kg, to estimate the cost of the final print."))
index ccf90a5143fea8dbe48bd8511c35576b9bcd3808..5d434cf8f9e7fc5ad9a48c3da2651f7fdb1d9294 100644 (file)
@@ -566,6 +566,10 @@ class Engine(object):
                        settings['upSkinCount'] = 10000
                else:
                        settings['sparseInfillLineDistance'] = int(100 * profile.calculateEdgeWidth() * 1000 / profile.getProfileSettingFloat('fill_density'))
+               if profile.getProfileSetting('perimeter_before_infill') == 'True':
+                       settings['perimeterBeforeInfill'] = 1
+               else:
+                       settings['perimeterBeforeInfill'] = 0
                if profile.getProfileSetting('platform_adhesion') == 'Brim':
                        settings['skirtDistance'] = 0
                        settings['skirtLineCount'] = int(profile.getProfileSettingFloat('brim_line_count'))
index 705c113a1302ef37e69eec5ee183d7f5b1299813..eb3175052240c1ec772fae61585f2c538ab7de67 100644 (file)
@@ -50,7 +50,7 @@ addProgressbar(255, 200, 200)
 
 addButton(0, 255, 255, 'Connect', connect)
 addButton(0, 240, 255, 'Print', startPrint)
-addButton(0, 220, 255, 'Pause', pausePrint)
+#addButton(0, 220, 255, 'Pause', pausePrint)
 addButton(0, 200, 255, 'Cancel', cancelPrint)
 addButton(0, 180, 255, 'Error log', showErrorLog)
 addButton(0, 160, 255, "Motors Off", sendGCode, "M18;")
diff --git a/plugins/pauseAtZ.py b/plugins/pauseAtZ.py
new file mode 100644 (file)
index 0000000..2991be4
--- /dev/null
@@ -0,0 +1,125 @@
+#Name: Pause at height
+#Info: Pause the printer at a certain height
+#Depend: GCode
+#Type: postprocess
+#Param: pauseLevel(float:5.0) Pause height (mm)
+#Param: parkX(float:190) Head park X (mm)
+#Param: parkY(float:190) Head park Y (mm)
+#Param: moveZ(float:0) Head move Z (mm)
+#Param: retractAmount(float:5) Retraction amount (mm)
+
+__copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
+import re
+from Cura.util import profile
+
+def getPrintZValue(lineBlock):
+       '''
+       look for the last z value found just before (or at the same time) G1 code in the given block
+       '''
+       lastZ = -1
+       for line in lineBlock:
+               lastZ = getValue(line, 'Z', lastZ)
+               if line.startswith('G1 ') and (getValue(line, 'X', None) is not None or getValue(line, 'Y', None) is not None):
+                       break
+
+       return lastZ
+
+
+def getValue(line, key, default = None):
+       if not key in line or (';' in line and line.find(key) > line.find(';')):
+               return default
+       subPart = line[line.find(key) + 1:]
+       m = re.search('^[0-9]+\.?[0-9]*', subPart)
+       if m is None:
+               return default
+       try:
+               return float(m.group(0))
+       except:
+               return default
+
+with open(filename, "r") as f:
+       lines = f.readlines()
+
+z = 0.
+x = 0.
+y = 0.
+pauseState = 0
+#state 0 system is not active until we get to a smaller layer than the last encountered layer (default at 99999) (print one at a time support.)
+#state 1 system is active and we are looking for our target layer z
+#state 2 system found the layer it need to write. We will wait for the first G1 or G0 code to write the content just before. state will be set to 0
+
+
+with open(filename, "w") as f:
+       lineIndex = 0
+       lastLayerIndex = 99999
+       layerZ = 0
+       for lIndex in xrange(len(lines)):
+               line = lines[lIndex]
+               if line.startswith(';'):
+                       if line.startswith(';LAYER:'):
+                               currentLayer = int(line[7:].strip())
+
+                               if currentLayer < lastLayerIndex:
+                                       pauseState = 1
+
+                               lastLayerIndex = currentLayer
+                               if pauseState == 1:
+                                       layerZ = getPrintZValue(lines[lIndex:lIndex+20])
+                                       if layerZ >= pauseLevel:
+                                               pauseState = 2
+
+                       f.write(line)
+                       continue
+
+               x = getValue(line, 'X', x)
+               y = getValue(line, 'Y', y)
+
+               if pauseState == 2:
+                       g = getValue(line, 'G', None)
+                       if g == 1 or g == 0:# We will do the pause just before printing content. We need to pause from the previous XY position. Not the current.
+                               z = layerZ
+
+                               pauseState = 0
+                               f.write(";TYPE:CUSTOM\n")
+                               #Retract
+                               f.write("M83\n")
+                               f.write("G1 E-%f F6000\n" % (retractAmount))
+
+                               zChanged = False
+                               #Change z before doing the move because the nozzle can hit the glass lock on the UM2
+                               if z + moveZ < 15:
+                                       zChanged = True
+                                       f.write("G1 Z15 F300\n")
+
+                               elif moveZ > 0:
+                                       newZ = z + moveZ
+                                       maxZ = profile.getMachineSettingFloat('machine_height') - 10 #For Safety Leave a 10mm space (endstop)
+                                       if maxZ < newZ:
+                                               newZ = maxZ
+
+                                       if newZ > z:
+                                               zChanged = True
+                                               f.write("G1 Z%f F300\n" % (newZ))
+
+                               #Move the head away
+                               f.write("G1 X%f Y%f F9000\n" % (parkX, parkY))
+
+                               #Disable the E steppers
+                               f.write("M84 E0\n")
+                               #Wait till the user continues printing
+                               f.write("M0\n")
+                               #Push the filament back, and retract again, the properly primes the nozzle when changing filament.
+                               f.write("G1 E%f F6000\n" % (retractAmount))
+                               f.write("G1 E-%f F6000\n" % (retractAmount))
+
+                               #Move the head back. Move Z at the same time to prevent hitting the glass locks on the UM2
+                               if zChanged :
+                                       f.write("G1 X%f Y%f Z%f F9000\n" % (x, y, z))
+                               else:
+                                       f.write("G1 X%f Y%f F9000\n" % (x, y))
+
+                               f.write("G1 E%f F6000\n" % (retractAmount))
+                               f.write("G1 F9000\n")
+                               f.write("M82\n")
+
+               f.write(line)
index 8f1912792a15682448b3b6f7f607b422625f4dd5..79ba677242319525d5a7d2d2c41502680e7d865d 100644 (file)
Binary files a/resources/images/glButtons.png and b/resources/images/glButtons.png differ
index dd88edc694ec970059cf6eb377394f63d58713c9..fa3063d7dc85d90b57fcf245691e42ff6086de3d 100644 (file)
    enable-background="new 0 0 1920 1080"
    xml:space="preserve"
    id="svg2"
-   inkscape:version="0.48.4 r9939"
+   inkscape:version="0.91 r"
    width="100%"
    height="100%"
    sodipodi:docname="Cura_Ui_buttons.svg"
-   inkscape:export-filename="/home/steven/Cura/cura-dev/resources/images/glButtons.png"
+   inkscape:export-filename="/home/aleph/cura-dev/resources/images/glButtons.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"><metadata
      id="metadata6354"><rdf:RDF><cc:Work
          rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
      id="defs6352" /><sodipodi:namedview
      pagecolor="#ffffff"
      bordercolor="#666666"
      guidetolerance="10"
      inkscape:pageopacity="0"
      inkscape:pageshadow="2"
-     inkscape:window-width="1348"
-     inkscape:window-height="933"
+     inkscape:window-width="1920"
+     inkscape:window-height="1028"
      id="namedview6350"
      showgrid="true"
-     inkscape:zoom="0.5"
-     inkscape:cx="200.48573"
-     inkscape:cy="213.17713"
-     inkscape:window-x="260"
-     inkscape:window-y="80"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="svg2"
+     inkscape:zoom="4"
+     inkscape:cx="403.14662"
+     inkscape:cy="191.03689"
+     inkscape:window-x="0"
+     inkscape:window-y="30"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g5243"
      showguides="true"
      inkscape:guide-bbox="true"
      inkscape:snap-global="false"><sodipodi:guide
        id="guide9405" /><sodipodi:guide
        orientation="0,1"
        position="8,896"
-       id="guide9407" /></sodipodi:namedview><g
+       id="guide9407" /><sodipodi:guide
+       position="554.68108,180.70998"
+       orientation="1,0"
+       id="guide5333" /></sodipodi:namedview><g
      id="Perspective"
      display="none"
      style="display:none"
                style="fill:#ffffff"
                inkscape:connector-curvature="0"
                id="path3836"
-               d="m 1051.1,663.8 c 0,0.1 0,0.1 -0.1,0.2 0,0.1 -0.1,0.2 -0.1,0.2 l -4.5,5 h 4.4 c 0.1,0 0.1,0 0.2,0.1 0,0.1 0.1,0.1 0.1,0.2 v 1.6 c 0,0.1 0,0.1 -0.1,0.2 -0.1,0 -0.1,0.1 -0.2,0.1 h -6.8 c -0.2,0 -0.3,-0.1 -0.3,-0.3 v -1.7 c 0,-0.1 0,-0.2 0,-0.2 0,-0.1 0.1,-0.2 0.1,-0.2 l 4.6,-5 h -4.4 c -0.1,0 -0.1,0 -0.2,-0.1 -0.1,-0.1 -0.1,-0.1 -0.1,-0.2 v -1.6 c 0,-0.1 0,-0.1 0.1,-0.2 0,-0.1 0.1,-0.1 0.2,-0.1 h 6.7 c 0.1,0 0.1,0 0.2,0.1 0,0 0.1,0.1 0.1,0.2 v 1.7 z" /></g></g></g><g
+               d="m 1051.1,663.8 c 0,0.1 0,0.1 -0.1,0.2 0,0.1 -0.1,0.2 -0.1,0.2 l -4.5,5 h 4.4 c 0.1,0 0.1,0 0.2,0.1 0,0.1 0.1,0.1 0.1,0.2 v 1.6 c 0,0.1 0,0.1 -0.1,0.2 -0.1,0 -0.1,0.1 -0.2,0.1 h -6.8 c -0.2,0 -0.3,-0.1 -0.3,-0.3 v -1.7 c 0,-0.1 0,-0.2 0,-0.2 0,-0.1 0.1,-0.2 0.1,-0.2 l 4.6,-5 h -4.4 c -0.1,0 -0.1,0 -0.2,-0.1 -0.1,-0.1 -0.1,-0.1 -0.1,-0.2 v -1.6 c 0,-0.1 0,-0.1 0.1,-0.2 0,-0.1 0.1,-0.1 0.2,-0.1 h 6.7 c 0.1,0 0.1,0 0.2,0.1 0,0 0.1,0.1 0.1,0.2 v 1.7 z" /></g></g><g
+           transform="matrix(0.98298931,0,0,1,19.570658,107.21193)"
+           id="g3684-8"><g
+             id="g3686-4"><path
+               style="fill:#ededed;stroke:#6b6b6a;stroke-miterlimit:10"
+               inkscape:connector-curvature="0"
+               id="path3688-5"
+               d="m 1170.5,663.2 0,-79.5 c 0,-5.3 -4.4,-9.7 -9.7,-9.7 l -82.3,0 c -5.3,0 -9.7,4.4 -9.7,9.7 l 0,79.5 101.7,0 z"
+               stroke-miterlimit="10" /><polygon
+               style="fill:#ededed;stroke:#6b6b6a;stroke-miterlimit:10;fill-opacity:1"
+               id="polygon3690-6"
+               points="1068.8,676.8 1068.8,655.7 1170.5,655.7 1170.5,671 1164.4,676.8 "
+               stroke-miterlimit="10" /></g><g
+             id="g5243"><rect
+               ry="0"
+               y="650.73975"
+               x="1069.3003"
+               height="12.060929"
+               width="100.69713"
+               id="rect5245"
+               style="fill:#ededed;fill-opacity:1;stroke:none;stroke-opacity:1" /><g
+               transform="matrix(1.0619902,0,0,1.0619902,-92.950173,-13.937094)"
+               id="g5247"><g
+                 id="g5249"><g
+                   id="g5251"><polygon
+                     points="1101.3,628.1 1101.3,605 1123,598.4 1137.6,608.1 1137.6,628.5 1121,631.2 "
+                     id="polygon5253"
+                     style="fill:#5a681b" /><path
+                     d="m 1121,630.9 -19.5,-3.1 0,-22.7 21.4,-6.5 14.4,9.6 0,20 -16.3,2.7 z"
+                     id="path5255"
+                     inkscape:connector-curvature="0"
+                     style="fill:#5a681b" /></g></g><g
+                 id="g5257"><image
+                   overflow="visible"
+                   width="194"
+                   height="179"
+                   xlink:href="data:image/png;base64,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 AAMARV1xt3biuzwAAAAASUVORK5CYII="
+                   transform="matrix(0.24,0,0,0.24,1096.1964,593.4108)"
+                   id="image5259"
+                   style="overflow:visible;opacity:0.25" /><g
+                   id="g5261"><g
+                     id="g5263"><g
+                       id="g5265"><polygon
+                         points="1122.8,617.2 1136.6,622.9 1136.6,618.4 1122.8,612.1 "
+                         id="polygon5267"
+                         style="fill:#b1cd36" /><polygon
+                         points="1136.6,617.3 1136.7,613 1122.8,605.6 1122.8,610.8 1122.9,610.8 "
+                         id="polygon5269"
+                         style="fill:#b1cd36" /><polygon
+                         points="1136.7,627.7 1136.7,623.9 1122.8,618.5 1122.8,622.9 "
+                         id="polygon5271"
+                         style="fill:#b1cd36" /><polygon
+                         points="1122.8,599.4 1122.8,604.4 1136.6,611.9 1136.6,608.6 "
+                         id="polygon5273"
+                         style="fill:#b1cd36" /></g><g
+                       id="g5275"><polygon
+                         points="1122.8,610.8 1122.8,605.6 1102.2,611 1102.2,616 "
+                         id="polygon5277"
+                         style="fill:#cae240" /><polygon
+                         points="1102.2,622 1122.8,617.3 1122.8,612.1 1102.2,617.2 "
+                         id="polygon5279"
+                         style="fill:#cae240" /><polygon
+                         points="1102.2,605.6 1102.2,609.9 1122.8,604.4 1122.8,599.4 "
+                         id="polygon5281"
+                         style="fill:#cae240" /><polygon
+                         points="1122.8,622.9 1122.8,618.5 1102.2,623.1 1102.2,627.3 "
+                         id="polygon5283"
+                         style="fill:#cae240" /></g><g
+                       id="g5285"><polygon
+                         points="1121,630.3 1102.2,627.3 1122.8,622.9 1136.7,627.7 "
+                         id="polygon5287"
+                         style="fill:#9caf31" /></g></g></g></g></g><g
+               id="g5289"
+               transform="matrix(1.0619902,0,0,1.0619902,19.931798,-13.254117)"><g
+                 id="g5291" /><g
+                 id="g5337"
+                 transform="translate(-60.673098,-0.83728252)"><g
+                   id="g5293"><path
+                     sodipodi:nodetypes="ccccccc"
+                     inkscape:connector-curvature="0"
+                     id="path5331"
+                     d="m 1120.9647,631.19983 16.6192,-2.70122 4e-4,-5.25442 -14.7889,-5.60596 -21.5061,4.71789 0,5.67996 z"
+                     style="fill:#5a681b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83278px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></g><g
+                   id="g5299"><g
+                     id="g5303"><g
+                       id="g5305"><g
+                         id="g5307"><polygon
+                           points="1122.8,622.9 1136.7,627.7 1136.7,623.9 1122.8,618.5 "
+                           id="polygon5313"
+                           style="fill:#b1cd36" /></g><g
+                         id="g5317"><polygon
+                           points="1102.2,627.3 1122.8,622.9 1122.8,618.5 1102.2,623.1 "
+                           id="polygon5325"
+                           style="fill:#cae240" /></g><g
+                         id="g5327"><polygon
+                           points="1136.7,627.7 1121,630.3 1102.2,627.3 1122.8,622.9 "
+                           id="polygon5329"
+                           style="fill:#9caf31" /></g></g></g></g></g></g></g></g></g><g
          id="g3838"
          transform="matrix(1,0,0,0.92087815,-709.08915,75.187023)"><g
            id="g3840"><path
              d="m 905,837.5 c 0,-5.4 4.3,-9.7 9.7,-9.7 5.4,0 9.7,4.3 9.7,9.7 0,4.1 -2.5,7.6 -6.1,9 V 864 h -7.1 v -17.5 c -3.6,-1.5 -6.2,-5 -6.2,-9 z"
              id="path3852"
              inkscape:connector-curvature="0"
-             style="fill:#5a681b" /></g></g></g></g><flowRoot
+             style="fill:#5a681b" /></g></g><g
+         id="g5127"
+         transform="translate(-117.00691,8.433995)"><line
+           stroke-miterlimit="10"
+           x1="530.06549"
+           y1="689.35431"
+           x2="530.06549"
+           y2="758.40198"
+           id="line3366-9"
+           style="fill:#ffffff;stroke:#5a681b;stroke-width:1.09191978;stroke-miterlimit:10" /><polygon
+           stroke-miterlimit="10"
+           points="1022.8,392.8 1032.5,392.8 1032.5,397.9 1046.3,389.4 1032.5,380.8 1032.5,385.9 1022.8,385.9 "
+           id="polygon3368-9"
+           style="fill:#ffffff;stroke:#5a681b;stroke-miterlimit:10"
+           transform="matrix(1.3507796,0,0,1.3361723,-844.28417,177.11573)" /><polygon
+           stroke-miterlimit="10"
+           points="1011.8,392.8 1002.1,392.8 1002.1,397.9 988.3,389.4 1002.1,380.8 1002.1,385.9 1011.8,385.9 "
+           id="polygon3370-4"
+           style="fill:#ffffff;stroke:#5a681b;stroke-miterlimit:10"
+           transform="matrix(1.3507796,0,0,1.3361723,-844.28417,177.11573)" /></g></g></g><flowRoot
      xml:space="preserve"
      id="flowRoot6220"
      style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:40px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion