Hi Marcus, When a viewport is initially created, its default projection is automatically generated based on the size. If the size changes later, the projection doesn't know to change. I just checked in a change ( http://visionegg.org/trac/changeset/1507 ) that will, by default, allow the VE to detect that the size of the viewport changed and update the projection accordingly. If you update your VisionEgg/Core.py file, this should solve the issue for you. -Andrew Marcus Leinweber wrote: > Hi, > > I want to use gratingTCP.py and control the size of the patch dynamically. > > So I added: > > size_vp_controller = tcp_listener.create_tcp_controller( > tcp_name="size_vp", > initial_controller=ConstantController(during_go_value=screen.size) > ) > > And > > p.add_controller(viewport,'size', size_vp_controller) > > However, it resizes also the grating and does not clip it as I want to have > it and how it is done e.g. in grating_mult.py > > Do you have any idea how to clip the grating without resizing the stimulus? > > Thanks, > Marcus > > > > gratingTCP.py > > #!/usr/bin/env python > """Sinusoidal grating under network control.""" > > import VisionEgg > VisionEgg.start_default_logging(); VisionEgg.watch_exceptions() > > from VisionEgg.Core import * > from VisionEgg.FlowControl import Presentation, Controller, > ConstantController, EvalStringController > from VisionEgg.Gratings import * > from VisionEgg.TCPController import * > import sys > > # Vision Egg server name and port > hostname = '' > port = 5000 > > # Allow command line to override defaults > if len(sys.argv) == 2: > try: > port = int(sys.argv[1]) > except ValueError: > hostname = sys.argv[1] > elif len(sys.argv) == 3: > hostname = sys.argv[1] > port = int(sys.argv[2]) > > # See if user wants to adjust default parameters > #if VisionEgg.config.VISIONEGG_GUI_INIT: > # import VisionEgg.GUI # Could import in beginning, but no need if not > using GUI > # window = VisionEgg.GUI.GraphicsConfigurationWindow() > # window.mainloop() # All this does is adjust VisionEgg.config > # if not window.clicked_ok: > # sys.exit() # User wants to quit > > # Should do dialog here to ask for hostname and port > tcp_server = > TCPServer(hostname=hostname,port=port,single_socket_but_reconnect_ok=1,confirm_address_with_gui=0) > if tcp_server.server_socket is None: # User wants to quit > sys.exit() > tcp_listener = tcp_server.create_listener_once_connected() > > # Initialize OpenGL graphics screen. > # We don't want to use VisionEgg.get_default_screen() here because we've > already > # shown the graphics configuration window. > screen = Screen(size=(VisionEgg.config.VISIONEGG_SCREEN_W, > VisionEgg.config.VISIONEGG_SCREEN_H), > fullscreen=VisionEgg.config.VISIONEGG_FULLSCREEN, > preferred_bpp=VisionEgg.config.VISIONEGG_PREFERRED_BPP, > bgcolor=(0.5,0.5,0.5,0.0), > maxpriority=VisionEgg.config.VISIONEGG_MAXPRIORITY) > > tcp_listener.send_raw_text("Screen size = %s\n"%(screen.size,)) > > # Create controllers for all variables of a sine wave grating > on_controller = tcp_listener.create_tcp_controller( > tcp_name="on", > initial_controller=ConstantController(during_go_value=1) > ) > contrast_controller = tcp_listener.create_tcp_controller( > tcp_name="contrast", > initial_controller=ConstantController(during_go_value=1.0) > ) > center_controller = tcp_listener.create_tcp_controller( > tcp_name="center", > > initial_controller=ConstantController((screen.size[0]/2.0,screen.size[1]/2.0)) > ) > size_controller = tcp_listener.create_tcp_controller( > tcp_name="size", > > initial_controller=ConstantController(during_go_value=(screen.size[0]*2,screen.size[1]*2)) > ) > spatial_freq_controller = tcp_listener.create_tcp_controller( > tcp_name="sf", > initial_controller=ConstantController(during_go_value=15.0/640.0) > ) > temporal_freq_controller = tcp_listener.create_tcp_controller( > tcp_name="tf", > initial_controller=ConstantController(during_go_value=5.0) > ) > phase_controller = tcp_listener.create_tcp_controller( > tcp_name="phase", > initial_controller=ConstantController(during_go_value=0.0) > ) > orientation_controller = tcp_listener.create_tcp_controller( > tcp_name="orient", > initial_controller=EvalStringController(during_go_eval_string="0.0") > # > between_go_eval_string="fmod(t_abs,360.0/5.0)*5.0", > # > eval_frequency=VisionEgg.FlowControl.Controller.EVERY_FRAME, > # > temporal_variables=VisionEgg.FlowControl.Controller.TIME_SEC_ABSOLUTE) > ) > num_samples_controller = tcp_listener.create_tcp_controller( > tcp_name="num_samples", > initial_controller=ConstantController(during_go_value=512, > > return_type=ve_types.UnsignedInteger), > require_type=ve_types.UnsignedInteger, > ) > bit_depth_controller = tcp_listener.create_tcp_controller( > tcp_name="bit_depth", > initial_controller=ConstantController(during_go_value=8, > > return_type=ve_types.UnsignedInteger), > require_type=ve_types.UnsignedInteger, > ) > go_duration_controller = tcp_listener.create_tcp_controller( > tcp_name="go_duration", > initial_controller=ConstantController(during_go_value=(10,'seconds')) > ) > go_controller = tcp_listener.create_tcp_controller( > tcp_name="go", > initial_controller=ConstantController(during_go_value=0) > ) > size_vp_controller = tcp_listener.create_tcp_controller( > tcp_name="size_vp", > initial_controller=ConstantController(during_go_value=screen.size) > ) > > # Create the instance SinGrating with appropriate parameters > stimulus = SinGrating2D(anchor='center') > > # Create a viewport (with default pixel coordinate system) > # with stimulus > viewport = Viewport( screen=screen, stimuli=[stimulus]) > > # Create an instance of the Presentation class > p = Presentation(viewports=[viewport],check_events=1) > > # Register the controller functions, connecting them with the parameters they > control > p.add_controller(None,None, tcp_listener) # Actually listens to the TCP socket > p.add_controller(stimulus,'on', on_controller) > p.add_controller(stimulus,'contrast', contrast_controller) > p.add_controller(stimulus,'position', center_controller) > p.add_controller(stimulus,'size', size_controller) > p.add_controller(stimulus,'spatial_freq', spatial_freq_controller) > p.add_controller(stimulus,'temporal_freq_hz', temporal_freq_controller) > p.add_controller(stimulus,'phase_at_t0', phase_controller) > p.add_controller(stimulus,'orientation', orientation_controller) > p.add_controller(stimulus,'num_samples', num_samples_controller) > p.add_controller(stimulus,'bit_depth', bit_depth_controller) > p.add_controller(viewport,'size', size_vp_controller) > p.add_controller(p,'go_duration', go_duration_controller) > p.add_controller(p,'enter_go_loop', go_controller) > > # Go! > p.run_forever() > ==================================== > The Vision Egg mailing list > Archives: //www.freelists.org/archives/visionegg > Website: http://www.visionegg.org/mailinglist.html -- Dr. Andrew D. Straw California Institute of Technology http://www.its.caltech.edu/~astraw/ ====================================== The Vision Egg mailing list Archives: //www.freelists.org/archives/visionegg Website: http://www.visionegg.org/mailinglist.html