Example #1
0
	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)))
Example #2
0
    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()
Example #3
0
    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()
Example #4
0
	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()
Example #5
0
	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()
Example #6
0
	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()
Example #7
0
    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()
Example #8
0
    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)))
Example #9
0
    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)
Example #10
0
 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)
Example #11
0
	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)
Example #12
0
	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)
Example #13
0
	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()
Example #14
0
	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()
Example #15
0
	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)
Example #16
0
	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()