import threading\r
import re\r
\r
-from wx.glcanvas import GLCanvas\r
+from wx import glcanvas\r
import wx\r
try:\r
from OpenGL.GLUT import *\r
\r
self.transparentButton = wx.Button(tb, -1, "T", size=(21,21))\r
tb.AddControl(self.transparentButton)\r
- self.Bind(wx.EVT_BUTTON, self.OnConfigClick, self.transparentButton)\r
+ self.Bind(wx.EVT_BUTTON, self.OnTransparentClick, self.transparentButton)\r
+ self.depthComplexityButton = wx.Button(tb, -1, "DC", size=(21*2,21))\r
+ tb.AddControl(self.depthComplexityButton)\r
+ self.Bind(wx.EVT_BUTTON, self.OnDepthComplexityClick, self.depthComplexityButton)\r
\r
self.layerSpin = wx.SpinCtrl(tb, -1, '', size=(21*4,21), style=wx.SP_ARROW_KEYS)\r
tb.AddControl(self.layerSpin)\r
if self.gcode != None:\r
self.layerSpin.SetRange(1, self.gcode.layerCount)\r
\r
- def OnConfigClick(self, e):\r
+ def OnTransparentClick(self, e):\r
self.glCanvas.renderTransparent = not self.glCanvas.renderTransparent\r
+ if self.glCanvas.renderTransparent:\r
+ self.glCanvas.renderDepthComplexity = False\r
+ self.glCanvas.Refresh()\r
+ \r
+ def OnDepthComplexityClick(self, e):\r
+ self.glCanvas.renderDepthComplexity = not self.glCanvas.renderDepthComplexity\r
+ if self.glCanvas.renderDepthComplexity:\r
+ self.glCanvas.renderTransparent = False\r
self.glCanvas.Refresh()\r
\r
def moveModel(self):\r
self.triangleMesh.getMinimumZ()\r
self.modelDirty = True\r
\r
-class PreviewGLCanvas(GLCanvas):\r
+class PreviewGLCanvas(glcanvas.GLCanvas):\r
def __init__(self, parent):\r
- GLCanvas.__init__(self, parent)\r
+ attribList = (glcanvas.WX_GL_RGBA, glcanvas.WX_GL_DOUBLEBUFFER, glcanvas.WX_GL_DEPTH_SIZE, 24, glcanvas.WX_GL_STENCIL_SIZE, 8)\r
+ glcanvas.GLCanvas.__init__(self, parent, attribList = attribList)\r
self.parent = parent\r
wx.EVT_PAINT(self, self.OnPaint)\r
wx.EVT_SIZE(self, self.OnSize)\r
self.fillLineWidth = 0.4\r
self.view3D = True\r
self.renderTransparent = False\r
+ self.renderDepthComplexity = False\r
self.modelDisplayList = None\r
\r
def OnMouseMotion(self,e):\r
\r
def OnDraw(self):\r
machineSize = self.parent.machineSize\r
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)\r
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)\r
\r
glTranslate(-self.parent.machineCenter.x, -self.parent.machineCenter.y, 0)\r
\r
glBlendFunc(GL_ONE, GL_ONE)\r
glEnable(GL_LIGHTING)\r
glCallList(self.modelDisplayList)\r
+ elif self.renderDepthComplexity:\r
+ glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)\r
+ glDisable(GL_DEPTH_TEST)\r
+ glEnable(GL_STENCIL_TEST);\r
+ glStencilFunc(GL_ALWAYS, 1, 1)\r
+ glStencilOp(GL_INCR, GL_INCR, GL_INCR)\r
+ glCallList(self.modelDisplayList)\r
+ glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP);\r
+ \r
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)\r
+ glStencilFunc(GL_EQUAL, 0, 1);\r
+ glColor(0, 1, 0)\r
+ glCallList(self.modelDisplayList)\r
+ glStencilFunc(GL_EQUAL, 1, 1);\r
+ glColor(1, 0, 0)\r
+ glCallList(self.modelDisplayList)\r
+\r
+ glPushMatrix()\r
+ glLoadIdentity()\r
+ for i in xrange(2, 20, 2):\r
+ glStencilFunc(GL_EQUAL, i, 0xFF);\r
+ glColor(0, float(i)/10, 0)\r
+ glBegin(GL_QUADS)\r
+ glVertex3f(-10,-10,-1)\r
+ glVertex3f( 10,-10,-1)\r
+ glVertex3f( 10, 10,-1)\r
+ glVertex3f(-10, 10,-1)\r
+ glEnd()\r
+ for i in xrange(1, 20, 2):\r
+ glStencilFunc(GL_EQUAL, i, 0xFF);\r
+ glColor(float(i)/10, 0, 0)\r
+ glBegin(GL_QUADS)\r
+ glVertex3f(-10,-10,-1)\r
+ glVertex3f( 10,-10,-1)\r
+ glVertex3f( 10, 10,-1)\r
+ glVertex3f(-10, 10,-1)\r
+ glEnd()\r
+ glPopMatrix()\r
+\r
+ glDisable(GL_STENCIL_TEST);\r
+ glEnable(GL_DEPTH_TEST)\r
else:\r
glEnable(GL_LIGHTING)\r
glCallList(self.modelDisplayList)\r
glDisable(GL_BLEND)\r
\r
glClearColor(0.0, 0.0, 0.0, 1.0)\r
+ glClearStencil(0)\r
glClearDepth(1.0)\r
\r
glMatrixMode(GL_PROJECTION)\r