[visionegg] Re: Viewport size - grating is resized

  • From: Andrew Straw <astraw@xxxxxxxxxxx>
  • To: visionegg@xxxxxxxxxxxxx
  • Date: Thu, 09 Oct 2008 11:45:55 -0700

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

Other related posts: