chiark / gitweb /
Move extruder offset and extruder head size to preferences.
authorDaid <daid303@gmail.com>
Sun, 29 Apr 2012 09:35:36 +0000 (11:35 +0200)
committerDaid <daid303@gmail.com>
Sun, 29 Apr 2012 09:35:36 +0000 (11:35 +0200)
Cura/gui/preferencesDialog.py
Cura/gui/projectPlanner.py
Cura/gui/sliceProgessPanel.py
Cura/util/profile.py

index ec3159792ee13b5f36129e125f95b7a79ea6b760..41bded92aa5a96de8e41a28ac4e5f13f841710bf 100644 (file)
@@ -7,6 +7,7 @@ import ConfigParser
 from gui import configBase\r
 from gui import validators\r
 from gui import machineCom\r
+from util import profile\r
 \r
 class preferencesDialog(configBase.configWindowBase):\r
        def __init__(self, parent):\r
@@ -14,6 +15,8 @@ class preferencesDialog(configBase.configWindowBase):
                \r
                wx.EVT_CLOSE(self, self.OnClose)\r
                \r
+               self.oldExtruderAmount = int(profile.getPreference('extruder_amount'))\r
+               \r
                left, right, main = self.CreateConfigPanel(self)\r
                configBase.TitleRow(left, 'Machine settings')\r
                c = configBase.SettingRow(left, 'Steps per E', 'steps_per_e', '0', 'Amount of steps per mm filament extrusion', type = 'preference')\r
@@ -25,6 +28,13 @@ class preferencesDialog(configBase.configWindowBase):
                c = configBase.SettingRow(left, 'Machine height (mm)', 'machine_height', '200', 'Size of the machine in mm', type = 'preference')\r
                validators.validFloat(c, 10.0)\r
                c = configBase.SettingRow(left, 'Extruder count', 'extruder_amount', ['1', '2', '3', '4'], 'Amount of extruders in your machine.', type = 'preference')\r
+               \r
+               for i in xrange(1, self.oldExtruderAmount):\r
+                       configBase.TitleRow(left, 'Extruder %d' % (i+1))\r
+                       c = configBase.SettingRow(left, 'Offset X', 'extruder_offset_x%d' % (i), '0.0', 'The offset of your secondary extruder compared to the primary.', type = 'preference')\r
+                       validators.validFloat(c)\r
+                       c = configBase.SettingRow(left, 'Offset Y', 'extruder_offset_y%d' % (i), '0.0', 'The offset of your secondary extruder compared to the primary.', type = 'preference')\r
+                       validators.validFloat(c)\r
 \r
                configBase.TitleRow(left, 'Filament settings')\r
                c = configBase.SettingRow(left, 'Filament density (kg/m3)', 'filament_density', '1300', 'Weight of the filament per m3. Around 1300 for PLA. And around 1040 for ABS. This value is used to estimate the weight if the filament used for the print.', type = 'preference')\r
@@ -42,10 +52,16 @@ class preferencesDialog(configBase.configWindowBase):
                #c = configBase.SettingRow(left, 'Slicer selection', 'slicer', ['Cura (Skeinforge based)', 'Slic3r'], 'Which slicer to use to slice objects. Usually the Cura engine produces the best results. But Slic3r is developing fast and is faster with slicing.', type = 'preference')\r
                c = configBase.SettingRow(left, 'Save profile on slice', 'save_profile', False, 'When slicing save the profile as [stl_file]_profile.ini next to the model.', type = 'preference')\r
                \r
+               self.okButton = wx.Button(left, -1, 'Ok')\r
+               left.GetSizer().Add(self.okButton, (left.GetSizer().GetRows(), 1))\r
+               self.okButton.Bind(wx.EVT_BUTTON, self.OnClose)\r
+               \r
                self.MakeModal(True)\r
                main.Fit()\r
                self.Fit()\r
 \r
        def OnClose(self, e):\r
+               if self.oldExtruderAmount != int(profile.getPreference('extruder_amount')):\r
+                       wx.MessageBox('After changing the amount of extruders you need to restart Cura for full effect.', 'Extruder amount warning.', wx.OK | wx.ICON_INFORMATION)\r
                self.MakeModal(False)\r
                self.Destroy()\r
index 538ea47c3a172aba02e9c226c6990057fe8ba620..448b31b2cbe6adbea0fe07edbeba986e7f3d93c5 100644 (file)
@@ -40,10 +40,14 @@ class projectPlanner(wx.Frame):
                self.selection = None\r
 \r
                self.machineSize = util3d.Vector3(float(profile.getPreference('machine_width')), float(profile.getPreference('machine_depth')), float(profile.getPreference('machine_height')))\r
-               self.headSizeMin = util3d.Vector3(70,18,0)\r
-               self.headSizeMax = util3d.Vector3(18,35,0)\r
+               self.headSizeMin = util3d.Vector3(float(profile.getPreference('extruder_head_size_min_x')), float(profile.getPreference('extruder_head_size_min_y')),0)\r
+               self.headSizeMax = util3d.Vector3(float(profile.getPreference('extruder_head_size_max_x')), float(profile.getPreference('extruder_head_size_max_y')),0)\r
 \r
-               self.extruderOffset = [util3d.Vector3(0,0,0), util3d.Vector3(-22,0,0), util3d.Vector3(0,0,0), util3d.Vector3(0,0,0)]\r
+               self.extruderOffset = [\r
+                       util3d.Vector3(0,0,0),\r
+                       util3d.Vector3(float(profile.getPreference('extruder_offset_x1')), float(profile.getPreference('extruder_offset_y1')), 0),\r
+                       util3d.Vector3(float(profile.getPreference('extruder_offset_x2')), float(profile.getPreference('extruder_offset_y2')), 0),\r
+                       util3d.Vector3(float(profile.getPreference('extruder_offset_x3')), float(profile.getPreference('extruder_offset_y3')), 0)]\r
 \r
                self.toolbar = toolbarUtil.Toolbar(self)\r
 \r
