def present(self, feedback):
        self.generate_continue()
        size = (globalScreen.size[0] - self.config.textDisplayBorder,
                globalScreen.size[1] - self.config.textDisplayBorder)

        debug("presenting screen")
        feedback.registerHandler(self)
        debug("instruction <%s>" % self.instruction)
        text = WrappedText(
            text=self.instruction,
            color=(0.0, 0.0,
                   0.0),  # alpha is ignored (set with max_alpha_param)
            position=(self.config.textDisplayBorder,
                      globalScreen.size[1] - self.config.textDisplayBorder),
            size=size,
            font_size=self.config.textInstructionsSize,
            on=1,
            font_name=self.config.font)

        viewport = Viewport(screen=globalScreen,
                            size=size,
                            stimuli=[self._continue, text])

        self.updateDisplay(viewport)
        self.waitForResponse()
        feedback.detachHandler()

        viewport = Viewport(screen=globalScreen,
                            size=globalScreen.size,
                            stimuli=[])
        self.updateDisplay(viewport)
Esempio n. 2
0
def run():
    screen = Screen()
    screen.parameters.bgcolor = (0.0, 0.0, 0.0)  # black (RGB)

    dots = DotArea2D(position=(screen.size[0] / 2.0, screen.size[1] / 2.0),
                     size=(300.0, 300.0),
                     signal_fraction=0.1,
                     signal_direction_deg=180.0,
                     velocity_pixels_per_sec=10.0,
                     dot_lifespan_sec=5.0,
                     dot_size=3.0,
                     num_dots=100)

    text = Text(text="Vision Egg dot_simple_loop demo.",
                position=(screen.size[0] / 2, 2),
                anchor='bottom',
                color=(1.0, 1.0, 1.0))

    viewport = Viewport(screen=screen, stimuli=[dots, text])

    # The main loop below is an alternative to using the
    # VisionEgg.FlowControl.Presentation class.

    quit_now = 0
    while not quit_now:
        for event in pygame.event.get():
            if event.type in (QUIT, KEYDOWN, MOUSEBUTTONDOWN):
                quit_now = 1
        screen.clear()
        viewport.draw()
        swap_buffers()
    screen.close()
    def __init__(self, config, question):
        self.displayPhrase = False

        colorBlack = (0.0, 0.0, 0.0)
        answLeft, answRight = question['answers']
        answ_correct = question['correct']
        question = question['question']

        self.textAnswLeft = answLeft
        self.textAnswRight = answRight
        self.textAnswCorrect = answ_correct

        border = config.textDisplayBorder
        size = (globalScreen.size[0] - border, globalScreen.size[1] - border)
        positionQuestion = [globalScreen.size[0] / 2, globalScreen.size[1] / 2]
        positionAnswLeft = [border, border]
        positionAnswRight = [globalScreen.size[0] - border, border]

        self._question = Text(text=question,
                              color=colorBlack,
                              size=size,
                              on=1,
                              font_size=config.textQuestionSize,
                              font_name=config.font)
        positionQuestion[
            0] = positionQuestion[0] - self._question.parameters.size[0] / 2
        self._question.parameters.position = positionQuestion

        self._answLeft = Text(text=answLeft,
                              color=colorBlack,
                              size=size,
                              on=1,
                              font_size=config.textAnswerSize,
                              font_name=config.font)
        self._answLeft.parameters.position = positionAnswLeft

        self._answRight = Text(text=answRight,
                               color=colorBlack,
                               size=size,
                               on=1,
                               font_size=config.textAnswerSize,
                               font_name=config.font)
        positionAnswRight[
            0] = positionAnswRight[0] - self._answRight.parameters.size[0]
        self._answRight.parameters.position = positionAnswRight

        self._viewport = Viewport(
            screen=globalScreen,
            size=size,
            stimuli=[self._question, self._answLeft, self._answRight])
        ResponseHandler.__init__(self, config)
        EventRecorder.__init__(self)
