mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-28 06:40:33 +05:00
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
|
from OpenGL.GL import *
|
||
|
from OpenGL.GLU import *
|
||
|
from OpenGL.GLUT import *
|
||
|
|
||
|
class Window():
|
||
|
xold = -1;
|
||
|
yold = -1;
|
||
|
mode = 'r'
|
||
|
modes = {0:'r', 1:'m', 2:'z'}
|
||
|
drawfunc = None
|
||
|
mousefunc = None
|
||
|
|
||
|
def draw(self):
|
||
|
glutSetWindow(self.handle)
|
||
|
self.drawfunc()
|
||
|
|
||
|
def __init__( self, name=b"Window", width=500, height=500, drawfunc=None, mousefunc=None ):
|
||
|
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS)
|
||
|
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
|
||
|
glutInitWindowSize(width, height) # set window size
|
||
|
glutInitWindowPosition(0, 0) # set window position
|
||
|
self.handle = glutCreateWindow(b"ngs") # create window with title
|
||
|
glutMotionFunc(self.motionHandler)
|
||
|
glutMouseFunc(self.mouseHandler)
|
||
|
glutPassiveMotionFunc(self.passiveMotionHandler)
|
||
|
glMatrixMode(GL_PROJECTION);
|
||
|
glLoadIdentity();
|
||
|
pnear = 0.1;
|
||
|
pfar = 10;
|
||
|
gluPerspective(20.0, 1.0*width / height, pnear, pfar);
|
||
|
glViewport(0, 0, width, height);
|
||
|
glMatrixMode(GL_MODELVIEW);
|
||
|
self.drawfunc = drawfunc
|
||
|
self.mousefunc = mousefunc
|
||
|
if drawfunc:
|
||
|
glutDisplayFunc(self.draw) # set draw function callback
|
||
|
|
||
|
def motionHandler(self, x, y ):
|
||
|
self.mousefunc(self.xold,self.yold, x,y, self.mode) # 'm','z'
|
||
|
self.xold = x
|
||
|
self.yold = y
|
||
|
glutPostRedisplay()
|
||
|
|
||
|
def passiveMotionHandler(self, x, y ):
|
||
|
self.xold = x
|
||
|
self.yold = y
|
||
|
|
||
|
def mouseHandler(self, button, state, x, y ):
|
||
|
print(button,state,x,y)
|
||
|
if button<3:
|
||
|
if state==0:
|
||
|
self.mode = self.modes[button]
|
||
|
else:
|
||
|
self.mode = 'r'
|
||
|
|
||
|
|
||
|
glutInit("mainwin") # initialize glut
|