home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / lib / site-packages / OpenGL / GLU / projection.py < prev    next >
Encoding:
Python Source  |  2008-12-07  |  2.7 KB  |  100 lines

  1. """glu[Un]Project[4] convenience wrappers"""
  2. from OpenGL.platform import GL
  3. from OpenGL.raw import GLU as simple
  4. from OpenGL import GL, arrays
  5. from OpenGL.lazywrapper import lazy
  6. import ctypes 
  7. POINTER = ctypes.POINTER
  8.  
  9. @lazy( simple.gluProject )
  10. def gluProject( baseFunction, objX, objY, objZ, model=None, proj=None, view=None ):
  11.     """Convenience wrapper for gluProject
  12.     
  13.     Automatically fills in the model, projection and viewing matrices
  14.     if not provided.
  15.     
  16.     returns (winX,winY,winZ) doubles
  17.     """
  18.     if model is None:
  19.         model = GL.glGetDoublev( GL.GL_MODELVIEW_MATRIX )
  20.     if proj is None:
  21.         proj = GL.glGetDoublev( GL.GL_PROJECTION_MATRIX )
  22.     if view is None:
  23.         view = GL.glGetIntegerv( GL.GL_VIEWPORT )
  24.     winX = simple.GLdouble( 0.0 )
  25.     winY = simple.GLdouble( 0.0 )
  26.     winZ = simple.GLdouble( 0.0 )
  27.     result = baseFunction( 
  28.         objX,objY,objZ,
  29.         model,proj,view,
  30.         winX,winY,winZ,
  31.     )
  32.     if not result:
  33.         raise ValueError( """Projection failed!""" )
  34.     return winX.value, winY.value, winZ.value 
  35.  
  36. @lazy( simple.gluUnProject )
  37. def gluUnProject( baseFunction, winX, winY, winZ, model=None, proj=None, view=None ):
  38.     """Convenience wrapper for gluUnProject
  39.     
  40.     Automatically fills in the model, projection and viewing matrices
  41.     if not provided.
  42.     
  43.     returns (objX,objY,objZ) doubles
  44.     """
  45.     if model is None:
  46.         model = GL.glGetDoublev( GL.GL_MODELVIEW_MATRIX )
  47.     if proj is None:
  48.         proj = GL.glGetDoublev( GL.GL_PROJECTION_MATRIX )
  49.     if view is None:
  50.         view = GL.glGetIntegerv( GL.GL_VIEWPORT )
  51.     objX = simple.GLdouble( 0.0 )
  52.     objY = simple.GLdouble( 0.0 )
  53.     objZ = simple.GLdouble( 0.0 )
  54.     result = baseFunction( 
  55.         winX,winY,winZ,
  56.         model,proj,view,
  57.         ctypes.byref(objX),ctypes.byref(objY),ctypes.byref(objZ),
  58.     )
  59.     if not result:
  60.         raise ValueError( """Projection failed!""" )
  61.     return objX.value, objY.value, objZ.value 
  62. @lazy( simple.gluUnProject4 )
  63. def gluUnProject4(
  64.     baseFunction,
  65.     winX, winY, winZ, clipW, 
  66.     model=None, proj=None, view=None, 
  67.     near=0.0, far=1.0
  68. ):
  69.     """Convenience wrapper for gluUnProject
  70.     
  71.     Automatically fills in the model, projection and viewing matrices
  72.     if not provided.
  73.     
  74.     returns (objX,objY,objZ) doubles
  75.     """
  76.     if model is None:
  77.         model = GL.glGetDoublev( GL.GL_MODELVIEW_MATRIX )
  78.     if proj is None:
  79.         proj = GL.glGetDoublev( GL.GL_PROJECTION_MATRIX )
  80.     if view is None:
  81.         view = GL.glGetIntegerv( GL.GL_VIEWPORT )
  82.     objX = simple.GLdouble( 0.0 )
  83.     objY = simple.GLdouble( 0.0 )
  84.     objZ = simple.GLdouble( 0.0 )
  85.     objW = simple.GLdouble( 0.0 )
  86.     result = baseFunction( 
  87.         winX,winY,winZ,
  88.         model,proj,view,
  89.         ctypes.byref(objX),ctypes.byref(objY),ctypes.byref(objZ),ctypes.byref(objW)
  90.     )
  91.     if not result:
  92.         raise ValueError( """Projection failed!""" )
  93.     return objX.value, objY.value, objZ.value, objW.value
  94.  
  95. __all__ = (
  96.     'gluProject',
  97.     'gluUnProject',
  98.     'gluUnProject4',
  99. )
  100.