"""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 )