Esempio n. 4
0
 def add_stimuli(self, *stimuli):
     """ Add additional custom stimulus objects to the list of
     stimuli. TextList instances need their own Viewport, as they
     consist of multiple stimulus objects that are deleted everytime
     they change, and so the Viewport needs to have a reference to
     the containing TextList, otherwise they get lost.
     """
     text_lists = filter(lambda s: isinstance(s, TextList), stimuli)
     if text_lists:
         for text in text_lists:
             self.add_viewport(Viewport(screen=self.screen, stimuli=text))
         stimuli = filter(lambda s: not isinstance(s, TextList), stimuli)
     stimuli = self._standard_viewport.parameters.stimuli + list(stimuli)
     if stimuli:
         self.set_stimuli(*stimuli)
    def __init__(self, config):
        Display.__init__(self, config)
        globalScreen.parameters.bgcolor = (.8, .8, .8
                                           )  # background white (RGB)

        # prepare continue instruction
        stimuli = []

        self.baseViewport = Viewport(screen=globalScreen,
                                     size=globalScreen.size,
                                     stimuli=stimuli)

        self._textWords = ""
        self.notifier = None
        self.lastWordPresentend = None
        self.updateLock = Lock()
Esempio n. 6
0
# Initialize OpenGL graphics screen.
screen = get_default_screen()

center_x = screen.size[0] / 2.0

# Create the instance SinGrating with appropriate parameters
stimulus = SinGrating2D()
text2 = Text(text="set_gamma_ramp(r,g,b):",
             position=(center_x, 0),
             anchor="bottom")
text1 = Text(text="Press - to decrease luminance range, + to increase.",
             position=(center_x, text2.parameters.size[1] + 5),
             anchor="bottom")

# Use viewport with pixel coordinate system for projection
viewport = Viewport(screen=screen, stimuli=[stimulus, text1, text2])


def quit(event):
    global p  # get presentation instance
    p.parameters.quit = 1


# set initial value
global gamma_scale
gamma_scale = 1.0


def keydown(event):
    global gamma_scale
    if event.key == pygame.locals.K_ESCAPE:
Esempio n. 7
0
        gl.glLoadIdentity()  # Clear the modelview matrix
        gl.glTranslate(viewport_with, 0, 0)
        gl.glRotate(180, 0, 1, 0)
        matrix = gl.glGetFloatv(gl.GL_MODELVIEW_MATRIX)
        gl.glPopMatrix()
        if matrix is None:
            # OpenGL wasn't started
            raise RuntimeError(
                "OpenGL matrix operations can only take place once OpenGL context started."
            )
        matrix = np.asarray(matrix)  # make sure it's numpy array
        VisionEgg.Core.ModelView.__init__(self, **{'matrix': matrix})


# Normal stuff (from grating demo):
screen = VisionEgg.Core.get_default_screen()
grating = SinGrating2D(
    position=(screen.size[0] / 2.0, screen.size[1] / 2.0),
    anchor='center',
    size=(400.0, 300.0),
    spatial_freq=10.0 / screen.size[0],  # units of cycles/pixel
    temporal_freq_hz=5.0,
    orientation=45.0)

viewport = Viewport(screen=screen, stimuli=[grating])
viewport.parameters.camera_matrix = HorizontalMirrorView(offset=screen.size[0])
p = Presentation(go_duration=(5.0, 'seconds'), viewports=[viewport])

# Go!
p.go()
Esempio n. 8
0
 def __init_viewports(self):
     """ Provide a standard viewport. """
     self._standard_viewport = Viewport(screen=self.screen)
     self.add_viewport(self._standard_viewport)
