chiark / gitweb /
Added border view option for 3D view.
authordaid <daid303@gmail.com>
Tue, 31 Jul 2012 14:39:31 +0000 (16:39 +0200)
committerdaid <daid303@gmail.com>
Tue, 31 Jul 2012 14:39:31 +0000 (16:39 +0200)
Cura/gui/opengl.py
Cura/gui/preview3d.py
Cura/gui/toolbarUtil.py
Cura/images/view-border-off.png [new file with mode: 0644]
Cura/images/view-border-on.png [new file with mode: 0644]

index c227600d30624ca1fca365bddbf55eda788cc45b..bf89bf8a11586739e540aeef6b1bf294220ec83d 100644 (file)
@@ -47,7 +47,7 @@ def InitGL(window, view3D, zoom):
        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
@@ -56,6 +56,7 @@ def DrawMachine(machineSize):
        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
@@ -203,7 +204,21 @@ def DrawBox(vMin, vMax):
        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
index 27605a3d9ba8d7e6da6c3846c0a7d8f949b570ab..26ebe04a886162be581bb39af78949e5b636310d 100644 (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)\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
@@ -331,6 +334,7 @@ class previewPanel(wx.Panel):
                        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
@@ -533,7 +537,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                        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
@@ -593,11 +597,23 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
 \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
index e49d77c45f39211d7cad3c33d3967c93e1a716d2..64dc9840d6253cddd424b0963ae57331bcbfaaa8 100644 (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):
diff --git a/Cura/images/view-border-off.png b/Cura/images/view-border-off.png
new file mode 100644 (file)
index 0000000..3019205
Binary files /dev/null and b/Cura/images/view-border-off.png differ
diff --git a/Cura/images/view-border-on.png b/Cura/images/view-border-on.png
new file mode 100644 (file)
index 0000000..2d27e29
Binary files /dev/null and b/Cura/images/view-border-on.png differ