def OnPaint(self,e): opengl.InitGL(self, self.view3D, self.zoom) if self.view3D: glTranslate(0,0,-self.zoom) glTranslate(self.zoom/20.0,0,0) glRotate(-self.pitch, 1,0,0) glRotate(self.yaw, 0,0,1) if self.viewMode == "GCode" or self.viewMode == "Mixed": n = min(self.gcodeQuickDisplayListMade, self.parent.layerSelect.getValue()) if self.parent.gcode is not None and -1 < n < len(self.parent.gcode.layerList) and len(self.parent.gcode.layerList[n]) > 0: self.viewTarget[2] = self.parent.gcode.layerList[n][0].list[-1].z else: if self.parent.objectsMaxV is not None: self.viewTarget = self.getObjectCenterPos() glTranslate(-self.viewTarget[0], -self.viewTarget[1], -self.viewTarget[2]) self.viewport = glGetIntegerv(GL_VIEWPORT) self.modelMatrix = glGetDoublev(GL_MODELVIEW_MATRIX) self.projMatrix = glGetDoublev(GL_PROJECTION_MATRIX) self.OnDraw() if len(self.parent.objectList) > 0 and self.parent.objectList[0].mesh is None and self.parent.objectList[0].filename is not None: glDisable(GL_DEPTH_TEST) glLoadIdentity() glColor3ub(255,255,255) glTranslate(0, -3, -10) opengl.glDrawStringCenter('Loading %s ...' % (os.path.basename(self.parent.objectList[0].filename)))
def draw(self): if self._hidden: return cx = (self._imageID % 4) / 4 cy = int(self._imageID / 4) / 4 bs = self._base._buttonSize pos = self._getPixelPos() glBindTexture(GL_TEXTURE_2D, self._base._glButtonsTexture) scale = 0.8 if self._selected: scale = 1.0 elif self._focus: scale = 0.9 if self._disabled: glColor4ub(128, 128, 128, 128) else: glColor4ub(255, 255, 255, 255) opengl.glDrawTexturedQuad(pos[0] - bs * scale / 2, pos[1] - bs * scale / 2, bs * scale, bs * scale, 0) opengl.glDrawTexturedQuad(pos[0] - bs * scale / 2, pos[1] - bs * scale / 2, bs * scale, bs * scale, self._imageID) if self._showExpandArrow: if self._selected: opengl.glDrawTexturedQuad( pos[0] + bs * scale / 2 - bs * scale / 4 * 1.2, pos[1] - bs * scale / 2 * 1.2, bs * scale / 4, bs * scale / 4, 1) else: opengl.glDrawTexturedQuad( pos[0] + bs * scale / 2 - bs * scale / 4 * 1.2, pos[1] - bs * scale / 2 * 1.2, bs * scale / 4, bs * scale / 4, 1, 2) glPushMatrix() glTranslatef(pos[0], pos[1], 0) glDisable(GL_TEXTURE_2D) if self._focus: glTranslatef(0, -0.55 * bs * scale, 0) glPushMatrix() glColor4ub(60, 60, 60, 255) glTranslatef(-1, -1, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(0, 2, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(2, 0, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(0, -2, 0) opengl.glDrawStringCenter(self._tooltip) glPopMatrix() glColor4ub(255, 255, 255, 255) opengl.glDrawStringCenter(self._tooltip) glPopMatrix()
def OnDraw(self): glDisable(GL_LIGHTING) glDisable(GL_BLEND) glDisable(GL_DEPTH_TEST) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glColor3ub(0, 0, 0) size = self.parent.getObjectSize() radius = self.parent.getObjectBoundaryCircle() glPushMatrix() glTranslate(0, 0, size[2] / 2 + 5) glRotate(-self.parent.yaw, 0, 0, 1) if self.parent.pitch < 80: glTranslate(0, radius + 5, 0) elif self.parent.pitch < 100: glTranslate(0, (radius + 5) * (90 - self.parent.pitch) / 10, 0) else: glTranslate(0, -(radius + 5), 0) opengl.glDrawStringCenter("%dx%dx%d" % (size[0], size[1], size[2])) glPopMatrix() glColor(255, 255, 255) size = size / 2 glLineWidth(1) glBegin(GL_LINES) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1], size[2] / 4 * 3) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1] / 4 * 3, size[2]) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0] / 4 * 3, size[1], size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1], size[2] / 4 * 3) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1] / 4 * 3, size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0] / 4 * 3, -size[1], size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1], -size[2] / 4 * 3) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1] / 4 * 3, -size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0] / 4 * 3, -size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2] / 4 * 3) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1] / 4 * 3, -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0] / 4 * 3, size[1], -size[2]) glEnd()
def OnDraw(self): glDisable(GL_LIGHTING) glDisable(GL_BLEND) glDisable(GL_DEPTH_TEST) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glColor3ub(0,0,0) size = self.parent.getObjectSize() radius = self.parent.getObjectBoundaryCircle() glPushMatrix() glTranslate(0,0,size[2]/2 + 5) glRotate(-self.parent.yaw, 0,0,1) if self.parent.pitch < 80: glTranslate(0, radius + 5,0) elif self.parent.pitch < 100: glTranslate(0, (radius + 5) * (90 - self.parent.pitch) / 10,0) else: glTranslate(0,-(radius + 5),0) opengl.glDrawStringCenter("%dx%dx%d" % (size[0], size[1], size[2])) glPopMatrix() glColor(255,255,255) size = size / 2 glLineWidth(1) glBegin(GL_LINES) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1], size[2]/4*3) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1]/4*3, size[2]) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0]/4*3, size[1], size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1], size[2]/4*3) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1]/4*3, size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0]/4*3, -size[1], size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1], -size[2]/4*3) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1]/4*3, -size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0]/4*3, -size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2]/4*3) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1]/4*3, -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0]/4*3, size[1], -size[2]) glEnd()
def draw(self): if self._hidden: return cx = (self._imageID % 4) / 4 cy = int(self._imageID / 4) / 4 bs = self._base._buttonSize pos = self._getPixelPos() glBindTexture(GL_TEXTURE_2D, self._base._glButtonsTexture) scale = 0.8 if self._selected: scale = 1.0 elif self._focus: scale = 0.9 if self._disabled: glColor4ub(128,128,128,128) else: glColor4ub(255,255,255,255) opengl.glDrawTexturedQuad(pos[0]-bs*scale/2, pos[1]-bs*scale/2, bs*scale, bs*scale, 0) opengl.glDrawTexturedQuad(pos[0]-bs*scale/2, pos[1]-bs*scale/2, bs*scale, bs*scale, self._imageID) if self._showExpandArrow: if self._selected: opengl.glDrawTexturedQuad(pos[0]+bs*scale/2-bs*scale/4*1.2, pos[1]-bs*scale/2*1.2, bs*scale/4, bs*scale/4, 1) else: opengl.glDrawTexturedQuad(pos[0]+bs*scale/2-bs*scale/4*1.2, pos[1]-bs*scale/2*1.2, bs*scale/4, bs*scale/4, 1, 2) glPushMatrix() glTranslatef(pos[0], pos[1], 0) glDisable(GL_TEXTURE_2D) if self._focus: glTranslatef(0, -0.55*bs*scale, 0) glPushMatrix() glColor4ub(60,60,60,255) glTranslatef(-1, -1, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(0, 2, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(2, 0, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(0, -2, 0) opengl.glDrawStringCenter(self._tooltip) glPopMatrix() glColor4ub(255,255,255,255) opengl.glDrawStringCenter(self._tooltip) glPopMatrix()
def draw(self): if self._hidden: return cx = (self._imageID % 4) / 4 cy = int(self._imageID / 4) / 4 bs = self._base._buttonSize pos = self._getPixelPos() glPushMatrix() glTranslatef(pos[0], pos[1], 0) glBindTexture(GL_TEXTURE_2D, self._base._glButtonsTexture) glEnable(GL_TEXTURE_2D) scale = 0.8 if self._selected: scale = 1.0 elif self._focus: scale = 0.9 glScalef(bs * scale, bs * scale, bs * scale) if self._disabled: glColor4ub(128,128,128,128) else: glColor4ub(255,255,255,255) glBegin(GL_QUADS) glTexCoord2f(cx+0.25, cy) glVertex2f( 0.5,-0.5) glTexCoord2f(cx, cy) glVertex2f(-0.5,-0.5) glTexCoord2f(cx, cy+0.25) glVertex2f(-0.5, 0.5) glTexCoord2f(cx+0.25, cy+0.25) glVertex2f( 0.5, 0.5) glEnd() glDisable(GL_TEXTURE_2D) if self._focus: glColor4ub(0,0,0,255) glTranslatef(0, -0.55, 0) opengl.glDrawStringCenter(self._tooltip) glPopMatrix()
def draw(self): if self._hidden: return cx = (self._imageID % 4) / 4 cy = int(self._imageID / 4) / 4 bs = self._base._buttonSize pos = self._getPixelPos() glPushMatrix() glTranslatef(pos[0], pos[1], 0) glBindTexture(GL_TEXTURE_2D, self._base._glButtonsTexture) glEnable(GL_TEXTURE_2D) scale = 0.8 if self._selected: scale = 1.0 elif self._focus: scale = 0.9 glScalef(bs * scale, bs * scale, bs * scale) if self._disabled: glColor4ub(128, 128, 128, 128) else: glColor4ub(255, 255, 255, 255) glBegin(GL_QUADS) glTexCoord2f(cx + 0.25, cy) glVertex2f(0.5, -0.5) glTexCoord2f(cx, cy) glVertex2f(-0.5, -0.5) glTexCoord2f(cx, cy + 0.25) glVertex2f(-0.5, 0.5) glTexCoord2f(cx + 0.25, cy + 0.25) glVertex2f(0.5, 0.5) glEnd() glDisable(GL_TEXTURE_2D) if self._focus: glColor4ub(0, 0, 0, 255) glTranslatef(0, -0.55, 0) opengl.glDrawStringCenter(self._tooltip) glPopMatrix()
def OnPaint(self, e): opengl.InitGL(self, self.view3D, self.zoom) if self.view3D: glTranslate(0, 0, -self.zoom) glTranslate(self.zoom / 20.0, 0, 0) glRotate(-self.pitch, 1, 0, 0) glRotate(self.yaw, 0, 0, 1) if self.viewMode == "GCode" or self.viewMode == "Mixed": n = min(self.gcodeQuickDisplayListMade, self.parent.layerSelect.getValue()) if self.parent.gcode is not None and -1 < n < len( self.parent.gcode.layerList) and len( self.parent.gcode.layerList[n]) > 0: self.viewTarget[2] = self.parent.gcode.layerList[n][ 0].list[-1].z else: if self.parent.objectsMaxV is not None: self.viewTarget = self.getObjectCenterPos() glTranslate(-self.viewTarget[0], -self.viewTarget[1], -self.viewTarget[2]) self.viewport = glGetIntegerv(GL_VIEWPORT) self.modelMatrix = glGetDoublev(GL_MODELVIEW_MATRIX) self.projMatrix = glGetDoublev(GL_PROJECTION_MATRIX) self.OnDraw() if len(self.parent.objectList) > 0 and self.parent.objectList[ 0].mesh is None and self.parent.objectList[ 0].filename is not None: glDisable(GL_DEPTH_TEST) glLoadIdentity() glColor3ub(255, 255, 255) glTranslate(0, -3, -10) opengl.glDrawStringCenter( 'Loading %s ...' % (os.path.basename(self.parent.objectList[0].filename)))
def OnDraw(self): s = self._nodeSize() sx = s * 15 sy = s * 15 sz = s * 15 if self.node == 2 and self.scale is not None: sx *= self.scale if self.node == 3 and self.scale is not None: sy *= self.scale if self.node == 4 and self.scale is not None: sz *= self.scale objMatrix = self.parent.getObjectMatrix() scaleX = numpy.linalg.norm(objMatrix[::, 0].getA().flatten()) scaleY = numpy.linalg.norm(objMatrix[::, 1].getA().flatten()) scaleZ = numpy.linalg.norm(objMatrix[::, 2].getA().flatten()) if self.scale is not None: scaleX *= self.scale scaleY *= self.scale scaleZ *= self.scale glDisable(GL_LIGHTING) glDisable(GL_DEPTH_TEST) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glColor3ub(0, 0, 0) size = self.parent.getObjectSize() radius = self.parent.getObjectBoundaryCircle() if self.scale is not None: radius *= self.scale glPushMatrix() glTranslate(0, 0, size[2] / 2 + 5) glRotate(-self.parent.yaw, 0, 0, 1) if self.parent.pitch < 80: glTranslate(0, radius + 5, 0) elif self.parent.pitch < 100: glTranslate(0, (radius + 5) * (90 - self.parent.pitch) / 10, 0) else: glTranslate(0, -(radius + 5), 0) if self.parent.tempMatrix is not None: size = (numpy.matrix([size]) * self.parent.tempMatrix).getA().flatten() opengl.glDrawStringCenter("W, D, H: %0.1f, %0.1f, %0.1f mm" % (size[0], size[1], size[2])) glPopMatrix() glLineWidth(1) glBegin(GL_LINES) glColor3ub(128, 0, 0) glVertex3f(0, 0, 0) glVertex3f(sx, 0, 0) glColor3ub(128, 128, 0) glVertex3f(0, 0, 0) glVertex3f(0, sy, 0) glColor3ub(0, 128, 0) glVertex3f(0, 0, 0) glVertex3f(0, 0, sz) glEnd() glLineWidth(2) if self.node == 1: glColor3ub(255, 255, 255) else: glColor3ub(192, 192, 192) opengl.DrawBox([-s, -s, -s], [s, s, s]) if self.node == 1: glColor3ub(0, 0, 0) opengl.glDrawStringCenter("%0.2f" % ((scaleX + scaleY + scaleZ) / 3.0)) if self.node == 2: glColor3ub(255, 64, 64) else: glColor3ub(128, 0, 0) glPushMatrix() glTranslatef(sx, 0, 0) opengl.DrawBox([-s, -s, -s], [s, s, s]) if self.node == 2: glColor3ub(0, 0, 0) opengl.glDrawStringCenter("%0.2f" % (scaleX)) glPopMatrix() if self.node == 3: glColor3ub(255, 255, 0) else: glColor3ub(128, 128, 0) glPushMatrix() glTranslatef(0, sy, 0) opengl.DrawBox([-s, -s, -s], [s, s, s]) if self.node == 3: glColor3ub(0, 0, 0) opengl.glDrawStringCenter("%0.2f" % (scaleY)) glPopMatrix() if self.node == 4: glColor3ub(64, 255, 64) else: glColor3ub(0, 128, 0) glPushMatrix() glTranslatef(0, 0, sz) opengl.DrawBox([-s, -s, -s], [s, s, s]) if self.node == 4: glColor3ub(0, 0, 0) opengl.glDrawStringCenter("%0.2f" % (scaleZ)) glPopMatrix() glEnable(GL_DEPTH_TEST) glColor(255, 255, 255) size = size / 2 size += 0.01 glLineWidth(1) glBegin(GL_LINES) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1], size[2] / 4 * 3) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1] / 4 * 3, size[2]) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0] / 4 * 3, size[1], size[2]) glVertex3f(-size[0], size[1], size[2]) glVertex3f(-size[0], size[1], size[2] / 4 * 3) glVertex3f(-size[0], size[1], size[2]) glVertex3f(-size[0], size[1] / 4 * 3, size[2]) glVertex3f(-size[0], size[1], size[2]) glVertex3f(-size[0] / 4 * 3, size[1], size[2]) glVertex3f(size[0], -size[1], size[2]) glVertex3f(size[0], -size[1], size[2] / 4 * 3) glVertex3f(size[0], -size[1], size[2]) glVertex3f(size[0], -size[1] / 4 * 3, size[2]) glVertex3f(size[0], -size[1], size[2]) glVertex3f(size[0] / 4 * 3, -size[1], size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1], size[2] / 4 * 3) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1] / 4 * 3, size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0] / 4 * 3, -size[1], size[2]) glVertex3f(size[0], size[1], -size[2]) glVertex3f(size[0], size[1], -size[2] / 4 * 3) glVertex3f(size[0], size[1], -size[2]) glVertex3f(size[0], size[1] / 4 * 3, -size[2]) glVertex3f(size[0], size[1], -size[2]) glVertex3f(size[0] / 4 * 3, size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2] / 4 * 3) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1] / 4 * 3, -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0] / 4 * 3, size[1], -size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1], -size[2] / 4 * 3) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1] / 4 * 3, -size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0] / 4 * 3, -size[1], -size[2]) glVertex3f(-size[0], -size[1], -size[2]) glVertex3f(-size[0], -size[1], -size[2] / 4 * 3) glVertex3f(-size[0], -size[1], -size[2]) glVertex3f(-size[0], -size[1] / 4 * 3, -size[2]) glVertex3f(-size[0], -size[1], -size[2]) glVertex3f(-size[0] / 4 * 3, -size[1], -size[2]) glEnd() glEnable(GL_DEPTH_TEST)
def OnDraw(self): glDisable(GL_LIGHTING) glDisable(GL_BLEND) glDisable(GL_DEPTH_TEST) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) radius = self.parent.getObjectBoundaryCircle() glScalef(self.rotateRingDist * radius, self.rotateRingDist * radius, self.rotateRingDist * radius) if self.dragPlane == 'XY': glLineWidth(3) glColor4ub(255, 64, 64, 255) if self.dragStartAngle is not None: glPushMatrix() glRotate(self.dragStartAngle, 0, 0, 1) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(1, 0, 0) glEnd() glPopMatrix() glPushMatrix() glRotate(self.dragEndAngle, 0, 0, 1) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(1, 0, 0) glEnd() glTranslatef(1.1, 0, 0) glColor4ub(0, 0, 0, 255) opengl.glDrawStringCenter( "%d" % (abs(self.dragEndAngle - self.dragStartAngle))) glColor4ub(255, 64, 64, 255) glPopMatrix() else: glLineWidth(1) glColor4ub(128, 0, 0, 255) glBegin(GL_LINE_LOOP) for i in xrange(0, 64): glVertex3f(math.cos(i / 32.0 * math.pi), math.sin(i / 32.0 * math.pi), 0) glEnd() if self.dragPlane == 'YZ': glColor4ub(64, 255, 64, 255) glLineWidth(3) if self.dragStartAngle is not None: glPushMatrix() glRotate(self.dragStartAngle, 1, 0, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(0, 1, 0) glEnd() glPopMatrix() glPushMatrix() glRotate(self.dragEndAngle, 1, 0, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(0, 1, 0) glEnd() glTranslatef(0, 1.1, 0) glColor4ub(0, 0, 0, 255) opengl.glDrawStringCenter( "%d" % (abs(self.dragEndAngle - self.dragStartAngle))) glColor4ub(64, 255, 64, 255) glPopMatrix() else: glColor4ub(0, 128, 0, 255) glLineWidth(1) glBegin(GL_LINE_LOOP) for i in xrange(0, 64): glVertex3f(0, math.cos(i / 32.0 * math.pi), math.sin(i / 32.0 * math.pi)) glEnd() if self.dragPlane == 'XZ': glLineWidth(3) glColor4ub(255, 255, 0, 255) if self.dragStartAngle is not None: glPushMatrix() glRotate(self.dragStartAngle, 0, -1, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(1, 0, 0) glEnd() glPopMatrix() glPushMatrix() glRotate(self.dragEndAngle, 0, -1, 0) glBegin(GL_LINES) glVertex3f(0, 0, 0) glVertex3f(1, 0, 0) glEnd() glTranslatef(1.1, 0, 0) glColor4ub(0, 0, 0, 255) opengl.glDrawStringCenter( "%d" % (abs(self.dragEndAngle - self.dragStartAngle))) glColor4ub(255, 255, 0, 255) glPopMatrix() else: glColor4ub(128, 128, 0, 255) glLineWidth(1) glBegin(GL_LINE_LOOP) for i in xrange(0, 64): glVertex3f(math.cos(i / 32.0 * math.pi), 0, math.sin(i / 32.0 * math.pi)) glEnd() glEnable(GL_DEPTH_TEST)
def OnDraw(self): s = self._nodeSize() sx = s*15 sy = s*15 sz = s*15 if self.node == 2 and self.scale is not None: sx *= self.scale if self.node == 3 and self.scale is not None: sy *= self.scale if self.node == 4 and self.scale is not None: sz *= self.scale objMatrix = self.parent.getObjectMatrix() scaleX = numpy.linalg.norm(objMatrix[::,0].getA().flatten()) scaleY = numpy.linalg.norm(objMatrix[::,1].getA().flatten()) scaleZ = numpy.linalg.norm(objMatrix[::,2].getA().flatten()) if self.scale is not None: scaleX *= self.scale scaleY *= self.scale scaleZ *= self.scale glDisable(GL_LIGHTING) glDisable(GL_DEPTH_TEST) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glColor3ub(0,0,0) size = self.parent.getObjectSize() radius = self.parent.getObjectBoundaryCircle() if self.scale is not None: radius *= self.scale glPushMatrix() glTranslate(0,0,size[2]/2 + 5) glRotate(-self.parent.yaw, 0,0,1) if self.parent.pitch < 80: glTranslate(0, radius + 5,0) elif self.parent.pitch < 100: glTranslate(0, (radius + 5) * (90 - self.parent.pitch) / 10,0) else: glTranslate(0,-(radius + 5),0) if self.parent.tempMatrix is not None: size = (numpy.matrix([size]) * self.parent.tempMatrix).getA().flatten() opengl.glDrawStringCenter("W, D, H: %0.1f, %0.1f, %0.1f mm" % (size[0], size[1], size[2])) glPopMatrix() glLineWidth(1) glBegin(GL_LINES) glColor3ub(128,0,0) glVertex3f(0, 0, 0) glVertex3f(sx, 0, 0) glColor3ub(128,128,0) glVertex3f(0, 0, 0) glVertex3f(0, sy, 0) glColor3ub(0,128,0) glVertex3f(0, 0, 0) glVertex3f(0, 0, sz) glEnd() glLineWidth(2) if self.node == 1: glColor3ub(255,255,255) else: glColor3ub(192,192,192) opengl.DrawBox([-s,-s,-s], [s,s,s]) if self.node == 1: glColor3ub(0,0,0) opengl.glDrawStringCenter("%0.2f" % ((scaleX + scaleY + scaleZ) / 3.0)) if self.node == 2: glColor3ub(255,64,64) else: glColor3ub(128,0,0) glPushMatrix() glTranslatef(sx,0,0) opengl.DrawBox([-s,-s,-s], [s,s,s]) if self.node == 2: glColor3ub(0,0,0) opengl.glDrawStringCenter("%0.2f" % (scaleX)) glPopMatrix() if self.node == 3: glColor3ub(255,255,0) else: glColor3ub(128,128,0) glPushMatrix() glTranslatef(0,sy,0) opengl.DrawBox([-s,-s,-s], [s,s,s]) if self.node == 3: glColor3ub(0,0,0) opengl.glDrawStringCenter("%0.2f" % (scaleY)) glPopMatrix() if self.node == 4: glColor3ub(64,255,64) else: glColor3ub(0,128,0) glPushMatrix() glTranslatef(0,0,sz) opengl.DrawBox([-s,-s,-s], [s,s,s]) if self.node == 4: glColor3ub(0,0,0) opengl.glDrawStringCenter("%0.2f" % (scaleZ)) glPopMatrix() glEnable(GL_DEPTH_TEST) glColor(255,255,255) size = size / 2 size += 0.01 glLineWidth(1) glBegin(GL_LINES) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1], size[2]/4*3) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1]/4*3, size[2]) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0]/4*3, size[1], size[2]) glVertex3f(-size[0], size[1], size[2]) glVertex3f(-size[0], size[1], size[2]/4*3) glVertex3f(-size[0], size[1], size[2]) glVertex3f(-size[0], size[1]/4*3, size[2]) glVertex3f(-size[0], size[1], size[2]) glVertex3f(-size[0]/4*3, size[1], size[2]) glVertex3f(size[0], -size[1], size[2]) glVertex3f(size[0], -size[1], size[2]/4*3) glVertex3f(size[0], -size[1], size[2]) glVertex3f(size[0], -size[1]/4*3, size[2]) glVertex3f(size[0], -size[1], size[2]) glVertex3f(size[0]/4*3, -size[1], size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1], size[2]/4*3) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1]/4*3, size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0]/4*3, -size[1], size[2]) glVertex3f(size[0], size[1], -size[2]) glVertex3f(size[0], size[1], -size[2]/4*3) glVertex3f(size[0], size[1], -size[2]) glVertex3f(size[0], size[1]/4*3, -size[2]) glVertex3f(size[0], size[1], -size[2]) glVertex3f(size[0]/4*3, size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2]/4*3) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1]/4*3, -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0]/4*3, size[1], -size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1], -size[2]/4*3) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1]/4*3, -size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0]/4*3, -size[1], -size[2]) glVertex3f(-size[0], -size[1], -size[2]) glVertex3f(-size[0], -size[1], -size[2]/4*3) glVertex3f(-size[0], -size[1], -size[2]) glVertex3f(-size[0], -size[1]/4*3, -size[2]) glVertex3f(-size[0], -size[1], -size[2]) glVertex3f(-size[0]/4*3, -size[1], -size[2]) glEnd() glEnable(GL_DEPTH_TEST)
def OnDraw(self): glDisable(GL_LIGHTING) glDisable(GL_BLEND) glDisable(GL_DEPTH_TEST) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) radius = self.parent.getObjectBoundaryCircle() glScalef(self.rotateRingDist * radius, self.rotateRingDist * radius, self.rotateRingDist * radius) if self.dragPlane == 'XY': glLineWidth(3) glColor4ub(255,64,64,255) if self.dragStartAngle is not None: glPushMatrix() glRotate(self.dragStartAngle, 0,0,1) glBegin(GL_LINES) glVertex3f(0,0,0) glVertex3f(1,0,0) glEnd() glPopMatrix() glPushMatrix() glRotate(self.dragEndAngle, 0,0,1) glBegin(GL_LINES) glVertex3f(0,0,0) glVertex3f(1,0,0) glEnd() glTranslatef(1.1,0,0) glColor4ub(0,0,0,255) opengl.glDrawStringCenter("%d" % (abs(self.dragEndAngle - self.dragStartAngle))) glColor4ub(255,64,64,255) glPopMatrix() else: glLineWidth(1) glColor4ub(128,0,0,255) glBegin(GL_LINE_LOOP) for i in xrange(0, 64): glVertex3f(math.cos(i/32.0*math.pi), math.sin(i/32.0*math.pi),0) glEnd() if self.dragPlane == 'YZ': glColor4ub(64,255,64,255) glLineWidth(3) if self.dragStartAngle is not None: glPushMatrix() glRotate(self.dragStartAngle, 1,0,0) glBegin(GL_LINES) glVertex3f(0,0,0) glVertex3f(0,1,0) glEnd() glPopMatrix() glPushMatrix() glRotate(self.dragEndAngle, 1,0,0) glBegin(GL_LINES) glVertex3f(0,0,0) glVertex3f(0,1,0) glEnd() glTranslatef(0,1.1,0) glColor4ub(0,0,0,255) opengl.glDrawStringCenter("%d" % (abs(self.dragEndAngle - self.dragStartAngle))) glColor4ub(64,255,64,255) glPopMatrix() else: glColor4ub(0,128,0,255) glLineWidth(1) glBegin(GL_LINE_LOOP) for i in xrange(0, 64): glVertex3f(0, math.cos(i/32.0*math.pi), math.sin(i/32.0*math.pi)) glEnd() if self.dragPlane == 'XZ': glLineWidth(3) glColor4ub(255,255,0,255) if self.dragStartAngle is not None: glPushMatrix() glRotate(self.dragStartAngle, 0,-1,0) glBegin(GL_LINES) glVertex3f(0,0,0) glVertex3f(1,0,0) glEnd() glPopMatrix() glPushMatrix() glRotate(self.dragEndAngle, 0,-1,0) glBegin(GL_LINES) glVertex3f(0,0,0) glVertex3f(1,0,0) glEnd() glTranslatef(1.1,0,0) glColor4ub(0,0,0,255) opengl.glDrawStringCenter("%d" % (abs(self.dragEndAngle - self.dragStartAngle))) glColor4ub(255,255,0,255) glPopMatrix() else: glColor4ub(128,128,0,255) glLineWidth(1) glBegin(GL_LINE_LOOP) for i in xrange(0, 64): glVertex3f(math.cos(i/32.0*math.pi), 0, math.sin(i/32.0*math.pi)) glEnd() glEnable(GL_DEPTH_TEST)
def draw(self): if self._hidden: return cx = (self._imageID % 4) / 4 cy = int(self._imageID / 4) / 4 bs = self.getMinSize()[0] pos = self._getPixelPos() glBindTexture(GL_TEXTURE_2D, self._base._glButtonsTexture) scale = 0.8 if self._selected: scale = 1.0 elif self._focus: scale = 0.9 if self._disabled: glColor4ub(128,128,128,128) else: glColor4ub(255,255,255,255) opengl.glDrawTexturedQuad(pos[0]-bs*scale/2, pos[1]-bs*scale/2, bs*scale, bs*scale, 0) opengl.glDrawTexturedQuad(pos[0]-bs*scale/2, pos[1]-bs*scale/2, bs*scale, bs*scale, self._imageID) if self._showExpandArrow: if self._selected: opengl.glDrawTexturedQuad(pos[0]+bs*scale/2-bs*scale/4*1.2, pos[1]-bs*scale/2*1.2, bs*scale/4, bs*scale/4, 1) else: opengl.glDrawTexturedQuad(pos[0]+bs*scale/2-bs*scale/4*1.2, pos[1]-bs*scale/2*1.2, bs*scale/4, bs*scale/4, 1, 2) glPushMatrix() glTranslatef(pos[0], pos[1], 0) glDisable(GL_TEXTURE_2D) if self._focus: glTranslatef(0, -0.55*bs*scale, 0) glPushMatrix() glColor4ub(60,60,60,255) glTranslatef(-1, -1, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(0, 2, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(2, 0, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(0, -2, 0) opengl.glDrawStringCenter(self._tooltip) glPopMatrix() glColor4ub(255,255,255,255) opengl.glDrawStringCenter(self._tooltip) glPopMatrix() progress = self._progressBar if progress is not None: glColor4ub(60,60,60,255) opengl.glDrawQuad(pos[0]-bs/2, pos[1]+bs/2, bs, bs / 4) glColor4ub(255,255,255,255) opengl.glDrawQuad(pos[0]-bs/2+2, pos[1]+bs/2+2, (bs - 5) * progress + 1, bs / 4 - 4) elif len(self._altTooltip) > 0: glPushMatrix() glTranslatef(pos[0], pos[1], 0) glTranslatef(0, 0.6*bs, 0) glTranslatef(0, 6, 0) #glTranslatef(0.6*bs*scale, 0, 0) for line in self._altTooltip.split('\n'): glPushMatrix() glColor4ub(60,60,60,255) glTranslatef(-1, -1, 0) opengl.glDrawStringCenter(line) glTranslatef(0, 2, 0) opengl.glDrawStringCenter(line) glTranslatef(2, 0, 0) opengl.glDrawStringCenter(line) glTranslatef(0, -2, 0) opengl.glDrawStringCenter(line) glPopMatrix() glColor4ub(255,255,255,255) opengl.glDrawStringCenter(line) glTranslatef(0, 18, 0) glPopMatrix()
def draw(self): if self._hidden: return cx = (self._imageID % 4) / 4 cy = int(self._imageID / 4) / 4 bs = self.getMinSize()[0] pos = self._getPixelPos() glBindTexture(GL_TEXTURE_2D, self._base._glButtonsTexture) scale = 0.8 if self._selected: scale = 1.0 elif self._focus: scale = 0.9 if self._disabled: glColor4ub(128,128,128,128) else: glColor4ub(255,255,255,255) opengl.glDrawTexturedQuad(pos[0]-bs*scale/2, pos[1]-bs*scale/2, bs*scale, bs*scale, 0) opengl.glDrawTexturedQuad(pos[0]-bs*scale/2, pos[1]-bs*scale/2, bs*scale, bs*scale, self._imageID) if self._showExpandArrow: if self._selected: opengl.glDrawTexturedQuad(pos[0]+bs*scale/2-bs*scale/4*1.2, pos[1]-bs*scale/2*1.2, bs*scale/4, bs*scale/4, 1) else: opengl.glDrawTexturedQuad(pos[0]+bs*scale/2-bs*scale/4*1.2, pos[1]-bs*scale/2*1.2, bs*scale/4, bs*scale/4, 1, 2) glPushMatrix() glTranslatef(pos[0], pos[1], 0) glDisable(GL_TEXTURE_2D) if self._focus: glTranslatef(0, -0.55*bs*scale, 0) glPushMatrix() glColor4ub(60,60,60,255) glTranslatef(-1, -1, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(0, 2, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(2, 0, 0) opengl.glDrawStringCenter(self._tooltip) glTranslatef(0, -2, 0) opengl.glDrawStringCenter(self._tooltip) glPopMatrix() glColor4ub(255,255,255,255) opengl.glDrawStringCenter(self._tooltip) glPopMatrix() progress = self._progressBar if progress is not None: glColor4ub(60,60,60,255) opengl.glDrawQuad(pos[0]-bs/2, pos[1]+bs/2, bs, bs / 4) glColor4ub(255,255,255,255) opengl.glDrawQuad(pos[0]-bs/2+2, pos[1]+bs/2+2, (bs - 5) * progress + 1, bs / 4 - 4) elif len(self._altTooltip) > 0: glPushMatrix() glTranslatef(pos[0], pos[1], 0) glTranslatef(0.6*bs*scale, 0, 0) glPushMatrix() glColor4ub(60,60,60,255) glTranslatef(-1, -1, 0) opengl.glDrawStringLeft(self._altTooltip) glTranslatef(0, 2, 0) opengl.glDrawStringLeft(self._altTooltip) glTranslatef(2, 0, 0) opengl.glDrawStringLeft(self._altTooltip) glTranslatef(0, -2, 0) opengl.glDrawStringLeft(self._altTooltip) glPopMatrix() glColor4ub(255,255,255,255) opengl.glDrawStringLeft(self._altTooltip) glPopMatrix()
def OnDraw(self): s = self._nodeSize() sx = s*15 sy = s*15 sz = s*15 if self.node == 2 and self.scale is not None: sx *= self.scale if self.node == 3 and self.scale is not None: sy *= self.scale if self.node == 4 and self.scale is not None: sz *= self.scale scaleX = numpy.linalg.norm(self.parent.parent.matrix[0].getA().flatten()) scaleY = numpy.linalg.norm(self.parent.parent.matrix[1].getA().flatten()) scaleZ = numpy.linalg.norm(self.parent.parent.matrix[2].getA().flatten()) if self.scale is not None: scaleX *= self.scale scaleY *= self.scale scaleZ *= self.scale glDisable(GL_LIGHTING) glDisable(GL_DEPTH_TEST) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glLineWidth(1) glBegin(GL_LINES) glColor3ub(128,0,0) glVertex3f(0, 0, 0) glVertex3f(sx, 0, 0) glColor3ub(128,128,0) glVertex3f(0, 0, 0) glVertex3f(0, sy, 0) glColor3ub(0,128,0) glVertex3f(0, 0, 0) glVertex3f(0, 0, sz) glEnd() glLineWidth(2) if self.node == 1: glColor3ub(255,255,255) else: glColor3ub(192,192,192) opengl.DrawBox([-s,-s,-s], [s,s,s]) if self.node == 1: glColor3ub(0,0,0) opengl.glDrawStringCenter("%0.2f" % ((scaleX + scaleY + scaleZ) / 3.0)) if self.node == 2: glColor3ub(255,64,64) else: glColor3ub(128,0,0) glPushMatrix() glTranslatef(sx,0,0) opengl.DrawBox([-s,-s,-s], [s,s,s]) if self.node == 2: glColor3ub(0,0,0) opengl.glDrawStringCenter("%0.2f" % (scaleX)) glPopMatrix() if self.node == 3: glColor3ub(255,255,0) else: glColor3ub(128,128,0) glPushMatrix() glTranslatef(0,sy,0) opengl.DrawBox([-s,-s,-s], [s,s,s]) if self.node == 3: glColor3ub(0,0,0) opengl.glDrawStringCenter("%0.2f" % (scaleY)) glPopMatrix() if self.node == 4: glColor3ub(64,255,64) else: glColor3ub(0,128,0) glPushMatrix() glTranslatef(0,0,sz) opengl.DrawBox([-s,-s,-s], [s,s,s]) if self.node == 4: glColor3ub(0,0,0) opengl.glDrawStringCenter("%0.2f" % (scaleZ)) glPopMatrix() glEnable(GL_DEPTH_TEST)
def OnPaint(self,e): if machineCom.machineIsConnected(): self.printButton._imageID = 6 self.printButton._tooltip = 'Print' elif len(removableStorage.getPossibleSDcardDrives()) > 0: self.printButton._imageID = 2 self.printButton._tooltip = 'Toolpath to SD' else: self.printButton._imageID = 3 self.printButton._tooltip = 'Save toolpath' if self._animView is not None: self._viewTarget = self._animView.getPosition() if self._animView.isDone(): self._animView = None if self._animZoom is not None: self._zoom = self._animZoom.getPosition() if self._animZoom.isDone(): self._animZoom = None if self.viewMode == 'gcode' and self._gcode is not None: try: self._viewTarget[2] = self._gcode.layerList[self.layerSelect.getValue()][-1]['points'][0][2] except: pass if self._objectShader is None: if opengl.hasShaderSupport(): self._objectShader = opengl.GLShader(""" varying float light_amount; void main(void) { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_FrontColor = gl_Color; light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz))); light_amount += 0.2; } """,""" varying float light_amount; void main(void) { gl_FragColor = vec4(gl_Color.xyz * light_amount, gl_Color[3]); } """) self._objectOverhangShader = opengl.GLShader(""" uniform float cosAngle; uniform mat3 rotMatrix; varying float light_amount; void main(void) { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_FrontColor = gl_Color; light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz))); light_amount += 0.2; if (normalize(rotMatrix * gl_Normal).z < -cosAngle) { light_amount = -10.0; } } """,""" varying float light_amount; void main(void) { if (light_amount == -10.0) { gl_FragColor = vec4(1.0, 0.0, 0.0, gl_Color[3]); }else{ gl_FragColor = vec4(gl_Color.xyz * light_amount, gl_Color[3]); } } """) self._objectLoadShader = opengl.GLShader(""" uniform float intensity; uniform float scale; varying float light_amount; void main(void) { vec4 tmp = gl_Vertex; tmp.x += sin(tmp.z/5.0+intensity*30.0) * scale * intensity; tmp.y += sin(tmp.z/3.0+intensity*40.0) * scale * intensity; gl_Position = gl_ModelViewProjectionMatrix * tmp; gl_FrontColor = gl_Color; light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz))); light_amount += 0.2; } """,""" uniform float intensity; varying float light_amount; void main(void) { gl_FragColor = vec4(gl_Color.xyz * light_amount, 1.0-intensity); } """) if self._objectShader == None or not self._objectShader.isValid(): self._objectShader = opengl.GLFakeShader() self._objectOverhangShader = opengl.GLFakeShader() self._objectLoadShader = None self._init3DView() glTranslate(0,0,-self._zoom) glRotate(-self._pitch, 1,0,0) glRotate(self._yaw, 0,0,1) glTranslate(-self._viewTarget[0],-self._viewTarget[1],-self._viewTarget[2]) self._viewport = glGetIntegerv(GL_VIEWPORT) self._modelMatrix = glGetDoublev(GL_MODELVIEW_MATRIX) self._projMatrix = glGetDoublev(GL_PROJECTION_MATRIX) glClearColor(1,1,1,1) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT) if self.viewMode != 'gcode': for n in xrange(0, len(self._scene.objects())): obj = self._scene.objects()[n] glColor4ub((n >> 16) & 0xFF, (n >> 8) & 0xFF, (n >> 0) & 0xFF, 0xFF) self._renderObject(obj) if self._mouseX > -1: glFlush() n = glReadPixels(self._mouseX, self.GetSize().GetHeight() - 1 - self._mouseY, 1, 1, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8)[0][0] >> 8 if n < len(self._scene.objects()): self._focusObj = self._scene.objects()[n] else: self._focusObj = None f = glReadPixels(self._mouseX, self.GetSize().GetHeight() - 1 - self._mouseY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT)[0][0] #self.GetTopLevelParent().SetTitle(hex(n) + " " + str(f)) self._mouse3Dpos = opengl.unproject(self._mouseX, self._viewport[1] + self._viewport[3] - self._mouseY, f, self._modelMatrix, self._projMatrix, self._viewport) self._mouse3Dpos -= self._viewTarget self._init3DView() glTranslate(0,0,-self._zoom) glRotate(-self._pitch, 1,0,0) glRotate(self._yaw, 0,0,1) glTranslate(-self._viewTarget[0],-self._viewTarget[1],-self._viewTarget[2]) if self.viewMode == 'gcode': if self._gcode is not None and self._gcode.layerList is None: self._gcodeLoadThread = threading.Thread(target=self._loadGCode) self._gcodeLoadThread.daemon = True self._gcodeLoadThread.start() if self._gcode is not None and self._gcode.layerList is not None: glPushMatrix() glTranslate(-self._machineSize[0] / 2, -self._machineSize[1] / 2, 0) t = time.time() drawUpTill = min(len(self._gcode.layerList), self.layerSelect.getValue() + 1) for n in xrange(0, drawUpTill): c = 1.0 - float(drawUpTill - n) / 15 c = max(0.3, c) if len(self._gcodeVBOs) < n + 1: self._gcodeVBOs.append(self._generateGCodeVBOs(self._gcode.layerList[n])) if time.time() - t > 0.5: self.QueueRefresh() break #['WALL-OUTER', 'WALL-INNER', 'FILL', 'SUPPORT', 'SKIRT'] if n == drawUpTill - 1: if len(self._gcodeVBOs[n]) < 9: self._gcodeVBOs[n] += self._generateGCodeVBOs2(self._gcode.layerList[n]) glColor3f(c, 0, 0) self._gcodeVBOs[n][8].render(GL_QUADS) glColor3f(c/2, 0, c) self._gcodeVBOs[n][9].render(GL_QUADS) glColor3f(0, c, c/2) self._gcodeVBOs[n][10].render(GL_QUADS) glColor3f(c, 0, 0) self._gcodeVBOs[n][11].render(GL_QUADS) glColor3f(0, c, 0) self._gcodeVBOs[n][12].render(GL_QUADS) glColor3f(c/2, c/2, 0.0) self._gcodeVBOs[n][13].render(GL_QUADS) glColor3f(0, c, c) self._gcodeVBOs[n][14].render(GL_QUADS) self._gcodeVBOs[n][15].render(GL_QUADS) glColor3f(0, 0, c) self._gcodeVBOs[n][16].render(GL_LINES) else: glColor3f(c, 0, 0) self._gcodeVBOs[n][0].render(GL_LINES) glColor3f(c/2, 0, c) self._gcodeVBOs[n][1].render(GL_LINES) glColor3f(0, c, c/2) self._gcodeVBOs[n][2].render(GL_LINES) glColor3f(c, 0, 0) self._gcodeVBOs[n][3].render(GL_LINES) glColor3f(0, c, 0) self._gcodeVBOs[n][4].render(GL_LINES) glColor3f(c/2, c/2, 0.0) self._gcodeVBOs[n][5].render(GL_LINES) glColor3f(0, c, c) self._gcodeVBOs[n][6].render(GL_LINES) self._gcodeVBOs[n][7].render(GL_LINES) glPopMatrix() else: glStencilFunc(GL_ALWAYS, 1, 1) glStencilOp(GL_INCR, GL_INCR, GL_INCR) if self.viewMode == 'overhang': self._objectOverhangShader.bind() self._objectOverhangShader.setUniform('cosAngle', math.cos(math.radians(90 - 60))) else: self._objectShader.bind() for obj in self._scene.objects(): if obj._loadAnim is not None: if obj._loadAnim.isDone(): obj._loadAnim = None else: continue brightness = 1.0 if self._focusObj == obj: brightness = 1.2 elif self._focusObj is not None or self._selectedObj is not None and obj != self._selectedObj: brightness = 0.8 if self._selectedObj == obj or self._selectedObj is None: #If we want transparent, then first render a solid black model to remove the printer size lines. if self.viewMode == 'transparent': glColor4f(0, 0, 0, 0) self._renderObject(obj) glEnable(GL_BLEND) glBlendFunc(GL_ONE, GL_ONE) glDisable(GL_DEPTH_TEST) brightness *= 0.5 if self.viewMode == 'xray': glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) glStencilOp(GL_INCR, GL_INCR, GL_INCR) glEnable(GL_STENCIL_TEST) if self.viewMode == 'overhang': if self._selectedObj == obj and self.tempMatrix is not None: self._objectOverhangShader.setUniform('rotMatrix', obj.getMatrix() * self.tempMatrix) else: self._objectOverhangShader.setUniform('rotMatrix', obj.getMatrix()) if not self._scene.checkPlatform(obj): glColor4f(0.5 * brightness, 0.5 * brightness, 0.5 * brightness, 0.8 * brightness) self._renderObject(obj) else: self._renderObject(obj, brightness) glDisable(GL_STENCIL_TEST) glDisable(GL_BLEND) glEnable(GL_DEPTH_TEST) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) if self.viewMode == 'xray': glPushMatrix() glLoadIdentity() glEnable(GL_STENCIL_TEST) glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP) glDisable(GL_DEPTH_TEST) for i in xrange(2, 15, 2): glStencilFunc(GL_EQUAL, i, 0xFF) glColor(float(i)/10, float(i)/10, float(i)/5) glBegin(GL_QUADS) glVertex3f(-1000,-1000,-10) glVertex3f( 1000,-1000,-10) glVertex3f( 1000, 1000,-10) glVertex3f(-1000, 1000,-10) glEnd() for i in xrange(1, 15, 2): glStencilFunc(GL_EQUAL, i, 0xFF) glColor(float(i)/10, 0, 0) glBegin(GL_QUADS) glVertex3f(-1000,-1000,-10) glVertex3f( 1000,-1000,-10) glVertex3f( 1000, 1000,-10) glVertex3f(-1000, 1000,-10) glEnd() glPopMatrix() glDisable(GL_STENCIL_TEST) glEnable(GL_DEPTH_TEST) self._objectShader.unbind() glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glEnable(GL_BLEND) if self._objectLoadShader is not None: self._objectLoadShader.bind() glColor4f(0.2, 0.6, 1.0, 1.0) for obj in self._scene.objects(): if obj._loadAnim is None: continue self._objectLoadShader.setUniform('intensity', obj._loadAnim.getPosition()) self._objectLoadShader.setUniform('scale', obj.getBoundaryCircle() / 10) self._renderObject(obj) self._objectLoadShader.unbind() glDisable(GL_BLEND) self._drawMachine() if self.viewMode == 'gcode': if self._gcodeLoadThread is not None and self._gcodeLoadThread.isAlive(): glDisable(GL_DEPTH_TEST) glPushMatrix() glLoadIdentity() glTranslate(0,-4,-10) glColor4ub(60,60,60,255) opengl.glDrawStringCenter('Loading toolpath for visualization...') glPopMatrix() else: #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) glEnable(GL_BLEND) glEnable(GL_CULL_FACE) glColor4f(0,0,0,0.12) glBegin(GL_QUADS) glVertex3f(-size[0], size[1], 0.1) glVertex3f(-size[0], -size[1], 0.1) glVertex3f( size[0], -size[1], 0.1) glVertex3f( size[0], size[1], 0.1) 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) glEnable(GL_CULL_FACE) glEnable(GL_STENCIL_TEST) glDisable(GL_BLEND) glStencilFunc(GL_EQUAL, 0, 255) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) glLineWidth(2) glColor4f(1,1,1,0.5) self._renderObject(self._selectedObj) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) glViewport(0, 0, self.GetSize().GetWidth(), self.GetSize().GetHeight()) glDisable(GL_STENCIL_TEST) glDisable(GL_CULL_FACE) glEnable(GL_DEPTH_TEST) if self._selectedObj is not None: glPushMatrix() pos = self.getObjectCenterPos() glTranslate(pos[0], pos[1], pos[2]) self.tool.OnDraw() glPopMatrix() if self.viewMode == 'overhang' and not opengl.hasShaderSupport(): glDisable(GL_DEPTH_TEST) glPushMatrix() glLoadIdentity() glTranslate(0,-4,-10) glColor4ub(60,60,60,255) opengl.glDrawStringCenter('Overhang view not working due to lack of OpenGL shaders support.') glPopMatrix()