Grab Events
See ExampleScripts Grab_Events to see how to trigger an event when you grab an object or release it. This example will save a flag to the trial_data file with the name of the object and when it was grabbed or released along with the timestamp and the rest of the trial_data. If you have BIOPAC enabled, it will also send a synchronized event to Acqknowledge.
To set objects as grabbable can click the checkbox in the GUI for grabbable (see creating a new scene) or add to the sceneObjects Dictionairy with code:
basketball = env.getChild('basketball')
sightlab.addSceneObject('basketball',basketball,gaze = True, grab = True)
import sightlab_utils.sightlab as sl
from sightlab_utils.settings import *
from tools import grabber
sightlab = sl.SightLab()
# Constants
TRIAL_DATA_COLUMN = "grabbed item"
grabber_tool = vizconnect.getRawTool('grabber')
if not sightlab.getConfig() in ['Desktop']:
grabber_tool2 = vizconnect.getRawTool('grabber2')
def onGrab(event):
# Dynamically get the names of the objects during the event
scene_objects = sightlab.sceneObjects[GAZE_OBJECTS]
for name in scene_objects.keys():
if event.grabbed == scene_objects[name]:
sightlab.setCustomTrialData(f'Grabbed {name.capitalize()}', TRIAL_DATA_COLUMN)
print(f'grabbed {name}')
if sightlab.biopacFlag == True:
sightlab.acqServer.insertGlobalEvent(f'Grabbed {name}', 'stim', '')
def onRelease(event):
# Dynamically get the names of the objects during the event
scene_objects = sightlab.sceneObjects[GAZE_OBJECTS]
for name in scene_objects.keys():
if event.released == scene_objects[name]:
sightlab.setCustomTrialData(f'Released {name.capitalize()}', TRIAL_DATA_COLUMN)
print(f'released {name}')
if sightlab.biopacFlag == True:
sightlab.acqServer.insertGlobalEvent(f'Released {name}', 'stim', '')
def runExperiment():
while True:
yield viztask.waitKeyDown(' ')
print("Starting trial")
yield sightlab.startTrial()
viz.callback(grabber.GRAB_EVENT, onGrab)
viz.callback(grabber.RELEASE_EVENT, onRelease)
yield viztask.waitKeyDown(' ')
print("Ending trial")
yield sightlab.endTrial()
# Schedule tasks
viztask.schedule(sightlab.runExperiment)
viztask.schedule(runExperiment)
viz.callback(viz.getEventID('ResetPosition'), sightlab.resetViewPoint)