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