""" pygl/dummyMG.py: CCP4MG Molecular Graphics Program Copyright (C) 2001-2008 University of York, CCLRC This library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 3, modified in accordance with the provisions of the license to address the requirements of UK law. You should have received a copy of the modified GNU Lesser General Public License along with this library. If not, copies may be downloaded from http://www.ccp4.ac.uk/ccp4license.php This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. """ import sys from pygl_coord import * from opengl import * from point_funcs import * import eventdefs import time, threading import Queue import displayobject import util import jitter import Light import clip from image_info import * import string import math import cprim, pygl_coord import glevent import os #import font_cache import xmapview class cube: p0 = Cartesian(); p1 = Cartesian(); p2 = Cartesian(); p3 = Cartesian(); p4 = Cartesian(); p5 = Cartesian(); p6 = Cartesian(); p7 = Cartesian(); def __init__(self): pass def nullfunc(): pass class GLUTThread(threading.Thread): """ An OpenGL/Glut thread class. This class is a high level self-standing data instance which uses the GLUT API to open and control a window containing an OpenGL (or similar) context. Instances of the class are intended to run in their own threads: GRAPHICS_thread = MG.GLUTThread() GRAPHICS_thread.setDaemon(1) GRAPHICS_thread.start() """ NOGRAPHICS = 1 x = 0 y = 0 pid = os.getpid() title = "CCP4 Molecular Graphics Program" + str(pid) RADIUS = 60.0 drot = (0.0,0.0,0.0) quat = pygl_coord.Quat(0.0,0.0,0.0,0) win_w = 0; win_h = 0 screen_x, screen_y = 0,0 rocking = 0 resize = 0 glready = threading.Event() glpause = threading.Event() jq = Queue.Queue(0) rotscalex = 1.0; rotscaley = 1.0 movescalex = 1.0; movescaley = 1.0 joyscalex = 0.0001; joyscaley = 0.0001; joybuttons = {} PERSPECTIVE = 0 ORTHO = 1 viewsize = 20 xyratio = 1.0 rpos = [0.0, 0.0, 0.0] dx = 0; dy = 0; dz = 0 keyleft = 0#GLUT_KEY_LEFT keyright = 0#GLUT_KEY_RIGHT keyup = 0#GLUT_KEY_UP keydown = 0#GLUT_KEY_DOWN MOUSE = 1 KEYBOARD = 2 LEFT_MOTION = 3 RIGHT_MOTION = 4 MIDDLE_MOTION = 5 WHEEL_UP = 6 WHEEL_DOWN = 7 SPECIAL = 8 MENU = 9 JOYSTICK_AXIS = 10 KEYBOARD_UP = 11 BUTTON_PRESSED = LEFT_MOTION CENTRE_ON_PRIMITIVE = 0 LABEL_PRIMITIVE = 1 NOSTEREO = 0 REDBLUE = 1 REDGREEN = 2 REDCYAN = 3 BLUERED = 4 GREENRED = 5 CYANRED = 6 QUADBUFFER = 7 SIDEBYSIDE = 8 LEFTSTEREOONLY = 10 RIGHTSTEREOONLY = 9 SHIFT = 0 CTRL = 1 ALT = 2 ROTATION_STEREO=0 SHEAR_STEREO=1 stereo_view_style = ROTATION_STEREO screenshot_filename="screendump.ppm" ps_filename="screendump.ps" ps_paper = "A4" pov_filename="screendump.pov" dumpbitmap = 0 dumpps = 0 dumppov = 0 modifiers = [0,0,0] section = 0 start_width = 100; start_height = 100 rubber_band_start = (-5,-5) rubber_band_end = (start_width+5,start_height+5) rubber_band_box = cube() near_min = 1 far_max = 1000 fog_far_max = 2000 min_slab_delta=2.0 NEAR = near_min FAR = far_max FOG_START=25 FOG_END=90 projectmode = ORTHO stereo_on = 0 stereo_mode = SIDEBYSIDE if stereo_view_style == ROTATION_STEREO: stereoseparation = 10; else: stereoseparation = 1.5; hardware_stereo_available = 0 stereo_angle = 6 shear = .02 antialias = 0 antialias_screenshot = 0 ACSIZE=15 fog_on = 1 fog_density = 0.015 fog_mode = GL_EXP2 #fog_mode = GL_LINEAR lighting = 1 IMMEDIATE = 0 DISPLAYLISTS = 1 VERTEXARRAY = 2 #rendermode = IMMEDIATE rendermode = DISPLAYLISTS draw_symmetry = 0 symm_diff_colour = 0 multiview = 0 joy_x = 0 joy_y = 0 nframes = 0 previous_frames = nframes initial_time = time.time() previous_time = initial_time show_fps = 0 show_axes = 0 moving = 0 smooth_line = 1 smooth_polygons = 0 mouse_event = [] screen_box = "" do_exit = 0 reparented = 0 diagnostic = { 'opengl':0 } set_camera_glide = 1 set_camera_reset_radius = 1 set_camera_zoom_radius = 10.0 set_camera_time = 1.0 background_alpha = 1.0 redraw = 1 keyboard_is_active = 0 special_is_active = 0 offscreen_buffer = 0 onscreen_buffer = 0 mirror_buffers = 0 default_output_buffer = 0 offscreen_buffer_override = 0 use_transparency = 0 gl_renderer = '' update_matrices = 0 click_timer = threading.Timer(0.0,nullfunc) click_timer.start() axes_x = '' axes_y = '' axes_z = '' render_quality = 0 request_render_quality = 1 fsaa_on = 0 frame_count = '-1' idle_pause = 0.2 cue_text = 1 screenshot_width = -1 screenshot_height = -1 slab_width = 6 slab_on = 0 def IdleFunction(self): return def CheckErrors(self,info=""): return def setup_colour_pointers(self): return def IsPointOnScreen(self,o): return def set_viewsize(self,viewsize=''): return def set_camera_origin(self,**keywords): return def TransformBetweenTwoViews(self,o1,o2,q1,q2): return def glutinit(self): return def TestIfGLIsBroken(self): return def __init__(self): """ Constructor, setting initial variables. """ self._stopevent = threading.Event() self._sleepperiod = 1.0 self.glevent = glevent.GLEvent(self) threading.Thread.__init__(self, name="Glut Thread") self.fps_text = '' self.fps_prim = cprim.BillBoardText(pygl_coord.Cartesian(0.02,0.02,0),self.fps_text,pygl_coord.Cartesian(0,0,0)) self.fps_prim.SetFontSize(24) """ Sets up GLUT callbacks, opens window, etc. """ #self.key_presses = IntVector(128) self.key_presses = [] for i in range(128): self.key_presses.append(0) #self.old_key_presses = IntVector(128) self.old_key_presses = [] for i in range(128): self.old_key_presses.append(0) #self.special_presses = IntVector(128) self.special_presses = [] for i in range(128): self.special_presses.append(0) #self.old_special_presses = IntVector(128) self.old_special_presses = [] for i in range(128): self.old_special_presses.append(0) self.setup_colour_pointers() if self.diagnostic['opengl']: print "%s starts" % (self.getName(),) self.win_w = self.start_width self.win_h = self.start_height import COLOUR self.bgcolor = COLOUR.COLOUR.insts.RGB("black") rgbreps = cprim.RGBReps() col = COLOUR.COLOUR.insts.RGB('default') rgbreps.AddColour('default',col[1],col[2],col[3]) exclude = [] next = COLOUR.COLOUR.insts.next('default') while exclude.count(next) == 0: col = COLOUR.COLOUR.insts.RGB(next) rgbreps.AddColour(next,col[0],col[1],col[2],col[3]) exclude.append(next) next = COLOUR.COLOUR.insts.next(next) self.dl_lines = [] self.dl_solids = [] self.rebuild_lists = 0 def Exit(self): return def clear(self): return def addobj(self,displayobj): return def deleteobj(self,id): return def registerqueue(self,jq='',interrupt=''): return def setup_clipping(self): return def initialize_clipping(self): return def get_lighting_params(self): return def set_lighting_params(self,params=[]): return def initialize_lighting(self,params=[]): return def setup_lighting(self): return def print_glinfo(self): return def simple_orient(self): return def run(self): return def join(self,timeout=None): return """ Stop the thread. Shouldn't ever get here. """ self.stop = 1; self._stopevent.set() threading.Thread.join(self, timeout) def toggle_rocking(self): return def CheckKeysAndMouseStatus(self): return def buildlist(self,listid): return def switch_projection(self): return def DrawRubberBand(self): return def SetStereoMode(self,stereo_mode): return def SetAxes(self,axes_on): return def SetFog(self,fog_on): return def SetStereo(self,stereo_on): return def BuildPrimitiveDisplayList(self): return def SetDefaultOutputBuffer(self): return def SetOffScreenBuffer(self,buffer): return def BuildLists(self,force=0): return def CalculateJitter(self): return def Jitter(self,acsize,xoff,yoff,jarray,jit,axes): return def SetTransparency(self,transparency=-1): return def drawlists(self): return def DrawPostscript(self,psfilename="",paper=""): return def DrawPovRay(self,filename=""): return def draw(self,transparent,text=0): return def draw_lines(self,transparent,text=0): return def draw_solids(self,transparent,text=0): return def setmaxviewsize(self,size): return def UnDefineSlab(self): return def DefineSlab(self,width='',turn_on='',**keywords): return def MoveSlab(self,dist): return def ExpandSlab(self,delta): return def GetWindowSize(self): return [800,800] def set_default_clip_planes(self,near,far): return def SetScreenSection(self,section): return def changeSize(self,w,h): return def applystereoshear(self,obj): return def applystereorotation(self,obj): return def copyrotation(self,obj1,obj2): return def resetrotation(self,obj): return def applyorthorotations(self,obj): return def applyrotation(self,obj): return def getaxes(self): return def setup_fog(self): return def set_colourmask(self,eye): return def DrawAxes(self,glrotmat,w,h): return def draw_scene(self,w,h): return def orient(self): return def movexyz(self,r,dr): return def calculate_extents(self): return def getdxdydz(self,dx,dy,dz): return def bgcolour(self,colour): return def zoom_camera(self,zoom): return def SetRotation(self,q=''): return def move_camera(self,dx,dy,dz): return def move_camera_scale(self,dx,dy,dz): return def rotate_camera(self,drot): return def getmodifiers(self): return def GetWorldXY(self): return def GetScreenBox(self): return def GetXYZBox(self, x, y): return def mouse(self, button, state, x, y): return def ClearMouseEvents(self): return def entry(self, state): return def keyboard_up(self, key, x, y): return def keyboard(self, key, x, y): return def special(self, key, x, y): return def special_up(self, key, x, y): return def passive(self, x, y): return def SendMotionEvent(self,dx,dy,x,y): return def motion(self, x, y): return def getxyz(self,x,y): return def get_pixdata(self): return def screenshot(self,name=""): return def request_screenshot(self,filename="screendump.ppm",antialias=0,sections=0,blocking=1,width=-1,height=-1,render_quality=1): return def request_screenshot_ps(self,filename="screendump.ps"): return def request_screenshot_pov(self,filename="screendump.pov"): return def UnPause(self): return def Pause(self,hard=0): return def Wait(self): return def Flush(self): return def set_rubber_band_start(self,x,y): return def set_rubber_band_end(self,x,y): return def define_rubber_band_cube(self): return def get_clipping_planes(self): return def get_rubber_band_planes(self): return