chiark / gitweb /
Fix outline display and overhang display (overhang still needs some more work)
authordaid303 <daid303@gmail.com>
Tue, 22 Jan 2013 09:21:48 +0000 (10:21 +0100)
committerdaid303 <daid303@gmail.com>
Tue, 22 Jan 2013 09:21:48 +0000 (10:21 +0100)
Cura/gui/preview3d.py
Cura/gui/util/toolbarUtil.py

index ddcf56e01cc419b868663afce00a82265703b225..da40a6fac347b7010dd3c6dec326e4bf0e7c8167 100644 (file)
@@ -518,7 +518,7 @@ class previewPanel(wx.Panel):
                self.toolbar2 = toolbarUtil.Toolbar(self)
 
                group = []
-               self.infoToolButton = toolbarUtil.RadioButton(self.toolbar2, group, 'object-rotate.png', 'object-rotate.png', 'Object info', callback=self.OnToolChange)
+               self.infoToolButton = toolbarUtil.RadioButton(self.toolbar2, group, 'info-on.png', 'info-off.png', 'Object info', callback=self.OnToolChange)
                self.rotateToolButton = toolbarUtil.RadioButton(self.toolbar2, group, 'object-rotate.png', 'object-rotate.png', 'Rotate object', callback=self.OnToolChange)
                self.scaleToolButton = toolbarUtil.RadioButton(self.toolbar2, group, 'object-scale.png', 'object-scale.png', 'Scale object', callback=self.OnToolChange)
                self.mirrorToolButton = toolbarUtil.RadioButton(self.toolbar2, group, 'object-mirror-x-on.png', 'object-mirror-x-off.png', 'Mirror object', callback=self.OnToolChange)
@@ -1020,11 +1020,12 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                glPushMatrix()
                glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0)
                for obj in self.parent.objectList:
-                       if obj.mesh == None:
+                       if obj.mesh is None:
                                continue
-                       if obj.displayList == None:
+                       if obj.displayList is None:
                                obj.displayList = glGenLists(1)
                                obj.steepDisplayList = glGenLists(1)
+                               obj.outlineDisplayList = glGenLists(1)
                        if obj.dirty:
                                obj.dirty = False
                                glNewList(obj.displayList, GL_COMPILE)
@@ -1033,11 +1034,14 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                glNewList(obj.steepDisplayList, GL_COMPILE)
                                opengl.DrawMeshSteep(obj.mesh, 60)
                                glEndList()
+                               glNewList(obj.outlineDisplayList, GL_COMPILE)
+                               opengl.DrawMeshOutline(obj.mesh)
+                               glEndList()
                        
                        if self.viewMode == "Mixed":
                                glDisable(GL_BLEND)
                                glColor3f(0.0,0.0,0.0)
-                               self.drawModel(obj)
+                               self.drawModel(obj.displayList)
                                glColor3f(1.0,1.0,1.0)
                                glClear(GL_DEPTH_BUFFER_BIT)
                
@@ -1085,7 +1089,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                if self.viewMode != "Mixed":
                                        glDisable(GL_BLEND)
                                        glColor3f(0.0,0.0,0.0)
-                                       self.drawModel(obj)
+                                       self.drawModel(obj.displayList)
                                        glColor3f(1.0,1.0,1.0)
                                #After the black model is rendered, render the model again but now with lighting and no depth testing.
                                glDisable(GL_DEPTH_TEST)
@@ -1093,7 +1097,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                glEnable(GL_BLEND)
                                glBlendFunc(GL_ONE, GL_ONE)
                                glEnable(GL_LIGHTING)
-                               self.drawModel(obj)
+                               self.drawModel(obj.displayList)
                                glEnable(GL_DEPTH_TEST)
                        elif self.viewMode == "X-Ray":
                                glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)
@@ -1102,16 +1106,16 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                glEnable(GL_STENCIL_TEST)
                                glStencilFunc(GL_ALWAYS, 1, 1)
                                glStencilOp(GL_INCR, GL_INCR, GL_INCR)
