self._animView = None
self._animZoom = None
self._platformMesh = meshLoader.loadMeshes(resources.getPathForMesh('ultimaker_platform.stl'))[0]
- self._platformMesh._drawOffset = numpy.array([0,0,0.5], numpy.float32)
+ self._platformMesh._drawOffset = numpy.array([0,0,1.5], numpy.float32)
self._isSimpleMode = True
self._viewport = None
def _selectObject(self, obj, zoom = True):
if obj != self._selectedObj:
self._selectedObj = obj
+ scale = self._selectedObj.getScale()
+ size = self._selectedObj.getSize()
+ self.scaleXctrl.setValue(round(scale[0], 2))
+ self.scaleYctrl.setValue(round(scale[1], 2))
+ self.scaleZctrl.setValue(round(scale[2], 2))
+ self.scaleXmmctrl.setValue(round(size[0], 2))
+ self.scaleYmmctrl.setValue(round(size[1], 2))
+ self.scaleZmmctrl.setValue(round(size[2], 2))
if zoom:
newViewPos = numpy.array([obj.getPosition()[0], obj.getPosition()[1], obj.getMaximum()[2] / 2])
self._animView = anim(self._viewTarget.copy(), newViewPos, 0.5)
self._animZoom = None
if self._objectShader is None:
self._objectShader = opengl.GLShader("""
-uniform float cameraDistance;
varying float light_amount;
void main(void)
gl_FrontColor = gl_Color;
light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz)));
- light_amount *= 1.0 - (length(gl_Position.xyz - vec3(0.0,0.0,cameraDistance)) / 1.5 / cameraDistance);
light_amount += 0.2;
}
""","""
-uniform float cameraDistance;
varying float light_amount;
void main(void)
}
""")
self._objectLoadShader = opengl.GLShader("""
-uniform float cameraDistance;
uniform float intensity;
uniform float scale;
varying float light_amount;
gl_FrontColor = gl_Color;
light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz)));
- light_amount *= 1.0 - (length(gl_Position.xyz - vec3(0.0,0.0,cameraDistance)) / 1.5 / cameraDistance);
light_amount += 0.2;
}
""","""
-uniform float cameraDistance;
uniform float intensity;
varying float light_amount;
glStencilFunc(GL_ALWAYS, 1, 1)
glStencilOp(GL_INCR, GL_INCR, GL_INCR)
self._objectShader.bind()
- self._objectShader.setUniform('cameraDistance', self._zoom)
for obj in self._scene.objects():
if obj._loadAnim is not None:
if obj._loadAnim.isDone():
glDisable(GL_STENCIL_TEST)
glEnable(GL_BLEND)
self._objectLoadShader.bind()
- self._objectLoadShader.setUniform('cameraDistance', self._zoom)
glColor4f(0.2, 0.6, 1.0, 1.0)
for obj in self._scene.objects():
if obj._loadAnim is None:
self._drawMachine()
+ #Draw the object box-shadow, so you can see where it will collide with other objects.
+ if self._selectedObj is not None and len(self._scene.objects()) > 1:
+ size = self._selectedObj.getSize()[0:2] / 2 + self._scene.getObjectExtend()
+ glPushMatrix()
+ glTranslatef(self._selectedObj.getPosition()[0], self._selectedObj.getPosition()[1], 0.0)
+ glEnable(GL_BLEND)
+ glEnable(GL_CULL_FACE)
+ glColor4f(0,0,0,0.12)
+ glBegin(GL_QUADS)
+ glVertex3f(-size[0], size[1], 0)
+ glVertex3f(-size[0], -size[1], 0)
+ glVertex3f( size[0], -size[1], 0)
+ glVertex3f( size[0], size[1], 0)
+ glEnd()
+ glDisable(GL_CULL_FACE)
+ glPopMatrix()
+
#Draw the outline of the selected object, on top of everything else except the GUI.
if self._selectedObj is not None and self._selectedObj._loadAnim is None:
glDisable(GL_DEPTH_TEST)
if profile.getPreference('machine_type') == 'ultimaker':
glColor4f(1,1,1,0.5)
self._objectShader.bind()
- self._objectShader.setUniform('cameraDistance', self._zoom)
self._renderObject(self._platformMesh)
self._objectShader.unbind()
for n in xrange(0, len(self._objs)):
if scene.checkPlatform(self._objs[n]):
initialList.append(n)
+ if len(initialList) == 0:
+ self.order = []
+ return
self._todo = [_objectOrder([], initialList)]
while len(self._todo) > 0:
current = self._todo.pop()
todoList.remove(addIdx)
order = current.order[:] + [addIdx]
if len(todoList) == 0:
+ self._todo = None
self.order = order
return
self._todo.append(_objectOrder(order, todoList))
def setSizeOffsets(self, sizeOffsets):
self._sizeOffsets = sizeOffsets
+ def getObjectExtend(self):
+ return self._sizeOffsets + self._headOffsets
+
def objects(self):
return self._objectList
obj.setPosition(obj.getPosition() + offset)
def printOrder(self):
- return _objectOrderFinder(self, self._headOffsets + self._sizeOffsets).order
+ order = _objectOrderFinder(self, self._headOffsets + self._sizeOffsets).order
+ if order is None:
+ print "ODD! Cannot find out proper printing order!!!"
+ return order
def _pushFree(self):
for a in self._objectList:
self._binaryStorageFilename = getTempFilename()
self._exportFilename = getTempFilename()
self._progressSteps = ['inset', 'skin', 'export']
+ self._objCount = 0
def abortSlicer(self):
if self._process is not None:
def _watchProcess(self):
self._callback(0.0, False)
line = self._process.stdout.readline()
+ objectNr = 0
while len(line):
line = line.strip()
if line.startswith('Progress:'):
line = line.split(':')
- progressValue = float(line[2]) / float(line[3])
- progressValue /= len(self._progressSteps)
- progressValue += 1.0 / len(self._progressSteps) * self._progressSteps.index(line[1])
- self._callback(progressValue, False)
+ if line[1] == 'process':
+ objectNr += 1
+ else:
+ progressValue = float(line[2]) / float(line[3])
+ progressValue /= len(self._progressSteps)
+ progressValue += 1.0 / len(self._progressSteps) * self._progressSteps.index(line[1])
+
+ progressValue /= self._objCount
+ progressValue += 1.0 / self._objCount * objectNr
+ self._callback(progressValue, False)
else:
print '#', line.strip()
line = self._process.stdout.readline()