import wx
import numpy
import math
+import threading
import OpenGL
OpenGL.ERROR_CHECKING = False
self._result = None
self._enabled = False
self._gcodeLoadProgress = 0
+ self._resultLock = threading.Lock()
self._layerVBOs = []
self._layer20VBOs = []
if self._result == result:
return
+ self._resultLock.acquire()
self._result = result
#Clean the saved VBO's
self._parent.glReleaseList.append(layer[typeName])
self._layerVBOs = []
self._layer20VBOs = []
+ self._resultLock.release()
def setEnabled(self, enabled):
self._enabled = enabled
if not self._enabled:
return
+ self._resultLock.acquire()
result = self._result
if result is not None:
gcodeLayers = result.getGCodeLayers(self._gcodeLoadCallback)
glColor4ub(60,60,60,255)
openglHelpers.glDrawStringCenter(_("Loading toolpath for visualization (%d%%)") % (self._gcodeLoadProgress * 100))
glPopMatrix()
+ self._resultLock.release()
def _polygonsToVBO_lines(self, polygons):
verts = numpy.zeros((0, 3), numpy.float32)
"""
GUI_CMD_REQUEST_MESH = 0x01
GUI_CMD_SEND_POLYGONS = 0x02
+ GUI_CMD_FINISH_OBJECT = 0x03
def __init__(self, progressCallback):
self._process = None
self._callback = progressCallback
self._progressSteps = ['inset', 'skin', 'export']
self._objCount = 0
- self._layerNrOffset = 0
self._result = None
self._serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
thread.start()
def _socketConnectionThread(self, sock):
+ layerNrOffset = 0
while True:
try:
data = sock.recv(4)
elif cmd == self.GUI_CMD_SEND_POLYGONS:
cnt = struct.unpack('@i', sock.recv(4))[0]
layerNr = struct.unpack('@i', sock.recv(4))[0]
- layerNr += self._layerNrOffset
+ layerNr += layerNrOffset
z = struct.unpack('@i', sock.recv(4))[0]
z = float(z) / 1000.0
typeNameLen = struct.unpack('@i', sock.recv(4))[0]
polygon[:,:-1] = polygon2d
polygon[:,2] = z
polygons[typeName].append(polygon)
+ elif cmd == self.GUI_CMD_FINISH_OBJECT:
+ layerNrOffset = len(self._result._polygons)
else:
print "Unknown command on socket: %x" % (cmd)
def _watchStderr(self, stderr):
objectNr = 0
- self._layerNrOffset = 0
line = stderr.readline()
while len(line) > 0:
line = line.strip()
line = line.split(':')
if line[1] == 'process':
objectNr += 1
- self._layerNrOffset = len(self._result._polygons)
elif line[1] in self._progressSteps:
progressValue = float(line[2]) / float(line[3])
progressValue /= len(self._progressSteps)