From: daid303 Date: Thu, 17 Jan 2013 08:47:34 +0000 (+0100) Subject: Replacement for gluUnproject, which seems to be causing problems with some intel... X-Git-Tag: 13.03~92^2~6 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=e814b31e030821382a1deca7a0089f30dd2cf19b;p=cura.git Replacement for gluUnproject, which seems to be causing problems with some intel based drivers. #321 --- diff --git a/Cura/gui/preview3d.py b/Cura/gui/preview3d.py index db5e4845..3ee71fd6 100644 --- a/Cura/gui/preview3d.py +++ b/Cura/gui/preview3d.py @@ -741,8 +741,8 @@ class PreviewGLCanvas(glcanvas.GLCanvas): def OnMouseMotion(self,e): if self.parent.objectsMaxV is not None and self.viewport is not None and self.viewMode != 'GCode' and self.viewMode != 'Mixed': - p0 = numpy.array(gluUnProject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 0, self.modelMatrix, self.projMatrix, self.viewport)) - p1 = numpy.array(gluUnProject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 1, self.modelMatrix, self.projMatrix, self.viewport)) + p0 = opengl.unproject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 0, self.modelMatrix, self.projMatrix, self.viewport) + p1 = opengl.unproject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 1, self.modelMatrix, self.projMatrix, self.viewport) self.parent.tool.OnMouseMove(p0, p1) if e.Dragging() and e.LeftIsDown(): diff --git a/Cura/gui/util/opengl.py b/Cura/gui/util/opengl.py index 29b487e0..72a0d627 100644 --- a/Cura/gui/util/opengl.py +++ b/Cura/gui/util/opengl.py @@ -22,6 +22,8 @@ except: print "Failed to find PyOpenGL: http://pyopengl.sourceforge.net/" hasOpenGLlibs = False +import numpy + def InitGL(window, view3D, zoom): # set viewing projection glMatrixMode(GL_MODELVIEW) @@ -243,6 +245,18 @@ def glDrawStringCenter(s): for c in s: glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, ord(c)) +def unproject(winx, winy, winz, modelMatrix, projMatrix, viewport): + npModelMatrix = numpy.matrix(numpy.array(modelMatrix, numpy.float64).reshape((4,4))) + npProjMatrix = numpy.matrix(numpy.array(projMatrix, numpy.float64).reshape((4,4))) + finalMatrix = npModelMatrix * npProjMatrix + finalMatrix = numpy.linalg.inv(finalMatrix) + + viewport = map(float, viewport) + vector = numpy.array([(winx - viewport[0]) / viewport[2] * 2.0 - 1.0, (winy - viewport[1]) / viewport[3] * 2.0 - 1.0, winz * 2.0 - 1.0, 1]).reshape((1,4)) + vector = (numpy.matrix(vector) * finalMatrix).getA().flatten() + ret = list(vector)[0:3] / vector[3] + return ret + def ResetMatrixRotationAndScale(): matrix = glGetFloatv(GL_MODELVIEW_MATRIX) noZ = False