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
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
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
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
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
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
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
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
dlg.Destroy()\r
\r
pspw = ProjectSliceProgressWindow(actionList, resultFilename)\r
+ pspw.extruderOffset = self.extruderOffset\r
pspw.Centre()\r
pspw.Show(True)\r
\r
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
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
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
\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
\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
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