gluErrorString, gluNewTess, gluTessBeginContour, gluTessBeginPolygon, gluTessCallback, gluTessEndContour, gluTessEndPolygon, gluTessNormal, gluTessProperty, gluTessVertex, GLU_TESS_BEGIN, GLU_TESS_COMBINE, GLU_TESS_END, GLU_TESS_ERROR, GLU_TESS_VERTEX, GLU_TESS_WINDING_ODD, GLU_TESS_WINDING_RULE, ) class TesselateError(Exception): pass tess = gluNewTess() gluTessNormal(tess, 0, 0, 1) default_winding_rule = GLU_TESS_WINDING_ODD gluTessProperty(tess, GLU_TESS_WINDING_RULE, default_winding_rule) if sys.platform == 'win32': from ctypes import WINFUNCTYPE c_functype = WINFUNCTYPE else: c_functype = CFUNCTYPE callback_types = { GLU_TESS_VERTEX: c_functype(None, POINTER(GLvoid)), GLU_TESS_BEGIN: c_functype(None, GLenum), GLU_TESS_END: c_functype(None), GLU_TESS_ERROR: c_functype(None, GLenum), GLU_TESS_COMBINE: c_functype(
GLdouble, GLvoid, GLenum, GLfloat, pointer, \ gluNewTess, gluTessProperty, gluTessNormal, gluTessCallback, gluTessVertex, \ gluTessBeginPolygon, gluTessEndPolygon, \ gluTessBeginContour, gluTessEndContour, \ GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO, \ GLU_TESS_VERTEX, GLU_TESS_BEGIN, GLU_TESS_END, GLU_TESS_ERROR, GLU_TESS_COMBINE, \ GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_TRIANGLES, GL_LINE_LOOP if platform == "win32": from ctypes import WINFUNCTYPE as CFUNCTYPE _tessellator = gluNewTess() # Winding rule determines the regions that should be filled and those that should remain unshaded. # Winding direction is determined by the normal. gluTessProperty(_tessellator, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO) gluTessNormal(_tessellator, 0, 0, 1) # As tessellation proceeds, callback routines are called in a manner # similar to OpenGL commands glBegin(), glEdgeFlag*(), glVertex*(), and glEnd(). # The callback functions must be C functions so we need to cast our Python callbacks to C. _tessellate_callback_type = { GLU_TESS_VERTEX : CFUNCTYPE(None, POINTER(GLvoid)), GLU_TESS_BEGIN : CFUNCTYPE(None, GLenum), GLU_TESS_END : CFUNCTYPE(None), GLU_TESS_ERROR : CFUNCTYPE(None, GLenum), GLU_TESS_COMBINE : CFUNCTYPE(None, POINTER(GLdouble), POINTER(POINTER(GLvoid)), POINTER(GLfloat), POINTER(POINTER(GLvoid)))
GLdouble, GLvoid, GLenum, GLfloat, \ gluNewTess, gluTessProperty, gluTessNormal, gluTessCallback, gluTessVertex, \ gluTessBeginPolygon, gluTessEndPolygon, \ gluTessBeginContour, gluTessEndContour, \ GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO, \ GLU_TESS_VERTEX, GLU_TESS_BEGIN, GLU_TESS_END, GLU_TESS_ERROR, GLU_TESS_COMBINE, \ GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_TRIANGLES, GL_LINE_LOOP if platform == "win32": from ctypes import WINFUNCTYPE as CFUNCTYPE _tessellator = gluNewTess() # Winding rule determines the regions that should be filled and those that should remain unshaded. # Winding direction is determined by the normal. gluTessProperty(_tessellator, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO) gluTessNormal(_tessellator, 0, 0, 1) # As tessellation proceeds, callback routines are called in a manner # similar to OpenGL commands glBegin(), glEdgeFlag*(), glVertex*(), and glEnd(). # The callback functions must be C functions so we need to cast our Python callbacks to C. _tessellate_callback_type = { GLU_TESS_VERTEX: CFUNCTYPE(None, POINTER(GLvoid)), GLU_TESS_BEGIN: CFUNCTYPE(None, GLenum), GLU_TESS_END: CFUNCTYPE(None), GLU_TESS_ERROR: CFUNCTYPE(None, GLenum), GLU_TESS_COMBINE:
GL_TRIANGLES, GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, gluErrorString, gluNewTess, gluTessBeginContour, gluTessBeginPolygon, gluTessCallback, gluTessEndContour, gluTessEndPolygon, gluTessNormal, gluTessProperty, gluTessVertex, GLU_TESS_BEGIN, GLU_TESS_COMBINE, GLU_TESS_END, GLU_TESS_ERROR, GLU_TESS_VERTEX, GLU_TESS_WINDING_NONZERO, GLU_TESS_WINDING_RULE, ) class TesselateError(Exception): pass tess = gluNewTess() gluTessNormal(tess, 0, 0, 1) gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO) if sys.platform == 'win32': from ctypes import WINFUNCTYPE c_functype = WINFUNCTYPE else: c_functype = CFUNCTYPE callback_types = { GLU_TESS_VERTEX: c_functype(None, POINTER(GLvoid)), GLU_TESS_BEGIN: c_functype(None, GLenum), GLU_TESS_END: c_functype(None), GLU_TESS_ERROR: c_functype(None, GLenum), GLU_TESS_COMBINE: c_functype(