chiark / gitweb /
Added extruder selection to project planner, fixed bug with project planner where...
authorDaid <daid303@gmail.com>
Fri, 27 Apr 2012 17:18:29 +0000 (19:18 +0200)
committerDaid <daid303@gmail.com>
Fri, 27 Apr 2012 17:18:29 +0000 (19:18 +0200)
Cura/gui/projectPlanner.py
Cura/gui/sliceProgessPanel.py

index f9e78935ac3e5d5edce5a30f38d3bdc9c2302c67..04513bd53ecb664ac8ffa053d89d634a3ed2df0c 100644 (file)
@@ -43,6 +43,8 @@ class projectPlanner(wx.Frame):
                self.headSizeMin = util3d.Vector3(70,18,0)\r
                self.headSizeMax = util3d.Vector3(18,35,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
+\r
                self.toolbar = toolbarUtil.Toolbar(self)\r
 \r
                toolbarUtil.NormalButton(self.toolbar, self.OnLoadProject, 'open.png', 'Open project')\r
@@ -95,6 +97,12 @@ class projectPlanner(wx.Frame):
                sizer.Add(self.scaleCtrl, (0,1), flag=wx.ALIGN_BOTTOM|wx.EXPAND)\r
                sizer.Add(wx.StaticText(panel, -1, 'Rotate'), (1,0), flag=wx.ALIGN_CENTER_VERTICAL)\r
                sizer.Add(self.rotateCtrl, (1,1), flag=wx.ALIGN_BOTTOM|wx.EXPAND)\r
+               \r
+               if int(profile.getPreference('extruder_amount')) > 1:\r
+                       self.extruderCtrl = wx.ComboBox(panel, -1, '1', choices=map(str, range(1, int(profile.getPreference('extruder_amount'))+1)), style=wx.CB_DROPDOWN|wx.CB_READONLY)\r
+                       sizer.Add(wx.StaticText(panel, -1, 'Extruder'), (2,0), flag=wx.ALIGN_CENTER_VERTICAL)\r
+                       sizer.Add(self.extruderCtrl, (2,1), flag=wx.ALIGN_BOTTOM|wx.EXPAND)\r
+                       self.extruderCtrl.Bind(wx.EVT_COMBOBOX, self.OnExtruderChange)\r
 \r
                self.scaleCtrl.Bind(wx.EVT_TEXT, self.OnScaleChange)\r
                self.rotateCtrl.Bind(wx.EVT_SPINCTRL, self.OnRotateChange)\r
@@ -126,6 +134,7 @@ class projectPlanner(wx.Frame):
                                cp.set(section, 'flipZ', str(item.flipZ))\r
                                cp.set(section, 'swapXZ', str(item.swapXZ))\r
                                cp.set(section, 'swapYZ', str(item.swapYZ))\r
+                               cp.set(section, 'extruder', str(item.extruder+1))\r
                                i += 1\r
                        cp.write(open(dlg.GetPath(), "w"))\r
                dlg.Destroy()\r
@@ -149,11 +158,12 @@ class projectPlanner(wx.Frame):
                                item.centerY = float(cp.get(section, 'centerY'))\r
                                item.scale = float(cp.get(section, 'scale'))\r
                                item.rotate = float(cp.get(section, 'rotate'))\r
-                               cp.get(section, 'flipX')\r
-                               cp.get(section, 'flipY')\r
-                               cp.get(section, 'flipZ')\r
-                               cp.get(section, 'swapXZ')\r
-                               cp.get(section, 'swapYZ')\r
+                               item.flipX = cp.get(section, 'flipX') == 'True'\r
+                               item.flipY = cp.get(section, 'flipY') == 'True'\r
+                               item.flipZ = cp.get(section, 'flipZ') == 'True'\r
+                               item.swapXZ = cp.get(section, 'swapXZ') == 'True'\r
+                               item.swapYZ = cp.get(section, 'swapYZ') == 'True'\r
+                               item.extuder = int(cp.get(section, 'extruder'))-1\r
                                i += 1\r
                                \r
                                self.list.append(item)\r
@@ -184,8 +194,10 @@ class projectPlanner(wx.Frame):
                self.selection = self.list[self.listbox.GetSelection()]\r
                self.scaleCtrl.SetValue(str(self.selection.scale))\r
                self.rotateCtrl.SetValue(int(self.selection.rotate))\r
+               if int(profile.getPreference('extruder_amount')) > 1:\r
+                       self.extruderCtrl.SetValue(str(self.selection.extruder+1))\r
                self.preview.Refresh()\r
-\r
+       \r
        def OnAddModel(self, e):\r
                dlg=wx.FileDialog(self, "Open file to print", os.path.split(profile.getPreference('lastFile'))[0], style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST|wx.FD_MULTIPLE)\r
                dlg.SetWildcard("STL files (*.stl)|*.stl;*.STL")\r
@@ -233,7 +245,7 @@ class projectPlanner(wx.Frame):
                extraSizeMax = self.headSizeMax\r
                if profile.getProfileSettingFloat('skirt_line_count') > 0:\r
                        skirtSize = profile.getProfileSettingFloat('skirt_line_count') * profile.calculateEdgeWidth() + profile.getProfileSettingFloat('skirt_gap')\r
-                       extraSizeMin = extraSizeMin - util3d.Vector3(skirtSize, skirtSize, 0)\r
+                       extraSizeMin = extraSizeMin + util3d.Vector3(skirtSize, skirtSize, 0)\r
                        extraSizeMax = extraSizeMax + util3d.Vector3(skirtSize, skirtSize, 0)\r
 \r
                posX = self.machineSize.x\r
@@ -281,8 +293,8 @@ class projectPlanner(wx.Frame):
                clearZ = 0\r
                actionList = []\r
                for item in self.list:\r
-                       put('machine_center_x', item.centerX)\r
-                       put('machine_center_y', item.centerY)\r
+                       put('machine_center_x', item.centerX - self.extruderOffset[item.extruder].x)\r
+                       put('machine_center_y', item.centerY - self.extruderOffset[item.extruder].y)\r
                        put('model_scale', item.scale)\r
                        put('flip_x', item.flipX)\r
                        put('flip_y', item.flipY)\r
@@ -295,6 +307,7 @@ class projectPlanner(wx.Frame):
                        action.sliceCmd = sliceRun.getSliceCommand(item.filename)\r
                        action.centerX = item.centerX\r
                        action.centerY = item.centerY\r
+                       action.extruder = item.extruder\r
                        action.filename = item.filename\r
                        clearZ = max(clearZ, item.getMaximum().z * item.scale)\r
                        action.clearZ = clearZ\r
@@ -312,6 +325,7 @@ class projectPlanner(wx.Frame):
                dlg.Destroy()\r
                \r
                pspw = ProjectSliceProgressWindow(actionList, resultFilename)\r
+               pspw.extruderOffset = self.extruderOffset\r
                pspw.Centre()\r
                pspw.Show(True)\r
        \r
@@ -331,6 +345,7 @@ class projectPlanner(wx.Frame):
                item.flipZ = False\r
                item.swapXZ = False\r
                item.swapYZ = False\r
+               item.extruder = 0\r
                \r
                item.modelDisplayList = None\r
                item.modelDirty = False\r
@@ -355,6 +370,12 @@ class projectPlanner(wx.Frame):
                self.selection.rotate = float(self.rotateCtrl.GetValue())\r
                self.updateModelTransform(self.selection)\r
 \r
+       def OnExtruderChange(self, e):\r
+               if self.selection == None:\r
+                       return\r
+               self.selection.extruder = int(self.extruderCtrl.GetValue()) - 1\r
+               self.preview.Refresh()\r
+\r
        def updateModelTransform(self, item):\r
                rotate = item.rotate / 180.0 * math.pi\r
                scaleX = 1.0\r
@@ -508,7 +529,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                extraSizeMax = self.parent.headSizeMax\r
                if profile.getProfileSettingFloat('skirt_line_count') > 0:\r
                        skirtSize = profile.getProfileSettingFloat('skirt_line_count') * profile.calculateEdgeWidth() + profile.getProfileSettingFloat('skirt_gap')\r
-                       extraSizeMin = extraSizeMin - util3d.Vector3(skirtSize, skirtSize, 0)\r
+                       extraSizeMin = extraSizeMin + util3d.Vector3(skirtSize, skirtSize, 0)\r
                        extraSizeMax = extraSizeMax + util3d.Vector3(skirtSize, skirtSize, 0)\r
 \r
                for item in self.parent.list:\r
@@ -517,8 +538,8 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                \r
                for idx1 in xrange(0, len(self.parent.list)):\r
                        item = self.parent.list[idx1]\r
-                       iMin1 = item.getMinimum() * item.scale + util3d.Vector3(item.centerX, item.centerY, 0) - extraSizeMin\r
-                       iMax1 = item.getMaximum() * item.scale + util3d.Vector3(item.centerX, item.centerY, 0) + extraSizeMax\r
+                       iMin1 = item.getMinimum() * item.scale + util3d.Vector3(item.centerX, item.centerY, 0) - extraSizeMin - self.parent.extruderOffset[item.extruder]\r
+                       iMax1 = item.getMaximum() * item.scale + util3d.Vector3(item.centerX, item.centerY, 0) + extraSizeMax - self.parent.extruderOffset[item.extruder]\r
                        for idx2 in xrange(0, idx1):\r
                                item2 = self.parent.list[idx2]\r
                                iMin2 = item2.getMinimum() * item2.scale + util3d.Vector3(item2.centerX, item2.centerY, 0)\r
@@ -566,8 +587,8 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                        \r
                        vMin = item.getMinimum() * item.scale\r
                        vMax = item.getMaximum() * item.scale\r
-                       vMinHead = vMin - extraSizeMin\r
-                       vMaxHead = vMax + extraSizeMax\r
+                       vMinHead = vMin - extraSizeMin - self.parent.extruderOffset[item.extruder]\r
+                       vMaxHead = vMax + extraSizeMax - self.parent.extruderOffset[item.extruder]\r
 \r
                        glDisable(GL_LIGHTING)\r
 \r
@@ -702,12 +723,15 @@ class ProjectSliceProgressWindow(wx.Frame):
                        self.returnCode = p.wait()\r
                        \r
                        oldProfile = profile.getGlobalProfileString()\r
-                       put('machine_center_x', action.centerX)\r
-                       put('machine_center_y', action.centerY)\r
+                       put('machine_center_x', action.centerX - self.extruderOffset[action.extruder].x)\r
+                       put('machine_center_y', action.centerY - self.extruderOffset[action.extruder].y)\r
                        put('clear_z', action.clearZ)\r
+                       put('extruder', action.extruder)\r
                        \r
                        if action == self.actionList[0]:\r
                                resultFile.write(';TYPE:CUSTOM\n')\r
+                               resultFile.write('T%d\n' % (action.extruder))\r
+                               currentExtruder = action.extruder\r
                                resultFile.write(profile.getAlterationFileContents('start.gcode'))\r
                        else:\r
                                #reset the extrusion length, and move to the next object center.\r
index 35367b4c51b8bd6068056972e46ef2ff1ab91b01..5923693ecf2f85e185ab7ee0352a54dd233cf5ca 100644 (file)
@@ -64,7 +64,7 @@ class sliceProgessPanel(wx.Panel):
                        if self.filelist.index(filename) > 0:
                                profile.putProfileSetting('fan_enabled', 'False')
                                profile.putProfileSetting('skirt_line_count', '0')
-                               profile.putProfileSetting('machine_center_x', profile.getProfileSettingFloat('machine_center_y') + 22)
+                               profile.putProfileSetting('machine_center_x', profile.getProfileSettingFloat('machine_center_x') + 22)
                        if len(self.filelist) > 1:
                                profile.putProfileSetting('add_start_end_gcode', 'False')
                                profile.putProfileSetting('gcode_extension', 'multi_extrude_tmp')