chiark / gitweb /
Merge branch 'master' of github.com:daid/Cura
authorDaid <daid303@gmail.com>
Fri, 4 May 2012 17:28:29 +0000 (19:28 +0200)
committerDaid <daid303@gmail.com>
Fri, 4 May 2012 17:28:29 +0000 (19:28 +0200)
1  2 
Cura/gui/projectPlanner.py

index 5f77025ecec2d93eee3d4183c67e77e4dc46c184,5d4bd80b5bc1258e314b51068347089e652c1f36..b24721e525eac793e1d62bb14bf781e3f1f36acf
@@@ -23,11 -23,109 +23,110 @@@ from util import profil
  from util import util3d\r
  from util import stl\r
  from util import sliceRun\r
 +from util import gcodeInterpreter\r
  \r
- class Action():\r
+ class Action(object):\r
        pass\r
  \r
+ class ProjectObject(stl.stlModel):\r
+       def __init__(self, filename):\r
+               super(ProjectObject, self).__init__()\r
\r
+               self.load(filename)\r
\r
+               self.filename = filename\r
+               self.scale = 1.0\r
+               self.rotate = 0.0\r
+               self.flipX = False\r
+               self.flipY = False\r
+               self.flipZ = False\r
+               self.swapXZ = False\r
+               self.swapYZ = False\r
+               self.extruder = 0\r
+               \r
+               self.modelDisplayList = None\r
+               self.modelDirty = False\r
\r
+               self.origonalVertexes = list(self.vertexes)\r
+               for i in xrange(0, len(self.origonalVertexes)):\r
+                       self.origonalVertexes[i] = self.origonalVertexes[i].copy()\r
+               self.getMinimumZ()\r
+               \r
+               self.centerX = -self.getMinimum().x + 5\r
+               self.centerY = -self.getMinimum().y + 5\r
+               \r
+               self.updateModelTransform()\r
\r
+               self.centerX = -self.getMinimum().x + 5\r
+               self.centerY = -self.getMinimum().y + 5\r
\r
+       def updateModelTransform(self):\r
+               rotate = self.rotate / 180.0 * math.pi\r
+               scaleX = 1.0\r
+               scaleY = 1.0\r
+               scaleZ = 1.0\r
+               if self.flipX:\r
+                       scaleX = -scaleX\r
+               if self.flipY:\r
+                       scaleY = -scaleY\r
+               if self.flipZ:\r
+                       scaleZ = -scaleZ\r
+               swapXZ = self.swapXZ\r
+               swapYZ = self.swapYZ\r
+               mat00 = math.cos(rotate) * scaleX\r
+               mat01 =-math.sin(rotate) * scaleY\r
+               mat10 = math.sin(rotate) * scaleX\r
+               mat11 = math.cos(rotate) * scaleY\r
+               \r
+               for i in xrange(0, len(self.origonalVertexes)):\r
+                       x = self.origonalVertexes[i].x\r
+                       y = self.origonalVertexes[i].y\r
+                       z = self.origonalVertexes[i].z\r
+                       if swapXZ:\r
+                               x, z = z, x\r
+                       if swapYZ:\r
+                               y, z = z, y\r
+                       self.vertexes[i].x = x * mat00 + y * mat01\r
+                       self.vertexes[i].y = x * mat10 + y * mat11\r
+                       self.vertexes[i].z = z * scaleZ\r
\r
+               for face in self.faces:\r
+                       v1 = face.v[0]\r
+                       v2 = face.v[1]\r
+                       v3 = face.v[2]\r
+                       face.normal = (v2 - v1).cross(v3 - v1)\r
+                       face.normal.normalize()\r
\r
+               minZ = self.getMinimumZ()\r
+               minV = self.getMinimum()\r
+               maxV = self.getMaximum()\r
+               for v in self.vertexes:\r
+                       v.z -= minZ\r
+                       v.x -= minV.x + (maxV.x - minV.x) / 2\r
+                       v.y -= minV.y + (maxV.y - minV.y) / 2\r
+               self.getMinimumZ()\r
+               self.modelDirty = True\r
+       \r
+       def clone(self):\r
+               p = ProjectObject(self.filename)\r
\r
+               p.centerX = self.centerX + 5\r
+               p.centerY = self.centerY + 5\r
+               \r
+               p.filename = self.filename\r
+               p.scale = self.scale\r
+               p.rotate = self.rotate\r
+               p.flipX = self.flipX\r
+               p.flipY = self.flipY\r
+               p.flipZ = self.flipZ\r
+               p.swapXZ = self.swapXZ\r
+               p.swapYZ = self.swapYZ\r
+               p.extruder = self.extruder\r
+               \r
+               p.updateModelTransform()\r
+               \r
+               return p\r
\r
  class projectPlanner(wx.Frame):\r
        "Main user interface window"\r
        def __init__(self):\r