Home | Trees | Indices | Help |
|
---|
|
1 #!/usr/bin/env python 2 # 3 # The Vision Egg: SpinningDrumServer 4 # 5 # Copyright (C) 2001-2003 Andrew Straw. 6 # Author: Andrew Straw <astraw@users.sourceforge.net> 7 # URL: <http://www.visionegg.org/> 8 # 9 # Distributed under the terms of the GNU Lesser General Public License 10 # (LGPL). See LICENSE.TXT that came with this file. 11 # 12 # $Id$ 13 14 import VisionEgg, string 15 __version__ = VisionEgg.release_name 16 __cvs__ = string.split('$Revision$')[1] 17 __date__ = string.join(string.split('$Date$')[1:3], ' ') 18 __author__ = 'Andrew Straw <astraw@users.sourceforge.net>' 19 20 import sys, os, math 21 import VisionEgg.Core 22 import VisionEgg.FlowControl 23 import VisionEgg.Textures 24 import VisionEgg.PyroHelpers 25 import Pyro.core 26 27 from VisionEgg.PyroApps.ScreenPositionServer import ScreenPositionMetaController 28 from VisionEgg.PyroApps.ScreenPositionGUI import ScreenPositionParameters 29 from VisionEgg.PyroApps.SpinningDrumGUI import SpinningDrumMetaParameters 3010333 34 # get the instance of Stimulus that was created 35 assert( stimuli[0][0] == '3d_perspective' ) 36 spinning_drum = stimuli[0][1] 37 38 Pyro.core.ObjBase.__init__(self) 39 self.meta_params = SpinningDrumMetaParameters() 40 if not isinstance(screen,VisionEgg.Core.Screen): 41 raise ValueError("Expecting instance of VisionEgg.Core.Screen") 42 if not isinstance(presentation,VisionEgg.FlowControl.Presentation): 43 raise ValueError("Expecting instance of VisionEgg.FlowControl.Presentation") 44 if not isinstance(spinning_drum,VisionEgg.Textures.SpinningDrum): 45 raise ValueError("Expecting instance of VisionEgg.Textures.SpinningDrum") 46 self.p = presentation 47 self.stim = spinning_drum 48 49 screen.parameters.bgcolor = (0.5, 0.5, 0.5, 0.0) 50 51 self.p.add_controller(self.stim,'on',VisionEgg.FlowControl.FunctionController( 52 during_go_func=self.on_function_during_go, 53 between_go_func=self.on_function_between_go)) 54 55 self.p.add_controller(self.stim,'angular_position',VisionEgg.FlowControl.FunctionController( 56 during_go_func=self.angular_position_during_go, 57 between_go_func=self.angular_position_between_go))5860 self.p.remove_controller(self.stim,'on') 61 self.p.remove_controller(self.stim,'angular_position') 62 Pyro.core.ObjBase.__del__(self) # call base class6365 if t <= self.meta_params.pre_stim_sec: 66 return 0 # not on yet 67 elif t <= (self.meta_params.pre_stim_sec + self.meta_params.stim_sec): 68 return 1 # on 69 else: 70 return 0 # off again71 7476 adjusted_t = t - self.meta_params.pre_stim_sec 77 return (adjusted_t * self.meta_params.velocity_dps) + self.meta_params.startpos_deg78 81 8486 if isinstance(new_parameters, SpinningDrumMetaParameters): 87 self.meta_params = new_parameters 88 else: 89 raise ValueError("Argument to set_parameters must be instance of SpinningDrumMetaParameters") 90 self.update()9193 stim_params = self.stim.parameters # shorthand 94 meta_params = self.meta_params # shorthand 95 stim_params.contrast = meta_params.contrast 96 self.p.parameters.go_duration = ( meta_params.pre_stim_sec + meta_params.stim_sec + meta_params.post_stim_sec, 'seconds')97 100102 self.p.parameters.quit = 1105 return SpinningDrumExperimentMetaController106108 filename = os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data/panorama.jpg") 109 texture = VisionEgg.Textures.Texture(filename) 110 stimulus = VisionEgg.Textures.SpinningDrum(texture=texture) # could add shrink_texture_ok=1 111 return [('3d_perspective',stimulus)] # return ordered list of tuples112 115 116 # Don't do anything unless this script is being run 117 if __name__ == '__main__': 118 119 pyro_server = VisionEgg.PyroHelpers.PyroServer() 120 121 screen = VisionEgg.Core.Screen.create_default() 122 123 # get Vision Egg stimulus ready to go 124 stimuli = make_stimuli() 125 stimulus = stimuli[0][1] 126 temp = ScreenPositionParameters() 127 128 projection = VisionEgg.Core.PerspectiveProjection(temp.left, 129 temp.right, 130 temp.bottom, 131 temp.top, 132 temp.near, 133 temp.far) 134 viewport = VisionEgg.Core.Viewport(screen=screen,stimuli=[stimulus],projection=projection) 135 p = VisionEgg.FlowControl.Presentation(viewports=[viewport]) 136 137 # now hand over control of projection to ScreenPositionMetaController 138 projection_controller = ScreenPositionMetaController(p,projection) 139 pyro_server.connect(projection_controller,"projection_controller") 140 141 # now hand over control of drum to SpinningDrumExperimentMetaController 142 meta_controller = SpinningDrumExperimentMetaController(screen,p,stimuli) 143 pyro_server.connect(meta_controller,get_meta_controller_stimkey()) 144 145 # get listener controller and register it 146 p.add_controller(None,None, pyro_server.create_listener_controller()) 147 148 # enter endless loop 149 p.run_forever() 150
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0beta1 on Sat Jun 7 15:40:12 2008 | http://epydoc.sourceforge.net |