|
"""GLE exceptional functions (specialised signatures""" |
|
from OpenGL.raw import GLE as raw |
|
from OpenGL.raw.GLE import annotations as _simple |
|
|
|
from OpenGL import wrapper, arrays |
|
|
|
class _lengthOfArgname( object ): |
|
"""Calculates the length of a given argname over a divisor value""" |
|
def __init__( self, arrayName, divisor, arrayType = arrays.GLdoubleArray ): |
|
self.arrayName = arrayName |
|
self.divisor = divisor |
|
self.arrayType = arrayType |
|
def finalise( self, wrapper ): |
|
self.arrayIndex = wrapper.pyArgIndex( self.arrayName ) |
|
def __call__( self, pyArgs, index, wrappedOperation ): |
|
"""Get the length of pyArgs[2], a glDoubleArray""" |
|
return self.arrayType.arraySize( pyArgs[self.arrayIndex] )//self.divisor |
|
def _baseWrap( base, lengthName='ncp', contourName='contour', divisor=2 ): |
|
"""Do the basic wrapping operation for a GLE function""" |
|
return wrapper.wrapper( base ).setPyConverter( |
|
lengthName, |
|
).setCConverter( |
|
lengthName, _lengthOfArgname( contourName, divisor, arrays.GLdoubleArray ), |
|
) |
|
|
|
gleLathe = _baseWrap( _simple.gleLathe ) |
|
glePolyCone = _baseWrap( _simple.glePolyCone, 'npoints', 'point_array', 3) |
|
glePolyCylinder = _baseWrap( _simple.glePolyCylinder, 'npoints', 'point_array', 3) |
|
gleScrew = _baseWrap( _simple.gleScrew ) |
|
gleSpiral = _baseWrap( _simple.gleSpiral ) |
|
|
|
gleExtrusion = _baseWrap( |
|
_baseWrap( _simple.gleExtrusion ), |
|
'npoints', 'point_array', 3 |
|
) |
|
gleSuperExtrusion = _baseWrap( |
|
_baseWrap( _simple.gleSuperExtrusion ), |
|
'npoints', 'point_array', 3 |
|
) |
|
gleTwistExtrusion = _baseWrap( |
|
_baseWrap( _simple.gleTwistExtrusion ), |
|
'npoints', 'point_array', 3 |
|
) |