chiark / gitweb /
Add autoplace toolbar button. Make autoplace work with the fan on the other side...
authordaid <daid303@gmail.com>
Wed, 9 May 2012 12:21:58 +0000 (14:21 +0200)
committerdaid <daid303@gmail.com>
Wed, 9 May 2012 12:21:58 +0000 (14:21 +0200)
Cura/gui/projectPlanner.py
Cura/images/autoplace.png [new file with mode: 0644]

index 4b5b1ec0511d1db5e8462895537a02e2e263afee..4ab326605e0e799d8c17c1fcdbceddffe83e828a 100644 (file)
@@ -46,6 +46,7 @@ class ProjectObject(stl.stlModel):
                self.swapXZ = False\r
                self.swapYZ = False\r
                self.extruder = 0\r
+               self.profile = None\r
                \r
                self.modelDisplayList = None\r
                self.modelDirty = False\r
@@ -183,6 +184,7 @@ class projectPlanner(wx.Frame):
                toolbarUtil.NormalButton(self.toolbar2, self.OnMoveUp, 'move-up.png', 'Move model up in print list')\r
                toolbarUtil.NormalButton(self.toolbar2, self.OnMoveDown, 'move-down.png', 'Move model down in print list')\r
                toolbarUtil.NormalButton(self.toolbar2, self.OnCopy, 'copy.png', 'Make a copy of the current selected object')\r
+               toolbarUtil.NormalButton(self.toolbar2, self.OnAutoPlace, 'autoplace.png', 'Automaticly organize the objects on the platform.')\r
                self.toolbar2.Realize()\r
                \r
                sizer = wx.GridBagSizer(2,2)\r
@@ -225,7 +227,7 @@ 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
+\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
@@ -268,6 +270,8 @@ class projectPlanner(wx.Frame):
                                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
+                               if item.profile != None:\r
+                                       cp.set(section, 'profile', item.profile)\r
                                i += 1\r
                        cp.write(open(dlg.GetPath(), "w"))\r
                dlg.Destroy()\r
@@ -295,7 +299,9 @@ class projectPlanner(wx.Frame):
                                item.swapXZ = cp.get(section, 'swapXZ') == 'True'\r
                                item.swapYZ = cp.get(section, 'swapYZ') == 'True'\r
                                if cp.has_option(section, 'extruder'):\r
-                                       item.extuder = int(cp.get(section, 'extruder'))-1\r
+                                       item.extuder = int(cp.get(section, 'extruder')) - 1\r
+                               if cp.has_option(section, 'profile'):\r
+                                       item.profile = cp.get(section, 'profile')\r
                                item.updateModelTransform()\r
                                i += 1\r
                                \r
@@ -419,19 +425,27 @@ class projectPlanner(wx.Frame):
                        extraSizeMin = extraSizeMin + util3d.Vector3(skirtSize, skirtSize, 0)\r
                        extraSizeMax = extraSizeMax + util3d.Vector3(skirtSize, skirtSize, 0)\r
 \r
-               posX = self.machineSize.x\r
+               if extraSizeMin.x > extraSizeMax.x:\r
+                       posX = self.machineSize.x\r
+                       dirX = -1\r
+               else:\r
+                       posX = 0\r
+                       dirX = 1\r
                posY = 0\r
+               dirY = 1\r
+               \r
                minX = self.machineSize.x\r
                minY = self.machineSize.y\r
                maxX = 0\r
                maxY = 0\r
-               dirX = -1\r
-               dirY = 1\r
                for item in self.list:\r
                        item.centerX = posX + item.getMaximum().x * item.scale * dirX\r
                        item.centerY = posY + item.getMaximum().y * item.scale * dirY\r
                        if item.centerY + item.getSize().y >= allowedSizeY:\r
-                               posX = minX - extraSizeMax.x - 1\r
+                               if dirX < 0:\r
+                                       posX = minX - extraSizeMax.x - 1\r
+                               else:\r
+                                       posX = maxX + extraSizeMin.x + 1\r
                                posY = 0\r
                                item.centerX = posX + item.getMaximum().x * item.scale * dirX\r
                                item.centerY = posY + item.getMaximum().y * item.scale * dirY\r
@@ -442,16 +456,20 @@ class projectPlanner(wx.Frame):
                        maxY = max(maxY, item.centerY + item.getSize().y * item.scale / 2)\r
                \r
                for item in self.list:\r
-                       item.centerX -= minX / 2\r
+                       if dirX < 0:\r
+                               item.centerX -= minX / 2\r
+                       else:\r
+                               item.centerX += (self.machineSize.x - maxX) / 2\r
                        item.centerY += (self.machineSize.y - maxY) / 2\r
                \r
-               if minX < 0:\r
+               if minX < 0 or maxX > self.machineSize.x:\r
                        return ((maxX - minX) + (maxY - minY)) * 100\r
                \r
                return (maxX - minX) + (maxY - minY)\r
 \r
        def OnSlice(self, e):\r
                put = profile.setTempOverride\r
+               oldProfile = profile.getGlobalProfileString()\r
 \r
                put('model_multiply_x', '1')\r
                put('model_multiply_y', '1')\r
@@ -462,6 +480,8 @@ class projectPlanner(wx.Frame):
                clearZ = 0\r
                actionList = []\r
                for item in self.list:\r
+                       if item.profile != None and os.path.isfile(item.profile):\r
+                               profile.loadGlobalProfile(item.profile)\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
@@ -481,6 +501,9 @@ class projectPlanner(wx.Frame):
                        clearZ = max(clearZ, item.getMaximum().z * item.scale)\r
                        action.clearZ = clearZ\r
                        actionList.append(action)\r
+\r
+                       if item.profile != None:\r
+                               profile.loadGlobalProfileFromString(oldProfile)\r
                \r
                #Restore the old profile.\r
                profile.resetTempOverride()\r
@@ -553,8 +576,6 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                if self.pitch < 10:\r
                                        self.pitch = 10\r
                        else:\r
-                               #self.offsetX += float(e.GetX() - self.oldX) * self.zoom / self.GetSize().GetHeight() * 2\r
-                               #self.offsetY -= float(e.GetY() - self.oldY) * self.zoom / self.GetSize().GetHeight() * 2\r
                                item = self.parent.selection\r
                                if item != None:\r
                                        item.centerX += float(e.GetX() - self.oldX) * self.zoom / self.GetSize().GetHeight() * 2\r
diff --git a/Cura/images/autoplace.png b/Cura/images/autoplace.png
new file mode 100644 (file)
index 0000000..440295c
Binary files /dev/null and b/Cura/images/autoplace.png differ