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