From: daid303 Date: Tue, 22 Jan 2013 09:21:48 +0000 (+0100) Subject: Fix outline display and overhang display (overhang still needs some more work) X-Git-Tag: 13.03~88 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=3d2455aa317448c3beb1115ca49b8b8e7c022236;p=cura.git Fix outline display and overhang display (overhang still needs some more work) --- diff --git a/Cura/gui/preview3d.py b/Cura/gui/preview3d.py index ddcf56e0..da40a6fa 100644 --- a/Cura/gui/preview3d.py +++ b/Cura/gui/preview3d.py @@ -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() diff --git a/Cura/gui/util/toolbarUtil.py b/Cura/gui/util/toolbarUtil.py index 2a6ba81f..b79a4f65 100644 --- a/Cura/gui/util/toolbarUtil.py +++ b/Cura/gui/util/toolbarUtil.py @@ -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)