From: daid Date: Mon, 19 Mar 2012 16:11:50 +0000 (+0100) Subject: Add error lines to 3D model preview after slicing X-Git-Tag: RC1~55 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=a4c7ee8c4de6d2a0907e088b97d2bf22dba0669e;p=cura.git Add error lines to 3D model preview after slicing --- diff --git a/SkeinPyPy/newui/preview3d.py b/SkeinPyPy/newui/preview3d.py index 51ba092c..dc663b69 100644 --- a/SkeinPyPy/newui/preview3d.py +++ b/SkeinPyPy/newui/preview3d.py @@ -93,13 +93,14 @@ class previewPanel(wx.Panel): self.glCanvas.Refresh() def loadModelFile(self, filename): - gcodeFilename = filename[: filename.rfind('.')] + "_export.gcode" if self.modelFilename != filename: self.modelFileTime = None self.gcodeFileTime = None + self.logFileTime = None self.modelFilename = filename - self.gcodeFilename = gcodeFilename + self.gcodeFilename = filename[: filename.rfind('.')] + "_export.gcode" + self.logFilename = filename[: filename.rfind('.')] + "_export.log" #Do the STL file loading in a background thread so we don't block the UI. thread = threading.Thread(target=self.doFileLoad) thread.start() @@ -113,6 +114,7 @@ class previewPanel(wx.Panel): triangleMesh.origonalVertexes[i] = triangleMesh.origonalVertexes[i].copy() triangleMesh.getMinimumZ() self.modelDirty = False + self.errorList = [] self.triangleMesh = triangleMesh self.updateModelTransform() wx.CallAfter(self.updateToolbar) @@ -122,10 +124,24 @@ class previewPanel(wx.Panel): self.gcodeFileTime = os.stat(self.gcodeFilename).st_mtime gcode = gcodeInterpreter.gcode(self.gcodeFilename) self.gcodeDirty = False + self.errorList = [] self.gcode = gcode self.gcodeDirty = True wx.CallAfter(self.updateToolbar) wx.CallAfter(self.glCanvas.Refresh) + elif not os.path.isfile(self.gcodeFilename): + self.gcode = None + + if os.path.isfile(self.logFilename): + errorList = [] + for line in open(self.logFilename, "rt"): + 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) + if res != None: + v1 = util3d.Vector3(float(res.group(2)), float(res.group(3)), float(res.group(4))) + v2 = util3d.Vector3(float(res.group(5)), float(res.group(6)), float(res.group(7))) + errorList.append([v1, v2]) + self.errorList = errorList + wx.CallAfter(self.glCanvas.Refresh) def updateToolbar(self): self.layerSpin.Show(self.gcode != None) @@ -478,6 +494,16 @@ class PreviewGLCanvas(glcanvas.GLCanvas): elif self.viewMode == "Model - Normal": glEnable(GL_LIGHTING) glCallList(self.modelDisplayList) + + glDisable(GL_LIGHTING) + glDisable(GL_DEPTH_TEST) + glColor3f(1,0,0) + glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0) + glBegin(GL_LINES) + for err in self.parent.errorList: + glVertex3f(err[0].x, err[0].y, err[0].z) + glVertex3f(err[1].x, err[1].y, err[1].z) + glEnd() glFlush() def InitGL(self): diff --git a/SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py b/SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py index 5a01edeb..af138a99 100644 --- a/SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py +++ b/SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py @@ -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(