chiark / gitweb /
Replacement for gluUnproject, which seems to be causing problems with some intel...
authordaid303 <daid303@gmail.com>
Thu, 17 Jan 2013 08:47:34 +0000 (09:47 +0100)
committersmorloc <smorloc@gmail.com>
Sat, 19 Jan 2013 02:40:34 +0000 (21:40 -0500)
Cura/gui/preview3d.py
Cura/gui/util/opengl.py

index db5e484514b58db246640f090511e67cf0d7a53f..3ee71fd6041df937f2993544f7d989794e896f67 100644 (file)
@@ -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():
index 29b487e0a6d19d2fe33219ff1d75e14371fad803..72a0d627e4b292b641a167a656069e726f602ca7 100644 (file)
@@ -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