Added border view option for 3D view.

master
daid 2012-07-31 16:39:31 +02:00
parent b65977a595
commit 4a1fd13ff5
5 changed files with 38 additions and 4 deletions

View File

@ -47,7 +47,7 @@ def InitGL(window, view3D, zoom):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
def DrawMachine(machineSize):
glColor3f(1,1,1)
glColor3f(1.0,1.0,1.0)
glLineWidth(4)
glDisable(GL_LIGHTING)
glBegin(GL_LINE_LOOP)
@ -56,6 +56,7 @@ def DrawMachine(machineSize):
glVertex3f(machineSize.x, machineSize.y, 0)
glVertex3f(0, machineSize.y, 0)
glEnd()
glColor3f(0.7,0.7,0.7)
glLineWidth(2)
glBegin(GL_LINES)
for i in xrange(0, int(machineSize.x), 10):
@ -203,7 +204,21 @@ def DrawBox(vMin, vMax):
glVertex3f(vMin[0], vMax[1], vMax[2])
glEnd()
def DrawSTL(mesh):
def DrawMeshOutline(mesh):
glEnable(GL_CULL_FACE)
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, mesh.vertexes)
glCullFace(GL_FRONT)
glLineWidth(3)
glPolygonMode(GL_BACK, GL_LINE)
glDrawArrays(GL_TRIANGLES, 0, mesh.vertexCount)
glPolygonMode(GL_BACK, GL_FILL)
glCullFace(GL_BACK)
glDisableClientState(GL_VERTEX_ARRAY)
def DrawMesh(mesh):
glEnable(GL_CULL_FACE)
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);

View File

@ -76,6 +76,9 @@ class previewPanel(wx.Panel):
toolbarUtil.RadioButton(self.toolbar, group, 'object-top-on.png', 'object-top-off.png', 'Topdown view', callback=self.OnTopClick)
self.toolbar.AddSeparator()
self.showBorderButton = toolbarUtil.ToggleButton(self.toolbar, '', 'view-border-on.png', 'view-border-off.png', 'Show model borders', callback=self.OnViewChange)
self.toolbar.AddSeparator()
group = []
self.normalViewButton = toolbarUtil.RadioButton(self.toolbar, group, 'view-normal-on.png', 'view-normal-off.png', 'Normal model view', callback=self.OnViewChange)
self.transparentViewButton = toolbarUtil.RadioButton(self.toolbar, group, 'view-transparent-on.png', 'view-transparent-off.png', 'Transparent model view', callback=self.OnViewChange)
@ -331,6 +334,7 @@ class previewPanel(wx.Panel):
self.glCanvas.viewMode = "GCode"
elif self.mixedViewButton.GetValue():
self.glCanvas.viewMode = "Mixed"
self.glCanvas.drawBorders = self.showBorderButton.GetValue()
self.updateToolbar()
self.glCanvas.Refresh()
@ -533,7 +537,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
if obj.dirty:
obj.dirty = False
glNewList(obj.displayList, GL_COMPILE)
opengl.DrawSTL(obj.mesh)
opengl.DrawMesh(obj.mesh)
glEndList()
if self.viewMode == "Transparent" or self.viewMode == "Mixed":
@ -593,11 +597,23 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
glDisable(GL_STENCIL_TEST)
glEnable(GL_DEPTH_TEST)
if self.drawBorders:
#Fix the depth buffer for the outline drawing.
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)
self.drawModel(obj)
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)
elif self.viewMode == "Normal":
glLightfv(GL_LIGHT0, GL_DIFFUSE, self.objColor[self.parent.objectList.index(obj)])
glLightfv(GL_LIGHT0, GL_AMBIENT, map(lambda x: x / 5, self.objColor[self.parent.objectList.index(obj)]))
glEnable(GL_LIGHTING)
self.drawModel(obj)
if self.drawBorders and (self.viewMode == "Normal" or self.viewMode == "Transparent" or self.viewMode == "X-Ray"):
glEnable(GL_DEPTH_TEST)
glDisable(GL_LIGHTING)
glColor3f(1,1,1)
opengl.DrawMeshOutline(obj.mesh)
glPopMatrix()
if self.viewMode == "Normal" or self.viewMode == "Transparent" or self.viewMode == "X-Ray":

View File

@ -94,6 +94,8 @@ class ToggleButton(buttons.GenBitmapToggleButton):
def OnButton(self, event):
self.SetBitmap(self.GetValue())
if self.callback != None:
self.callback()
event.Skip()
def OnButtonProfile(self, event):
@ -103,7 +105,8 @@ class ToggleButton(buttons.GenBitmapToggleButton):
else:
self.SetBitmap(False)
profile.putProfileSetting(self.profileSetting, 'False')
self.callback()
if self.callback != None:
self.callback()
event.Skip()
def OnMouseEnter(self, event):

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B