Modified gcodeInterperter to use an object for the path parts, instead of a dict. Tiny bit faster, and cleaner code.

master
daid 2012-03-26 17:14:31 +02:00
parent ad36fa9132
commit 2cd4ddb67c
2 changed files with 32 additions and 23 deletions

View File

@ -9,6 +9,13 @@ import os
from newui import util3d
class gcodePath():
def __init__(self, newType, pathType, layerNr, startPoint):
self.type = newType
self.pathType = pathType
self.list = [startPoint]
self.layerNr = layerNr
class gcode():
def __init__(self):
self.regMatch = {}
@ -35,8 +42,9 @@ class gcode():
pathType = 'CUSTOM';
layerNr = 0; #Note layer 0 will be the start code.
startCodeDone = False
currentPath = {'type': 'move', 'pathType': pathType, 'list': [pos.copy()], 'layerNr': layerNr}
currentPath['list'][-1].e = totalExtrusion
currentPath = gcodePath('move', pathType, layerNr, pos.copy())
currentPath.list[0].e = totalExtrusion
pathList.append(currentPath)
for line in gcodeFile:
if filePos != gcodeFile.tell():
filePos = gcodeFile.tell()
@ -105,11 +113,12 @@ class gcode():
currentE += e
if totalExtrusion > maxExtrusion:
maxExtrusion = totalExtrusion
if currentPath['type'] != moveType or currentPath['pathType'] != pathType:
if currentPath.type != moveType or currentPath.pathType != pathType:
currentPath = gcodePath(moveType, pathType, layerNr, currentPath.list[-1])
pathList.append(currentPath)
currentPath = {'type': moveType, 'pathType': pathType, 'list': [currentPath['list'][-1]], 'layerNr': layerNr}
currentPath['list'].append(pos.copy())
currentPath['list'][-1].e = totalExtrusion
newPos = pos.copy()
newPos.e = totalExtrusion
currentPath.list.append(newPos)
elif G == 20: #Units are inches
scale = 25.4
elif G == 21: #Units are mm

View File

@ -444,35 +444,35 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
curLayerNum = 0
for path in self.parent.gcode.pathList:
if path['layerNr'] != curLayerNum:
if path.layerNr != curLayerNum:
prevLayerZ = curLayerZ
curLayerZ = path['list'][1].z
curLayerNum = path['layerNr']
curLayerZ = path.list[1].z
curLayerNum = path.layerNr
layerThickness = curLayerZ - prevLayerZ
c = 1.0
if path['layerNr'] != self.parent.layerSpin.GetValue():
if path['layerNr'] < self.parent.layerSpin.GetValue():
c = 0.9 - (self.parent.layerSpin.GetValue() - path['layerNr']) * 0.1
if path.layerNr != self.parent.layerSpin.GetValue():
if path.layerNr < self.parent.layerSpin.GetValue():
c = 0.9 - (self.parent.layerSpin.GetValue() - path.layerNr) * 0.1
if c < 0.4:
c = 0.4
else:
break
if path['type'] == 'move':
if path.type == 'move':
glColor3f(0,0,c)
if path['type'] == 'extrude':
if path['pathType'] == 'FILL':
if path.type == 'extrude':
if path.pathType == 'FILL':
glColor3f(c/2,c/2,0)
elif path['pathType'] == 'WALL-INNER':
elif path.pathType == 'WALL-INNER':
glColor3f(0,c,0)
else:
glColor3f(c,0,0)
if path['type'] == 'retract':
if path.type == 'retract':
glColor3f(0,c,c)
if c > 0.4 and path['type'] == 'extrude':
for i in xrange(0, len(path['list'])-1):
v0 = path['list'][i]
v1 = path['list'][i+1]
if c > 0.4 and path.type == 'extrude':
for i in xrange(0, len(path.list)-1):
v0 = path.list[i]
v1 = path.list[i+1]
# Calculate line width from ePerDistance (needs layer thickness and filament diameter)
dist = (v0 - v1).vsize()
@ -488,7 +488,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
v1 = v1 - normal * lineWidth
glBegin(GL_QUADS)
if path['pathType'] == 'FILL': #Remove depth buffer fighting on infill/wall overlap
if path.pathType == 'FILL': #Remove depth buffer fighting on infill/wall overlap
glVertex3f(v0.x, v0.y, v0.z - 0.02)
glVertex3f(v1.x, v1.y, v1.z - 0.02)
glVertex3f(v3.x, v3.y, v3.z - 0.02)
@ -511,7 +511,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
# glEnd()
else:
glBegin(GL_LINE_STRIP)
for v in path['list']:
for v in path.list:
glVertex3f(v.x, v.y, v.z)
glEnd()
glEndList()