Add error lines to 3D model preview after slicing

This commit is contained in:
daid 2012-03-19 17:11:50 +01:00
parent 09a4f0847c
commit a4c7ee8c4d
2 changed files with 38 additions and 2 deletions

View file

@ -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):

View 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(