@@ -467,14 +471,14 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                if item != None:\r
                                        item.centerX += float(e.GetX() - self.oldX) * self.zoom / self.GetSize().GetHeight() * 2\r
                                        item.centerY -= float(e.GetY() - self.oldY) * self.zoom / self.GetSize().GetHeight() * 2\r
-                                       if item.centerX < -item.getMinimum().x * item.scale:\r
-                                               item.centerX = -item.getMinimum().x * item.scale\r
-                                       if item.centerY < -item.getMinimum().y * item.scale:\r
-                                               item.centerY = -item.getMinimum().y * item.scale\r
-                                       if item.centerX > self.parent.machineSize.x - item.getMaximum().x * item.scale:\r
-                                               item.centerX = self.parent.machineSize.x - item.getMaximum().x * item.scale\r
-                                       if item.centerY > self.parent.machineSize.y - item.getMaximum().y * item.scale:\r
-                                               item.centerY = self.parent.machineSize.y - item.getMaximum().y * item.scale\r
+                                       if item.centerX < -item.getMinimum().x * item.scale + self.parent.extruderOffset[item.extruder].x:\r
+                                               item.centerX = -item.getMinimum().x * item.scale + self.parent.extruderOffset[item.extruder].x\r
+                                       if item.centerY < -item.getMinimum().y * item.scale + self.parent.extruderOffset[item.extruder].y:\r
+                                               item.centerY = -item.getMinimum().y * item.scale + self.parent.extruderOffset[item.extruder].y\r
+                                       if item.centerX > self.parent.machineSize.x + self.parent.extruderOffset[item.extruder].x - item.getMaximum().x * item.scale:\r
+                                               item.centerX = self.parent.machineSize.x + self.parent.extruderOffset[item.extruder].x - item.getMaximum().x * item.scale\r
+                                       if item.centerY > self.parent.machineSize.y + self.parent.extruderOffset[item.extruder].y - item.getMaximum().y * item.scale:\r
+                                               item.centerY = self.parent.machineSize.y + self.parent.extruderOffset[item.extruder].y - item.getMaximum().y * item.scale\r
                        self.Refresh()\r
                else:\r
                        self.allowDrag = False\r
index 5923693ecf2f85e185ab7ee0352a54dd233cf5ca..b56fc5edcc9a5b69db62612a4e1ad3e5359cc15e 100644 (file)
@@ -60,11 +60,13 @@ class sliceProgessPanel(wx.Panel):
                cmdList = []
                oldProfile = profile.getGlobalProfileString()
                for filename in self.filelist:
-                       print filename, self.filelist.index(filename)
-                       if self.filelist.index(filename) > 0:
+                       idx = self.filelist.index(filename)
+                       print filename, idx
+                       if idx > 0:
                                profile.putProfileSetting('fan_enabled', 'False')
                                profile.putProfileSetting('skirt_line_count', '0')
-                               profile.putProfileSetting('machine_center_x', profile.getProfileSettingFloat('machine_center_x') + 22)
+                               profile.putProfileSetting('machine_center_x', profile.getProfileSettingFloat('machine_center_x') + float(profile.getPreference('extruder_offset_x%d' % (idx))))
+                               profile.putProfileSetting('machine_center_y', profile.getProfileSettingFloat('machine_center_y') + float(profile.getPreference('extruder_offset_y%d' % (idx))))
                        if len(self.filelist) > 1:
                                profile.putProfileSetting('add_start_end_gcode', 'False')
                                profile.putProfileSetting('gcode_extension', 'multi_extrude_tmp')
@@ -197,6 +199,7 @@ class WorkerThread(threading.Thread):
                                                resultFile.write(';EXTRUDER:%d\n' % (nextExtruder))
                                                if nextExtruder != currentExtruder:
                                                        resultFile.write("G1 E-5 F5000\n")
+                                                       resultFile.write("G92 E0\n")
                                                        resultFile.write("T%d\n" % (nextExtruder))
                                                        resultFile.write("G1 E5 F5000\n")
                                                        resultFile.write("G92 E0\n")
index b7450a6c5b6f05656f5aa608991645e87f93de75..046617cb171f64c06a7a96a6dc527e014ac07b20 100644 (file)
@@ -128,6 +128,12 @@ preferencesDefaultSettings = {
        'machine_depth': '205',\r
        'machine_height': '200',\r
        'extruder_amount': '1',\r
+       'extruder_offset_x1': '-22.0',\r
+       'extruder_offset_y1': '0.0',\r
+       'extruder_offset_x2': '0.0',\r
+       'extruder_offset_y2': '0.0',\r
+       'extruder_offset_x3': '0.0',\r
+       'extruder_offset_y3': '0.0',\r
        'filament_density': '1300',\r
        'steps_per_e': '0',\r
        'serial_port': 'AUTO',\r
@@ -136,6 +142,11 @@ preferencesDefaultSettings = {
        'save_profile': 'False',\r
        'filament_cost_kg': '0',\r
        'filament_cost_meter': '0',\r
+       \r
+       'extruder_head_size_min_x': '70.0',\r
+       'extruder_head_size_min_y': '18.0',\r
+       'extruder_head_size_max_x': '18.0',\r
+       'extruder_head_size_max_y': '35.0',\r
 }\r
 \r
 #########################################################\r