コード例 #1
0
ファイル: cg1_ex4.py プロジェクト: weltenwort/uni_cg1
 def _init_callbacks(self):
     self._log.info(u"Initializing callbacks...")
     
     self._main_dispatcher       = EventDispatcher()
     self._texture_dispatcher    = EventDispatcher()
     self._object_dispatcher     = EventDispatcher()
     
     self._main_handler          = DefaultHandler(self)
     self._texture_handler       = TextureEditHandler(self, self._current_scene.children[0])
     self._object_handler        = TexturedObjectHandler(self, self._current_scene.children[1])
     
     self._main_dispatcher.push_handlers(self._main_handler)
     self._texture_dispatcher.push_handlers(self._texture_handler)
     self._object_dispatcher.push_handlers(self._object_handler)
     
     glutSetWindow(self._window)
     glutKeyboardFunc(self._main_dispatcher.handle_type('keyboard'))
     glutReshapeFunc(self._main_dispatcher.handle_type('reshape'))
     
     self._menu_main = glutCreateMenu(self._main_dispatcher.handle_type('menu'))
     glutAddMenuEntry("Quit", self._main_handler.get_menu_id('menu_quit'))
     glutAttachMenu(GLUT_RIGHT_BUTTON)
     
     glutSetWindow(self._subwindows[0])
     glutKeyboardFunc(self._main_dispatcher.handle_type('keyboard'))
     glutReshapeFunc(self._texture_dispatcher.handle_type('reshape'))
     glutMouseFunc(self._texture_dispatcher.handle_type('mouse_button'))
     glutMotionFunc(self._texture_dispatcher.handle_type('mouse_motion'))
     glutPassiveMotionFunc(self._texture_dispatcher.handle_type('mouse_motion'))
     
     self._menu_texture = glutCreateMenu(self._texture_dispatcher.handle_type('menu'))
     glutAddMenuEntry("Clear", self._texture_handler.get_menu_id('menu_clear'))
     glutAddMenuEntry("Quit", self._texture_handler.get_menu_id('menu_quit'))
     glutAttachMenu(GLUT_RIGHT_BUTTON)
     
     glutSetWindow(self._subwindows[1])
     glutKeyboardFunc(self._main_dispatcher.handle_type('keyboard'))
     glutReshapeFunc(self._object_dispatcher.handle_type('reshape'))
     glutMouseFunc(self._object_dispatcher.handle_type('mouse_button'))
     glutMotionFunc(self._object_dispatcher.handle_type('mouse_motion'))
     
     self._menu_main = glutCreateMenu(self._object_dispatcher.handle_type('menu'))
     glutAddMenuEntry("Quit", self._object_handler.get_menu_id('menu_quit'))
     glutAttachMenu(GLUT_RIGHT_BUTTON)
     
     glutTimerFunc(1, self.update, 1)
