WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Create Two sequential tasks for images in Vizard (https://forum.worldviz.com/showthread.php?t=6368)

turinlife 07-11-2021 10:24 PM

Create Two sequential tasks for images in Vizard
 
I'm new in Vizard. I'm trying to create a simple code to perform two tasks sequentially for a specific time set:

A black image for 0.8 seconds
A sequence of images (from a folder) taken randomly, for 1.5 seconds. I can perform these task separately, but I can't merge together. Suggestions are very appreciated, thank you

Code:

import viz
import vizact
import vizinfo
import random


viz.setMultiSample(4)
viz.fov(60)
viz.go()

vizinfo.InfoPanel()
viz.clearcolor(viz.BLACK)

FRAME_RATE  = 0.667      # in Hertz

r = list(range(7))
random.shuffle(r)
movieImages = viz.cycle( [ viz.addTexture('sequence_IMG/img%d.jpg' % i) for i in r ] )
screen = viz.addTexQuad()
screen.setPosition([0, 1.82, 1.5])
screen.setScale([4.0/3, 1, 1])

def executeExperiment():
    for trialNumber in range(3):
        yield Dark() #wait for doTrial to finish
        yield vizact.ontimer(1.0/FRAME_RATE, NextMovieFrame)
        print('Trial Done: ', trialNumber)

    print('done with experiment')

#Setup timer to swap texture at specified frame rate
def NextMovieFrame():
    screen.texture(movieImages.next())
   
def Dark():
    yield viztask.waitTime(1) #wait for 1 second
    viz.clearcolor(viz.BLACK)
   
vizact.ontimer(1.0/FRAME_RATE, NextMovieFrame)
viztask.schedule(executeExperiment())

:)

Jeff 07-12-2021 06:05 AM

Use viztask.waitTime instead of vizact.ontimer to wait inside of a task function. It seems like you can place the sequential actions in a single task function:
Code:

blankTexture = viz.addBlankTexture(size=(100,100))

def executeExperiment():
    for trialNumber in range(3):
        # Show blank texture for one second
        screen.texture(blankTexture)
        yield viztask.waitTime(1)

        # Show movie texture for 1.5 seconds
        screen.texture(movieImages.next())
        yield viztask.waitTime(1.5)

        print('Trial Done: ', trialNumber)
    print('done with experiment')


turinlife 07-27-2021 12:00 PM

Display random images from a folder
 
Thank you so much!
It is also possible to display the image from a folder randomly without rename all the images in the folder?
an alternative solution for this 3 lines
Code:

r = list(range(7))
random.shuffle(r)
movieImages = viz.cycle( [ viz.addTexture('sequence_IMG/img%d.jpg' % i) for i in r ] )

:confused::)


All times are GMT -7. The time now is 06:42 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC