|
"""glu[Un]Project[4] convenience wrappers""" |
|
from OpenGL.raw import GLU as _simple |
|
from OpenGL import GL |
|
from OpenGL.lazywrapper import lazy as _lazy |
|
import ctypes |
|
POINTER = ctypes.POINTER |
|
|
|
@_lazy( _simple.gluProject ) |
|
def gluProject( baseFunction, objX, objY, objZ, model=None, proj=None, view=None ): |
|
"""Convenience wrapper for gluProject |
|
|
|
Automatically fills in the model, projection and viewing matrices |
|
if not provided. |
|
|
|
returns (winX,winY,winZ) doubles |
|
""" |
|
if model is None: |
|
model = GL.glGetDoublev( GL.GL_MODELVIEW_MATRIX ) |
|
if proj is None: |
|
proj = GL.glGetDoublev( GL.GL_PROJECTION_MATRIX ) |
|
if view is None: |
|
view = GL.glGetIntegerv( GL.GL_VIEWPORT ) |
|
winX = _simple.GLdouble( 0.0 ) |
|
winY = _simple.GLdouble( 0.0 ) |
|
winZ = _simple.GLdouble( 0.0 ) |
|
result = baseFunction( |
|
objX,objY,objZ, |
|
model,proj,view, |
|
winX,winY,winZ, |
|
) |
|
|
|
|
|
if result is not None and result != _simple.GLU_TRUE: |
|
raise ValueError( """Projection failed!""" ) |
|
return winX.value, winY.value, winZ.value |
|
|
|
@_lazy( _simple.gluUnProject ) |
|
def gluUnProject( baseFunction, winX, winY, winZ, model=None, proj=None, view=None ): |
|
"""Convenience wrapper for gluUnProject |
|
|
|
Automatically fills in the model, projection and viewing matrices |
|
if not provided. |
|
|
|
returns (objX,objY,objZ) doubles |
|
""" |
|
if model is None: |
|
model = GL.glGetDoublev( GL.GL_MODELVIEW_MATRIX ) |
|
if proj is None: |
|
proj = GL.glGetDoublev( GL.GL_PROJECTION_MATRIX ) |
|
if view is None: |
|
view = GL.glGetIntegerv( GL.GL_VIEWPORT ) |
|
objX = _simple.GLdouble( 0.0 ) |
|
objY = _simple.GLdouble( 0.0 ) |
|
objZ = _simple.GLdouble( 0.0 ) |
|
result = baseFunction( |
|
winX,winY,winZ, |
|
model,proj,view, |
|
ctypes.byref(objX),ctypes.byref(objY),ctypes.byref(objZ), |
|
) |
|
if not result: |
|
raise ValueError( """Projection failed!""" ) |
|
return objX.value, objY.value, objZ.value |
|
@_lazy( _simple.gluUnProject4 ) |
|
def gluUnProject4( |
|
baseFunction, |
|
winX, winY, winZ, clipW, |
|
model=None, proj=None, view=None, |
|
near=0.0, far=1.0 |
|
): |
|
"""Convenience wrapper for gluUnProject |
|
|
|
Automatically fills in the model, projection and viewing matrices |
|
if not provided. |
|
|
|
returns (objX,objY,objZ) doubles |
|
""" |
|
if model is None: |
|
model = GL.glGetDoublev( GL.GL_MODELVIEW_MATRIX ) |
|
if proj is None: |
|
proj = GL.glGetDoublev( GL.GL_PROJECTION_MATRIX ) |
|
if view is None: |
|
view = GL.glGetIntegerv( GL.GL_VIEWPORT ) |
|
objX = _simple.GLdouble( 0.0 ) |
|
objY = _simple.GLdouble( 0.0 ) |
|
objZ = _simple.GLdouble( 0.0 ) |
|
objW = _simple.GLdouble( 0.0 ) |
|
result = baseFunction( |
|
winX,winY,winZ, |
|
model,proj,view, |
|
ctypes.byref(objX),ctypes.byref(objY),ctypes.byref(objZ),ctypes.byref(objW) |
|
) |
|
if not result: |
|
raise ValueError( """Projection failed!""" ) |
|
return objX.value, objY.value, objZ.value, objW.value |
|
|
|
__all__ = ( |
|
'gluProject', |
|
'gluUnProject', |
|
'gluUnProject4', |
|
) |
|
|