Skip to content

Converting from 1.9

See SightLab  2.0 Code Attributes and Methods for more information

For GUI based scenes with no modifications:

  • Copy assets into a new folder (default is to put 3D models into resources/environments and 360 media into resources/media)
  • Place a copy of the new SightLab_VR.py and SightLabVR_Replay.py into that folder
  • That's it for that basic setup

For scenes that have code modifications, you may need to refer to the SightLab  2.0 Code Attributes and Methods page, but here's a quick overview:

Importing SightLab

Change the typical import statements from this:

import viz, vizfx, viztask
from utils import sightlab
from settings import *

To this:

import sightlab_utils.sightlab as sl
from sightlab_utils.settings import *
  • The "viz", "vizfx" and "viztask" modules are now included with the sightlab module so do not need to be imported.
  • The sightlab module is now in "sightlab_utils" instead of "utils"
  • The entire sightlab python code exists in a central location in C:\Program Files\WorldViz\Vizard\<version>\bin\lib\site-packages\sightlab_utils, so does not need to be placed locally next to each project as before.

Creating the SightLab Instance

Change the code where the sightlab instance is created

sightlab.is_GUI = 0  # for non-GUi
sightlab.is_GUI = 1  # for using the GUI

To

sightlab = sl.SightLab(
    gui=False
)  # leave empty if running the GUI with default settings

For a list of all the attributes available on the sightlab class see section Class SightLab in SightLab  2.0 Code Attributes and Methods

Setting the Environment Object

Old method of setting the environment object

env = vizfx.addChild("utils/resources/environment/dojo.osgb")
sightlab.objects.append(env)

New Way

env = vizfx.addChild("resources/environments/dojo2.osgb")
sightlab.setEnvironment(env)

Adding Target Objects

Old way

basketball = env.getChild("basketball")
soccerball = env.getChild("soccerball")
sightlab.gazeObjectsDict = {"basketball": basketball, "soccerball": soccerball}
sightlab.grabObjectsDict = {"basketball": basketball, "soccerball": soccerball}

New way 

Either:

sightlab.addSceneObject("basketball", basketball, gaze=True, grab=True)

Or for multiple objects:

sceneDict = {'Soccerball': [True, True],
'Baseball': [True, True],'Globe': [True, True]}

for item in sceneDict:
 sightlab.addSceneObject(item, env.getChild(item), gaze = sceneDict[item][0], grab = sceneDict[item][1]) 

Running and scheduling the SightLab Experiment

Old method

def sightLabExperiment():
    while True:
        yield viztask.waitKeyDown(" ")
        viz.sendEvent(TRIAL_START_EVENT)
        print("experiment start")
        yield viztask.waitKeyDown(" ")
        viz.sendEvent(TRIAL_END_EVENT)
        print("experiment end")


viztask.schedule(sightlab.experiment)
viztask.schedule(sightLabExperiment)

New Method

def sightLabExperiment():
    while True:
        yield viztask.waitKeyDown(" ")
        yield sightlab.startTrial()
        yield viztask.waitKeyDown(" ")
        yield sightlab.endTrial()


viztask.schedule(sightlab.runExperiment)
viztask.schedule(sightLabExperiment)
  • Use yield sightlab.startTrial() to start the trial and yield sightlab.endTrial() to end it

Referencing SightLab Resources

Any references to the resources that used to use "util/resources/..." now need to use "sightlab_resources/..."

This also includes import statements (i.e. "from utils import" change to "from sightlab_utils import")

Except for the avatar head and hands and gaze point, which are referenced as:

AVATAR_HEAD_RESOURCE_PATH, AVATAR_HANDS_RESOURCE_PATH and GAZE_POINT_RESOURCE_PATH

Redirect Code from Old Example Scripts

The redirect code at the top of the old example scripts is no longer necessary, so can be removed if converting a project based on any of those files. 

Setting Condition Based on Vizconnect being Used

Old way:

if VIZCONNECT_CONFIGS[sightlab.configuration] in ['Meta Quest Pro']

New way:

if sightlab.getConfig() == "Meta Pro Body":

Setting Number of Trials

Old way

sightlab.sceneConfigDict["trials"] = 1

New way

sightlab.setTrialCount(3)

Checking which object is being Targeted

Old way:

if e.object == sightlab.gazeObjectsDict['creature1']:

New way:

if e.object == sightlab.sceneObjects[GAZE_OBJECTS][TARGET_PAINTING]:

Toggling Visibility of Overlays

Old way:

sightlab.toggleOverlays()

New way:

sightlab.toggleHUD()

Some of the overlay toggles can also be set when calling sightlab:

sightlab = sl.SightLab(
    gui=False,
    fadequad=False,
    pid=False,
    gazepointvisible=False,
    timer=False,
    console=False,
)

If not wanting to see mouse cursor

viz.mouse.setVisible(viz.OFF)

Settings

Many settings are now accessible via the sightlab object (see below). The settings file is now in the sightlab_utils folder. See the settings documentation page for more detail

Additional Changes and Notes

TRIAL_END_EVENT is now TRIAL_END

VIZCONNECT_CONFIGS is now VIZCONNECT_CONFIG

ENVIRONMENT is a constant already used, use "ENVIRONMENT_MODEL" instead

Rating Scale

yield sightlab.showRatings('how are you feeling?',ratingScale= scaleList, pauseTimer = True)
scaleList can be anything now (i.e. "A", "B", "C" or "Yes", "No")
sightlab.ratingChoice #Get a handle to the rating that is chosen

Instructions

yield sightlab.showInstructions("test")
yield viztask.waitEvent("triggerPress")
yield sightlab.hideInstructions()

Adding to the Data Files

  • addCustomFlagColumn(self, columnName)
  • addTrackingTrialDataColumn(self, columnName, trackedObject, dataType='SIXDOF', mode=4)
  • sightlab.setExperimentSummaryData('condition',condition)
  • Adding a Custom Flag

  • sightlab.setCustomTrialData('name of flag')
  • Changing Data Directories
  • sightlab.setDataDirectory()

Note: For more detailed information about all the code changes please see SightLab  2.0 Code Attributes and Methods (much of this information is duplicated there, but that page is more complete)