chiark / gitweb /
Keep the objects on the printer bed after autoplacing in project planner. Fixed #92
authordaid <daid303@gmail.com>
Mon, 7 May 2012 15:36:41 +0000 (17:36 +0200)
committerdaid <daid303@gmail.com>
Mon, 7 May 2012 15:36:41 +0000 (17:36 +0200)
Cura/gui/projectPlanner.py
Cura/gui/toolbarUtil.py

index 673176273063ef6b7b734ec9e5e983ef4aabd538..4b5b1ec0511d1db5e8462895537a02e2e263afee 100644 (file)
@@ -31,11 +31,12 @@ class Action(object):
        pass\r
 \r
 class ProjectObject(stl.stlModel):\r
-       def __init__(self, filename):\r
+       def __init__(self, parent, filename):\r
                super(ProjectObject, self).__init__()\r
 \r
                self.load(filename)\r
 \r
+               self.parent = parent\r
                self.filename = filename\r
                self.scale = 1.0\r
                self.rotate = 0.0\r
@@ -110,7 +111,7 @@ class ProjectObject(stl.stlModel):
                self.modelDirty = True\r
        \r
        def clone(self):\r
-               p = ProjectObject(self.filename)\r
+               p = ProjectObject(self.parent, self.filename)\r
 \r
                p.centerX = self.centerX + 5\r
                p.centerY = self.centerY + 5\r
@@ -128,6 +129,16 @@ class ProjectObject(stl.stlModel):
                p.updateModelTransform()\r
                \r
                return p\r
+       \r
+       def clampXY(self):\r
+               if self.centerX < -self.getMinimum().x * self.scale + self.parent.extruderOffset[self.extruder].x:\r
+                       self.centerX = -self.getMinimum().x * self.scale + self.parent.extruderOffset[self.extruder].x\r
+               if self.centerY < -self.getMinimum().y * self.scale + self.parent.extruderOffset[self.extruder].y:\r
+                       self.centerY = -self.getMinimum().y * self.scale + self.parent.extruderOffset[self.extruder].y\r
+               if self.centerX > self.parent.machineSize.x + self.parent.extruderOffset[self.extruder].x - self.getMaximum().x * self.scale:\r
+                       self.centerX = self.parent.machineSize.x + self.parent.extruderOffset[self.extruder].x - self.getMaximum().x * self.scale\r
+               if self.centerY > self.parent.machineSize.y + self.parent.extruderOffset[self.extruder].y - self.getMaximum().y * self.scale:\r
+                       self.centerY = self.parent.machineSize.y + self.parent.extruderOffset[self.extruder].y - self.getMaximum().y * self.scale\r
 \r
 class projectPlanner(wx.Frame):\r
        "Main user interface window"\r
@@ -273,7 +284,7 @@ class projectPlanner(wx.Frame):
                        while cp.has_section('model_%d' % (i)):\r
                                section = 'model_%d' % (i)\r
                                \r
-                               item = ProjectObject(unicode(cp.get(section, 'filename'), "utf-8"))\r
+                               item = ProjectObject(self, unicode(cp.get(section, 'filename'), "utf-8"))\r
                                item.centerX = float(cp.get(section, 'centerX'))\r
                                item.centerY = float(cp.get(section, 'centerY'))\r
                                item.scale = float(cp.get(section, 'scale'))\r
@@ -326,7 +337,7 @@ class projectPlanner(wx.Frame):
                dlg.SetWildcard("STL files (*.stl)|*.stl;*.STL")\r
                if dlg.ShowModal() == wx.ID_OK:\r
                        for filename in dlg.GetPaths():\r
-                               item = ProjectObject(filename)\r
+                               item = ProjectObject(self, filename)\r
                                profile.putPreference('lastFile', item.filename)\r
                                self.list.append(item)\r
                                self.selection = item\r
@@ -396,6 +407,8 @@ class projectPlanner(wx.Frame):
                                bestAllowedSize = i\r
                                bestArea = area\r
                self._doAutoPlace(bestAllowedSize)\r
+               for item in self.list:\r
+                       item.clampXY()\r
                self.preview.Refresh()\r
        \r
        def _doAutoPlace(self, allowedSizeY):\r
@@ -546,14 +559,7 @@ 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 + 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
+                                       item.clampXY()\r
                        self.Refresh()\r
                else:\r
                        self.allowDrag = False\r
index 5914a30810728f638713ac67880267a214a71a89..a609aa6e8f42230d2136017541ba0c9457a1bc77 100644 (file)
@@ -1,6 +1,6 @@
 from __future__ import division
 
-import os
+import os, sys
 
 import wx
 from wx.lib import buttons