chiark / gitweb /
Add error lines to 3D model preview after slicing
authordaid <daid303@gmail.com>
Mon, 19 Mar 2012 16:11:50 +0000 (17:11 +0100)
committerdaid <daid303@gmail.com>
Mon, 19 Mar 2012 16:11:50 +0000 (17:11 +0100)
SkeinPyPy/newui/preview3d.py
SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py

index 51ba092c769b46147a73fa097155c3416f4eb526..dc663b69a14461dadee185c47436ae4dfac69a33 100644 (file)
@@ -93,13 +93,14 @@ class previewPanel(wx.Panel):
                self.glCanvas.Refresh()\r
        \r
        def loadModelFile(self, filename):\r
-               gcodeFilename = filename[: filename.rfind('.')] + "_export.gcode"\r
                if self.modelFilename != filename:\r
                        self.modelFileTime = None\r
                        self.gcodeFileTime = None\r
+                       self.logFileTime = None\r
                \r
                self.modelFilename = filename\r
-               self.gcodeFilename = gcodeFilename\r
+               self.gcodeFilename = filename[: filename.rfind('.')] + "_export.gcode"\r
+               self.logFilename = filename[: filename.rfind('.')] + "_export.log"\r
                #Do the STL file loading in a background thread so we don't block the UI.\r
                thread = threading.Thread(target=self.doFileLoad)\r
                thread.start()\r
@@ -113,6 +114,7 @@ class previewPanel(wx.Panel):
                                triangleMesh.origonalVertexes[i] = triangleMesh.origonalVertexes[i].copy()\r
                        triangleMesh.getMinimumZ()\r
                        self.modelDirty = False\r
+                       self.errorList = []\r
                        self.triangleMesh = triangleMesh\r
                        self.updateModelTransform()\r
                        wx.CallAfter(self.updateToolbar)\r
@@ -122,10 +124,24 @@ class previewPanel(wx.Panel):
                        self.gcodeFileTime = os.stat(self.gcodeFilename).st_mtime\r
                        gcode = gcodeInterpreter.gcode(self.gcodeFilename)\r
                        self.gcodeDirty = False\r
+                       self.errorList = []\r
                        self.gcode = gcode\r
                        self.gcodeDirty = True\r
                        wx.CallAfter(self.updateToolbar)\r
                        wx.CallAfter(self.glCanvas.Refresh)\r
+               elif not os.path.isfile(self.gcodeFilename):\r
+                       self.gcode = None\r
+               \r
+               if os.path.isfile(self.logFilename):\r
+                       errorList = []\r
+                       for line in open(self.logFilename, "rt"):\r
+                               res = re.search('Model error\(([a-z ]*)\): \(([0-9\.\-e]*), ([0-9\.\-e]*), ([0-9\.\-e]*)\) \(([0-9\.\-e]*), ([0-9\.\-e]*), ([0-9\.\-e]*)\)', line)\r
+                               if res != None:\r
+                                       v1 = util3d.Vector3(float(res.group(2)), float(res.group(3)), float(res.group(4)))\r
+                                       v2 = util3d.Vector3(float(res.group(5)), float(res.group(6)), float(res.group(7)))\r
+                                       errorList.append([v1, v2])\r
+                       self.errorList = errorList\r
+                       wx.CallAfter(self.glCanvas.Refresh)\r
        \r
        def updateToolbar(self):\r
                self.layerSpin.Show(self.gcode != None)\r
@@ -478,6 +494,16 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                        elif self.viewMode == "Model - Normal":\r
                                glEnable(GL_LIGHTING)\r
                                glCallList(self.modelDisplayList)\r
+                               \r
+                               glDisable(GL_LIGHTING)\r
+                               glDisable(GL_DEPTH_TEST)\r
+                               glColor3f(1,0,0)\r
+                               glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0)\r
+                               glBegin(GL_LINES)\r
+                               for err in self.parent.errorList:\r
+                                       glVertex3f(err[0].x, err[0].y, err[0].z)\r
+                                       glVertex3f(err[1].x, err[1].y, err[1].z)\r
+                               glEnd()\r
                glFlush()\r
 \r
        def InitGL(self):\r
index 5a01edeb49d90ac46a2deb90198ea4f65e6ad98f..af138a998cc453f745548ff838010d2bac7b1c20 100644 (file)
@@ -214,6 +214,16 @@ class CarveSkein:
                mat01 =-math.sin(rotate) * scaleY
                mat10 = math.sin(rotate) * scaleX
                mat11 = math.cos(rotate) * scaleY
+
+               minZ = carving.getMinimumZ()
+               minSize = carving.getCarveCornerMinimum()
+               maxSize = carving.getCarveCornerMaximum()
+               for v in carving.vertexes:
+                       v.z -= minZ
+                       v.x -= minSize.x + (maxSize.x - minSize.x) / 2
+                       v.y -= minSize.y + (maxSize.y - minSize.y) / 2
+                       #v.x += self.machineCenter.x
+                       #v.y += self.machineCenter.y
                
                for i in xrange(0, len(carving.vertexes)):
                        carving.vertexes[i] = Vector3(