-                               self.drawModel(obj)
+                               self.drawModel(obj.displayList)
                                glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP);
                                
                                glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)
                                glStencilFunc(GL_EQUAL, 0, 1)
                                glColor(1, 1, 1)
-                               self.drawModel(obj)
+                               self.drawModel(obj.displayList)
                                glStencilFunc(GL_EQUAL, 1, 1)
                                glColor(1, 0, 0)
-                               self.drawModel(obj)
+                               self.drawModel(obj.displayList)
 
                                glPushMatrix()
                                glLoadIdentity()
@@ -1140,29 +1144,25 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                
                                #Fix the depth buffer
                                glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)
-                               self.drawModel(obj)
+                               self.drawModel(obj.displayList)
                                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 * 0.4, self.objColor[self.parent.objectList.index(obj)]))
                                glEnable(GL_LIGHTING)
-                               self.drawModel(obj)
+                               self.drawModel(obj.displayList)
 
                        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)
-                               glPushMatrix()
-                               opengl.DrawMeshOutline(obj.mesh)
-                               glPopMatrix()
-                       
+                               self.drawModel(obj.outlineDisplayList)
+
                        if self.drawSteepOverhang:
                                glDisable(GL_LIGHTING)
                                glColor3f(1,1,1)
-                               glPushMatrix()
-                               glCallList(obj.steepDisplayList)
-                               glPopMatrix()
-               
+                               self.drawModel(obj.steepDisplayList)
+
                glPopMatrix()   
                #if self.viewMode == "Normal" or self.viewMode == "Transparent" or self.viewMode == "X-Ray":
                #       glDisable(GL_LIGHTING)
@@ -1187,12 +1187,12 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
 
                glFlush()
 
-       def drawModel(self, obj):
+       def drawModel(self, displayList):
                vMin = self.parent.objectsMinV
                vMax = self.parent.objectsMaxV
                offset = - vMin - (vMax - vMin) / 2
 
-               matrix = opengl.convert3x3MatrixTo4x4(obj.mesh.matrix)
+               matrix = opengl.convert3x3MatrixTo4x4(self.parent.matrix)
 
                glPushMatrix()
                glTranslate(0, 0, self.parent.objectsSize[2]/2)
@@ -1202,5 +1202,5 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                glTranslate(0, 0, -self.parent.objectsSize[2]/2)
                glTranslate(offset[0], offset[1], -vMin[2])
                glMultMatrixf(matrix)
-               glCallList(obj.displayList)
+               glCallList(displayList)
                glPopMatrix()
index 2a6ba81f4c1a1099577b883a7cb2cefe97ae971f..b79a4f652b5a849554a31937a61bf23e3d7cad7e 100644 (file)
@@ -116,11 +116,11 @@ class ToggleButton(buttons.GenBitmapToggleButton):
 
 class RadioButton(buttons.GenBitmapButton):
        def __init__(self, parent, group, bitmapFilenameOn, bitmapFilenameOff,
-                    helpText='', id=-1, callback=None, size=(20, 20)):
+                    helpText='', id=-1, callback=None):
                self.bitmapOn = wx.Bitmap(getPathForImage(bitmapFilenameOn))
                self.bitmapOff = wx.Bitmap(getPathForImage(bitmapFilenameOff))
 
-               super(RadioButton, self).__init__(parent, id, self.bitmapOff, size=size)
+               super(RadioButton, self).__init__(parent, id, self.bitmapOff, size=self.bitmapOn.GetSize() + (4, 4))
 
                self.group = group
                group.append(self)
@@ -151,7 +151,7 @@ class RadioButton(buttons.GenBitmapButton):
        def SetValue(self, boolValue):
                self._value = boolValue
                self.SetBitmap(self.GetValue())
-               if boolValue == True:
+               if boolValue:
                        for other in self.group:
                                if other != self:
                                        other.SetValue(False)