Esempio n. 9
0
    def __init_screen(self):
        ## create screen:
        if not self.fullscreen:
            os.environ['SDL_VIDEO_WINDOW_POS'] = '%d, %d' % (self.geometry[0],
                                                             self.geometry[1])
        self._screen = Screen(size=(self.geometry[2], self.geometry[3]),
                              fullscreen=self.fullscreen,
                              bgcolor=self.bg_color,
                              sync_swap=True)

        ## create letter box on top:
        self._ve_letterbox = Target2D(position=(self._centerPos[0],
                                                self.geometry[3] * (1 - 0.01) -
                                                self.letterbox_size[1] / 2.),
                                      size=(self.letterbox_size[0],
                                            self.letterbox_size[1]),
                                      color=self.phrase_color)
        self._ve_innerbox = Target2D(position=(self._centerPos[0],
                                               self.geometry[3] * (1 - 0.01) -
                                               self.letterbox_size[1] / 2.),
                                     size=(self.letterbox_size[0] - 6,
                                           self.letterbox_size[1] - 6),
                                     color=self.bg_color)

        self._current_letter_position = (self._centerPos[0],
                                         self.geometry[3] * (1 - 0.015) -
                                         self.letterbox_size[1] / 2.)
        self._ve_current_letter = Text(
            position=self._current_letter_position,
            text=(len(self._desired_letters[:1]) == 0 and " "
                  or self._desired_letters[:1]),
            font_size=self.font_size_current_letter,
            color=self.current_letter_color,
            anchor='center')

        self._ve_desired_letters = Text(
            position=(self._centerPos[0] + 5 + self.letterbox_size[0] / 2.,
                      self._current_letter_position[1]),
            text=(len(self._desired_letters[1:]) == 0 and " "
                  or self._desired_letters[1:]),
            font_size=self.font_size_phrase,
            color=self.phrase_color,
            anchor='left')

        self._ve_spelled_phrase = Text(
            position=(self._centerPos[0] - 5 - self.letterbox_size[0] / 2.,
                      self._current_letter_position[1]),
            text=(len(self._spelled_phrase) == 0 and " "
                  or self._spelled_phrase),
            font_size=self.font_size_phrase,
            color=self.phrase_color,
            anchor='right')

        # if we're in free spelling mode, we hide all text fields but
        # the _ve_spelled_phrase. we also need a multiline
        # _ve_spelled_phrase instead of the single lined one
        if self.offline == self.copy_spelling == False:
            self._spelled_phrase = "   "
            self._ve_spelled_phrase = WrappedText(
                position=(0, self._current_letter_position[1]),
                text=(len(self._spelled_phrase) == 0 and " "
                      or self._spelled_phrase),
                font_size=self.font_size_phrase,
                color=self.phrase_color,
                size=(float(self.geometry[2]), float(self.geometry[3])))
            for i in self._ve_letterbox, self._ve_innerbox, self._ve_current_letter, self._ve_desired_letters:
                i.set(on=False)

        ## add word box to elementlist:
        self._ve_elements.extend([
            self._ve_letterbox, self._ve_innerbox, self._ve_current_letter,
            self._ve_desired_letters, self._ve_spelled_phrase
        ])

        ## create countdown:
        self._ve_countdown = Text(position=self._centerPos,
                                  text=" ",
                                  font_size=self.font_size_countdown,
                                  color=self.countdown_color,
                                  anchor='center',
                                  on=False)

        ## create countdown shapes
        self._ve_countdown_shape = self.countdown_shapes[
            self.countdown_shape_select](radius=90,
                                         position=self._centerPos,
                                         color=self.countdown_shape_color,
                                         on=False)

        ## create oscillator circle:
        self._ve_oscillator = FilledCircle(position=(self.osc_size / 2 + 10,
                                                     self.osc_size / 2 + 10),
                                           radius=self.osc_size / 2,
                                           color=self.osc_color,
                                           on=False)

        ## create shapes and letters:
        self.init_screen_elements()

        ## add remaining elements to element list:
        self._ve_elements.extend([
            self._ve_countdown_shape, self._ve_countdown, self._ve_oscillator
        ])

        ## add elements to viewport:
        self._viewport = Viewport(screen=self._screen,
                                  stimuli=self._ve_elements)
        self._presentation = Presentation(viewports=[self._viewport],
                                          handle_event_callbacks=[
                                              (pygame.KEYDOWN,
                                               self.keyboard_input),
                                              (pygame.QUIT, self.__stop)
                                          ])
