File: projection.py

package info (click to toggle)
pyopengl 3.0.0~b6-3
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 5,696 kB
  • ctags: 26,182
  • sloc: python: 34,233; ansic: 70; sh: 26; makefile: 15
file content (99 lines) | stat: -rw-r--r-- 2,768 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
"""glu[Un]Project[4] convenience wrappers"""
from OpenGL.platform import GL
from OpenGL.raw import GLU as simple
from OpenGL import GL, arrays
from OpenGL.lazywrapper import 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 not result:
		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',
)