glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)\r
\r
def DrawMachine(machineSize):\r
- glColor3f(1,1,1)\r
+ glColor3f(1.0,1.0,1.0)\r
glLineWidth(4)\r
glDisable(GL_LIGHTING)\r
glBegin(GL_LINE_LOOP)\r
glVertex3f(machineSize.x, machineSize.y, 0)\r
glVertex3f(0, machineSize.y, 0)\r
glEnd()\r
+ glColor3f(0.7,0.7,0.7)\r
glLineWidth(2)\r
glBegin(GL_LINES)\r
for i in xrange(0, int(machineSize.x), 10):\r
glVertex3f(vMin[0], vMax[1], vMax[2])\r
glEnd()\r
\r
-def DrawSTL(mesh):\r
+def DrawMeshOutline(mesh):\r
+ glEnable(GL_CULL_FACE)\r
+ glEnableClientState(GL_VERTEX_ARRAY);\r
+ glVertexPointer(3, GL_FLOAT, 0, mesh.vertexes)\r
+ \r
+ glCullFace(GL_FRONT)\r
+ glLineWidth(3)\r
+ glPolygonMode(GL_BACK, GL_LINE)\r
+ glDrawArrays(GL_TRIANGLES, 0, mesh.vertexCount)\r
+ glPolygonMode(GL_BACK, GL_FILL)\r
+ glCullFace(GL_BACK)\r
+ \r
+ glDisableClientState(GL_VERTEX_ARRAY)\r
+\r
+def DrawMesh(mesh):\r
glEnable(GL_CULL_FACE)\r
glEnableClientState(GL_VERTEX_ARRAY);\r
glEnableClientState(GL_NORMAL_ARRAY);\r
toolbarUtil.RadioButton(self.toolbar, group, 'object-top-on.png', 'object-top-off.png', 'Topdown view', callback=self.OnTopClick)\r
self.toolbar.AddSeparator()\r
\r
+ self.showBorderButton = toolbarUtil.ToggleButton(self.toolbar, '', 'view-border-on.png', 'view-border-off.png', 'Show model borders', callback=self.OnViewChange)\r
+ self.toolbar.AddSeparator()\r
+\r
group = []\r
self.normalViewButton = toolbarUtil.RadioButton(self.toolbar, group, 'view-normal-on.png', 'view-normal-off.png', 'Normal model view', callback=self.OnViewChange)\r
self.transparentViewButton = toolbarUtil.RadioButton(self.toolbar, group, 'view-transparent-on.png', 'view-transparent-off.png', 'Transparent model view', callback=self.OnViewChange)\r
self.glCanvas.viewMode = "GCode"\r
elif self.mixedViewButton.GetValue():\r
self.glCanvas.viewMode = "Mixed"\r
+ self.glCanvas.drawBorders = self.showBorderButton.GetValue()\r
self.updateToolbar()\r
self.glCanvas.Refresh()\r
\r
if obj.dirty:\r
obj.dirty = False\r
glNewList(obj.displayList, GL_COMPILE)\r
- opengl.DrawSTL(obj.mesh)\r
+ opengl.DrawMesh(obj.mesh)\r
glEndList()\r
\r
if self.viewMode == "Transparent" or self.viewMode == "Mixed":\r
\r
glDisable(GL_STENCIL_TEST)\r
glEnable(GL_DEPTH_TEST)\r
+ \r
+ if self.drawBorders:\r
+ #Fix the depth buffer for the outline drawing.\r
+ glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)\r
+ self.drawModel(obj)\r
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)\r
elif self.viewMode == "Normal":\r
glLightfv(GL_LIGHT0, GL_DIFFUSE, self.objColor[self.parent.objectList.index(obj)])\r
glLightfv(GL_LIGHT0, GL_AMBIENT, map(lambda x: x / 5, self.objColor[self.parent.objectList.index(obj)]))\r
glEnable(GL_LIGHTING)\r
self.drawModel(obj)\r
+ \r
+ if self.drawBorders and (self.viewMode == "Normal" or self.viewMode == "Transparent" or self.viewMode == "X-Ray"):\r
+ glEnable(GL_DEPTH_TEST)\r
+ glDisable(GL_LIGHTING)\r
+ glColor3f(1,1,1)\r
+ opengl.DrawMeshOutline(obj.mesh)\r
\r
glPopMatrix() \r
if self.viewMode == "Normal" or self.viewMode == "Transparent" or self.viewMode == "X-Ray":\r
def OnButton(self, event):
self.SetBitmap(self.GetValue())
+ if self.callback != None:
+ self.callback()
event.Skip()
def OnButtonProfile(self, event):
else:
self.SetBitmap(False)
profile.putProfileSetting(self.profileSetting, 'False')
- self.callback()
+ if self.callback != None:
+ self.callback()
event.Skip()
def OnMouseEnter(self, event):