Esempio n. 10
0
        else:

            ns1 = Text(text=str(my_n1),
                       angle=0,
                       anchor='center',
                       position=[x * 3, y],
                       color=[255, 255, 255],
                       font_size=fontsize)
            ns2 = Text(text=str(my_n2),
                       angle=a,
                       anchor='center',
                       position=[x * 4, y],
                       color=[255, 255, 255],
                       font_size=fontsize)

        expPort = Viewport(screen=screen, stimuli=[ns1, ns2])

        print "----------------------"
        print "PROBLEM: %s" % problemString
        print "Rotated: %s" % s
        print "Larger: %s" % b
        print "----------------------"

    else:

        random.shuffle(numbers)

        ns1 = str(numbers[0])
        ns2 = str(numbers[1])

        if len(ns1) == 1:
Esempio n. 11
0
dots = DotArea2D(position=(screen.size[0] / 2.0, screen.size[1] / 2.0),
                 size=(300.0, 300.0),
                 signal_fraction=0.1,
                 signal_direction_deg=180.0,
                 velocity_pixels_per_sec=10.0,
                 dot_lifespan_sec=5.0,
                 dot_size=3.0,
                 num_dots=100)

text = Text(text="Vision Egg dot_simple_loop demo.",
            position=(screen.size[0] / 2, 2),
            anchor='bottom',
            color=(1.0, 1.0, 1.0))

viewport = Viewport(screen=screen, stimuli=[dots, text])

# The main loop below is an alternative to using the
# VisionEgg.FlowControl.Presentation class.

frame_timer = FrameTimer()
quit_now = 0
while not quit_now:
    for event in pygame.event.get():
        if event.type in (QUIT, KEYDOWN, MOUSEBUTTONDOWN):
            quit_now = 1
    screen.clear()
    viewport.draw()
    swap_buffers()
    frame_timer.tick()
frame_timer.log_histogram()
Esempio n. 12
0
stimulus = SinGrating3D(
    spatial_freq=20.0,
    temporal_freq_hz=1.0,
    upperleft=(-5, .25, -1),
    lowerleft=(-5, -.25, -1),
    lowerright=(5, -.25, -1),
    upperright=(5, .25, -1),
)

text = Text(text="Vision Egg project_linear_grating_on_cylinder demo.",
            position=(screen.size[0] / 2, 2),
            anchor='bottom',
            color=(1.0, 1.0, 1.0))

# use default 2D pixel-coordinate projection for text
overlay_viewport = Viewport(screen=screen, stimuli=[text])

num_viewports = 20
arc_degrees = 150  # angle of display

D2R = pi / 180.0
arc = arc_degrees * D2R
arc_center = arc / 2
viewport_arc = arc / num_viewports
eye = (0, 0, 0)
camera_up = (0, 1, 0)
viewports = []

# The center of the screen is looking, in 3D world coordinates, at -z,
# with +y up and +x right. In cylindrical coordinates, the -z axis
# corresponds with theta = 0 and the +y axis corresponds with +h, and
Esempio n. 13
0
    box2 = TextureStimulus(color=[1, 1, 1],
                           anchor='center',
                           position=[x * 3, y],
                           size=[boxsize, boxsize])
    ns1 = Text(text=str(n1),
               anchor='center',
               position=[x, y],
               color=[0, 0, 0],
               font_size=fontsize)
    ns2 = Text(text=str(n2),
               anchor='center',
               position=[x * 3, y],
               color=[0, 0, 0],
               font_size=fontsize)

    expPort = Viewport(screen=screen, stimuli=[box1, box2, ns1, ns2])

    subject.inputData(trial, "n1", n1)
    subject.inputData(trial, "n2", n2)
    subject.inputData(trial, "problem", problem)

    #format problem
    print "----------------------"
    print "PROBLEM: %s" % problem
    print "SOLUTION: %s " % solution
    print "----------------------"

    ns = [n1, n2]

    #default values for misfiring voice key
    misfire = 0