コード例 #2
0
ファイル: cg1_ex4.py プロジェクト: weltenwort/uni_cg1
class Application(object):
    def __init__(self):
        """Initialize a new application by creating a logger object and calling
        the required initialization methods.
        """
        self._init_log()
        self._init_config(['cg1_defaults.conf'])
        self._init_windows()
        self._init_scene()
        self._init_callbacks()
            
    def __del__(self):
        self._log.info(u"Exiting...")
    
    def _init_log(self):
        logging.basicConfig(level=logging.DEBUG)
        self._log = logging.getLogger("Application")
        self._log.info(u"Starting up...")
    
    def _init_config(self, default_config_files):
        self._log.info(u"Initializing configuration...")
        config_files = list(default_config_files)
        
        parser = OptionParser()
        parser.add_option('-c', '--conf', dest='config_file', default=None, help=u"config file to use (besides cg1_defaults.conf)")
        (options, args) = parser.parse_args()
        
        if options.config_file:
            config_files.append(options.config_file)
        
        self._log.info(u"Reading config files %s...", config_files)
        self._config = SafeConfigParser()
        self._config.read(config_files)
        
        self._current_texture = Image.open(self._config.get('general', 'start_texture'))
        #sys.setrecursionlimit(4000)
        #self._log.info(u"Recursion limit is now %d." % sys.getrecursionlimit())
    
    def _init_windows(self):
        self._log.info(u"Initializing windows...")
        glutInit([])
        glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
        window_width  = self._config.getint('window', 'width')
        window_height = self._config.getint('window', 'height')
        glutInitWindowSize(window_width, window_height)
        glutInitWindowPosition(self._config.getint('window', 'x'), self._config.getint('window', 'y'))
        self._window = glutCreateWindow(self._config.get('window', 'title'))
        self._subwindows = []
        gap = self._config.getint('window', 'gap')
        self._subwindows.append(glutCreateSubWindow(self._window, gap, gap, (window_width-3*gap) / 2, (window_height-2*gap)))
        self._subwindows.append(glutCreateSubWindow(self._window, (window_width-3*gap) / 2 + 2*gap, gap, (window_width-3*gap) / 2, (window_height-2*gap)))
        glutSetWindow(self._window)
    
    def _init_callbacks(self):
        self._log.info(u"Initializing callbacks...")
        
        self._main_dispatcher       = EventDispatcher()
        self._texture_dispatcher    = EventDispatcher()
        self._object_dispatcher     = EventDispatcher()
        
        self._main_handler          = DefaultHandler(self)
        self._texture_handler       = TextureEditHandler(self, self._current_scene.children[0])
        self._object_handler        = TexturedObjectHandler(self, self._current_scene.children[1])
        
        self._main_dispatcher.push_handlers(self._main_handler)
        self._texture_dispatcher.push_handlers(self._texture_handler)
        self._object_dispatcher.push_handlers(self._object_handler)
        
        glutSetWindow(self._window)
        glutKeyboardFunc(self._main_dispatcher.handle_type('keyboard'))
        glutReshapeFunc(self._main_dispatcher.handle_type('reshape'))
        
        self._menu_main = glutCreateMenu(self._main_dispatcher.handle_type('menu'))
        glutAddMenuEntry("Quit", self._main_handler.get_menu_id('menu_quit'))
        glutAttachMenu(GLUT_RIGHT_BUTTON)
        
        glutSetWindow(self._subwindows[0])
        glutKeyboardFunc(self._main_dispatcher.handle_type('keyboard'))
        glutReshapeFunc(self._texture_dispatcher.handle_type('reshape'))
        glutMouseFunc(self._texture_dispatcher.handle_type('mouse_button'))
        glutMotionFunc(self._texture_dispatcher.handle_type('mouse_motion'))
        glutPassiveMotionFunc(self._texture_dispatcher.handle_type('mouse_motion'))
        
        self._menu_texture = glutCreateMenu(self._texture_dispatcher.handle_type('menu'))
        glutAddMenuEntry("Clear", self._texture_handler.get_menu_id('menu_clear'))
        glutAddMenuEntry("Quit", self._texture_handler.get_menu_id('menu_quit'))
        glutAttachMenu(GLUT_RIGHT_BUTTON)
        
        glutSetWindow(self._subwindows[1])
        glutKeyboardFunc(self._main_dispatcher.handle_type('keyboard'))
        glutReshapeFunc(self._object_dispatcher.handle_type('reshape'))
        glutMouseFunc(self._object_dispatcher.handle_type('mouse_button'))
        glutMotionFunc(self._object_dispatcher.handle_type('mouse_motion'))
        
        self._menu_main = glutCreateMenu(self._object_dispatcher.handle_type('menu'))
        glutAddMenuEntry("Quit", self._object_handler.get_menu_id('menu_quit'))
        glutAttachMenu(GLUT_RIGHT_BUTTON)
        
        glutTimerFunc(1, self.update, 1)
    
    def _init_scene(self):
        self._current_scene = InteractivelyTexturedScene(self)
        if self._current_scene:
            self._current_scene.init()
            glutSetWindow(self._window)
            glutDisplayFunc(self._current_scene.render)
            glutSetWindow(self._subwindows[0])
            glutDisplayFunc(self._current_scene.children[0].render)
            glutSetWindow(self._subwindows[1])
            glutDisplayFunc(self._current_scene.children[1].render)
    
    def run(self):
        self._log.info(u"Running...")
        self._time = glutGet(GLUT_ELAPSED_TIME)
        glutMainLoop()
    
    def stop(self):
        self._log.info(u"Stopping...")
        sys.exit()
    
    def update(self, enabled):
        # update the current time
        time = glutGet(GLUT_ELAPSED_TIME)
        d_time = time - self._time
        self._time = time
        
        if enabled == 1:
            #self._log.debug(u"%u ms elapsed", d_time)
            
            if self._current_scene:
                self._current_scene.update(d_time)
                
        glutTimerFunc(int(1000/self._config.getint('general', 'framerate')) - (glutGet(GLUT_ELAPSED_TIME) - time), self.update, 1)