Esempio n. 14
0
screen = get_default_screen()
screen.parameters.bgcolor = (0.0,0.0,0.0,0.0) # make black (RGBA)

######################################
#  Create random dot stimulus        #
######################################

stimulus = DotArea2D( position                = ( screen.size[0]/2.0, screen.size[1]/2.0 ),
                      anchor                  = 'center',
                      size                    = ( 300.0 , 300.0 ),
                      signal_fraction         = 0.1,
                      signal_direction_deg    = 180.0,
                      velocity_pixels_per_sec = 10.0,
                      dot_lifespan_sec        = 5.0,
                      dot_size                = 3.0,
                      num_dots                = 100)

###############################################################
#  Create viewport - intermediary between stimuli and screen  #
###############################################################

viewport = Viewport( screen=screen, stimuli=[stimulus] )

########################################
#  Create presentation object and go!  #
########################################

p = Presentation(go_duration=(10.0,'seconds'),viewports=[viewport])
p.go()
Esempio n. 15
0
# Create the instance of TextureStimulus3D
duration = 5.0
speed = 1.0
z = duration * speed
stimulus = TextureStimulus3D(
    texture=texture,
    shrink_texture_ok=True,
    internal_format=gl.GL_RGBA,
)


def every_frame_func(t=None):
    z = t * speed - duration
    stimulus.parameters.upperleft = (-5, 1, z)
    stimulus.parameters.lowerleft = (-5, -1, z)
    stimulus.parameters.lowerright = (5, -1, z)
    stimulus.parameters.upperright = (5, 1, z)


every_frame_func(0.0)  # set initial stimulus postion

projection = SimplePerspectiveProjection(fov_x=135.0)

viewport = Viewport(screen=screen, projection=projection, stimuli=[stimulus])

p = Presentation(go_duration=(duration, 'seconds'), viewports=[viewport])
p.add_controller(None, None,
                 FunctionController(during_go_func=every_frame_func))
p.go()
Esempio n. 16
0
#!/usr/bin/env python
"""Display text strings."""

import VisionEgg
VisionEgg.start_default_logging(); VisionEgg.watch_exceptions()

from VisionEgg.Core import get_default_screen, Viewport
from VisionEgg.FlowControl import Presentation
from VisionEgg.Text import Text

screen = get_default_screen()
screen.parameters.bgcolor = (0.0,0.0,1.0) # background blue (RGB)

text = Text(text="Hello world!",
            color=(1.0,1.0,1.0), # alpha is ignored (set with max_alpha_param)
            position=(screen.size[0]/2,screen.size[1]/2),
            font_size=50,
            anchor='center')

viewport = Viewport(screen=screen,
                    size=screen.size,
                    stimuli=[text])
p = Presentation(go_duration=(5.0,'seconds'),viewports=[viewport])
p.go()
Esempio n. 17
0
VisionEgg.start_default_logging()
VisionEgg.watch_exceptions()

from VisionEgg.Core import get_default_screen, Viewport, gl
from VisionEgg.FlowControl import Presentation
from VisionEgg.Text import Text
from VisionEgg.Textures import Texture, TextureStimulus

screen = get_default_screen()
screen.parameters.bgcolor = (0.0, 0.0, 1.0)  # background blue (RGB)

orig_text = Text(
    text="Hello world!",
    color=(1.0, 1.0, 1.0),
    font_size=50,
)

arr = orig_text.parameters.texture.get_texels_as_array()  # get numpy array
arr = arr[::-1]  # flip upside down
flipped_text = TextureStimulus(
    texture=Texture(arr),
    position=(screen.size[0] / 2, screen.size[1] / 2),
    anchor='center',
    internal_format=gl.GL_RGBA,
    mipmaps_enabled=False,
)

viewport = Viewport(screen=screen, size=screen.size, stimuli=[flipped_text])
p = Presentation(go_duration=(5.0, 'seconds'), viewports=[viewport])
p.go()