""" This module was generated by Vizconnect. Version: 1.05 Generated on: 2017-07-11 16:01:54.271000 """ import viz import vizconnect ################################# # Parent configuration, if any ################################# def getParentConfiguration(): #VC: set the parent configuration _parent = '' #VC: return the parent configuration return _parent ################################# # Pre viz.go() Code ################################# def preVizGo(): return True ################################# # Pre-initialization Code ################################# def preInit(): """Add any code here which should be called after viz.go but before any initializations happen. Returned values can be obtained by calling getPreInitResult for this file's vizconnect.Configuration instance.""" return None ################################# # Group Code ################################# def initGroups(initFlag=vizconnect.INIT_INDEPENDENT, initList=None): #VC: place any general initialization code here rawGroup = vizconnect.getRawGroupDict() #VC: return values can be modified here return None ################################# # Display Code ################################# def initDisplays(initFlag=vizconnect.INIT_INDEPENDENT, initList=None): #VC: place any general initialization code here rawDisplay = vizconnect.getRawDisplayDict() #VC: initialize a new display _name = 'main_display' if vizconnect.isPendingInit('display', _name, initFlag, initList): #VC: init the raw object if initFlag&vizconnect.INIT_RAW: #VC: set the window for the display _window = viz.MainWindow #VC: set some parameters autoDetectMonitor = True #VC: create the raw object import oculus try: display = oculus.Rift(window=_window, autoDetectMonitor=autoDetectMonitor) _window.displayNode = display except AttributeError: _window.displayNode = None rawDisplay[_name] = _window #VC: init the wrapper (DO NOT EDIT) if initFlag&vizconnect.INIT_WRAPPERS: vizconnect.addDisplay(rawDisplay[_name], _name, make='Oculus VR', model='DK2') #VC: set the parent of the node if initFlag&vizconnect.INIT_PARENTS: vizconnect.getDisplay(_name).setParent(vizconnect.getAvatar('main_avatar').getAttachmentPoint('head')) #VC: return values can be modified here return None ################################# # Tracker Code ################################# def initTrackers(initFlag=vizconnect.INIT_INDEPENDENT, initList=None): #VC: place any general initialization code here rawTracker = vizconnect.getRawTrackerDict() #VC: initialize a new tracker _name = 'head_tracker' if vizconnect.isPendingInit('tracker', _name, initFlag, initList): #VC: init the raw object if initFlag&vizconnect.INIT_RAW: #VC: set some parameters index = 0 #VC: create the raw object import oculus sensorList = oculus.getSensors() if index < len(sensorList): orientationTracker = sensorList[index] else: viz.logWarn("** WARNING: Oculus VR Rift Orientation Tracker not present.") orientationTracker = viz.addGroup() orientationTracker.invalidTracker = True rawTracker[_name] = orientationTracker #VC: init the wrapper (DO NOT EDIT) if initFlag&vizconnect.INIT_WRAPPERS: vizconnect.addTracker(rawTracker[_name], _name, make='Oculus VR', model='DK2') #VC: init the offsets if initFlag&vizconnect.INIT_OFFSETS: _link = vizconnect.getTracker(_name).getLink() #VC: clear link offsets _link.reset(viz.RESET_OPERATORS) #VC: apply offsets _link.postTrans([0, 1.8, 0]) #VC: set the parent of the node if initFlag&vizconnect.INIT_PARENTS: vizconnect.getTracker(_name).setParent(vizconnect.getTracker('mouse_orientation_group')) #VC: initialize a new tracker _name = 'mouse_orientation_group' if vizconnect.isPendingInit('tracker', _name, initFlag, initList): #VC: init the raw object if initFlag&vizconnect.INIT_RAW: #VC: set some parameters group = None #VC: create the raw object if group is None: group = viz.addGroup() rawTracker[_name] = group #VC: init the wrapper (DO NOT EDIT) if initFlag&vizconnect.INIT_WRAPPERS: vizconnect.addTracker(rawTracker[_name], _name, make='Virtual', model='Group') #VC: set the parent of the node if initFlag&vizconnect.INIT_PARENTS: vizconnect.getTracker(_name).setParent(vizconnect.getTransport('main_transport')) #VC: initialize a new tracker _name = 'mouse_orientation' if vizconnect.isPendingInit('tracker', _name, initFlag, initList): #VC: init the raw object if initFlag&vizconnect.INIT_RAW: #VC: set some parameters rotationSensitivity = 0.15 debug = False #VC: create the raw object from vizconnect.util.virtual_trackers import MouseOrientation rawTracker[_name] = MouseOrientation(rotationSensitivity=rotationSensitivity, debug=debug) #VC: init the wrapper (DO NOT EDIT) if initFlag&vizconnect.INIT_WRAPPERS: vizconnect.addTracker(rawTracker[_name], _name, make='Virtual', model='Mouse Orientation') #VC: return values can be modified here return None ################################# # Input Code ################################# def initInputs(initFlag=vizconnect.INIT_INDEPENDENT, initList=None): #VC: place any general initialization code here rawInput = vizconnect.getRawInputDict() #VC: initialize a new input _name = 'r_hand_input' if vizconnect.isPendingInit('input', _name, initFlag, initList): #VC: init the raw object if initFlag&vizconnect.INIT_RAW: #VC: create the raw object import vizjoy rawInput[_name] = vizjoy.add() #VC: init the wrapper (DO NOT EDIT) if initFlag&vizconnect.INIT_WRAPPERS: vizconnect.addInput(rawInput[_name], _name, make='Generic', model='Joystick') #VC: return values can be modified here return None ################################# # Event Code ################################# def initEvents(initFlag=vizconnect.INIT_INDEPENDENT, initList=None): #VC: place any general initialization code here rawEvent = vizconnect.getRawEventDict() #VC: return values can be modified here return None ################################# # Transport Code ################################# def initTransports(initFlag=vizconnect.INIT_INDEPENDENT, initList=None): #VC: place any general initialization code here rawTransport = vizconnect.getRawTransportDict() #VC: initialize a new transport _name = 'main_transport' if vizconnect.isPendingInit('transport', _name, initFlag, initList): #VC: request that any dependencies be created if initFlag&vizconnect.INIT_INDEPENDENT: initTrackers(vizconnect.INIT_INDEPENDENT, ['head_tracker']) #VC: init the raw object if initFlag&vizconnect.INIT_RAW: #VC: set some parameters orientationTracker = vizconnect.getTracker('head_tracker').getNode3d() debug = False acceleration = 6 maxSpeed = 4 rotationAcceleration = 60 maxRotationSpeed = 65 autoBreakingDragCoef = 1 dragCoef = 0.0001 rotationAutoBreakingDragCoef = 0.2 rotationDragCoef = 0.0001 usingPhysics = False parentedTracker = False transportationGroup = None #VC: create the raw object from transportation import wand_magic_carpet rawTransport[_name] = wand_magic_carpet.WandMagicCarpet( orientationTracker=orientationTracker, debug=debug, acceleration=acceleration, maxSpeed=maxSpeed, rotationAcceleration=rotationAcceleration, maxRotationSpeed=maxRotationSpeed, autoBreakingDragCoef=autoBreakingDragCoef, dragCoef=dragCoef, rotationAutoBreakingDragCoef=rotationAutoBreakingDragCoef, rotationDragCoef=rotationDragCoef, usingPhysics=usingPhysics, parentedTracker=parentedTracker, node=transportationGroup) #VC: init the mappings for the raw object if initFlag&vizconnect.INIT_MAPPINGS: #VC: per frame mappings if initFlag&vizconnect.INIT_MAPPINGS_PER_FRAME: #VC: get the raw input dict so we have access to signals import vizact rawInput = vizconnect.getConfiguration().getRawDict('input') #VC: set the update function which checks for input signals def update(transport): if rawInput['r_hand_input'].getPosition()[1] < -0.05:# make=Generic, model=Joystick, name=r_hand_input, signal=Analog Up transport.moveForward(mag=abs(rawInput['r_hand_input'].getPosition()[1])) if rawInput['r_hand_input'].getPosition()[1] > 0.05:# make=Generic, model=Joystick, name=r_hand_input, signal=Analog Down transport.moveBackward(mag=abs(rawInput['r_hand_input'].getPosition()[1])) if rawInput['r_hand_input'].getPosition()[0] < -0.05:# make=Generic, model=Joystick, name=r_hand_input, signal=Analog Left transport.moveLeft(mag=abs(rawInput['r_hand_input'].getPosition()[0])) if rawInput['r_hand_input'].getPosition()[0] > 0.05:# make=Generic, model=Joystick, name=r_hand_input, signal=Analog Right transport.moveRight(mag=abs(rawInput['r_hand_input'].getPosition()[0])) rawTransport[_name].setUpdateFunction(update) #VC: init the wrapper (DO NOT EDIT) if initFlag&vizconnect.INIT_WRAPPERS: vizconnect.addTransport(rawTransport[_name], _name, make='Virtual', model='WandMagicCarpet') #VC: set the parent of the node if initFlag&vizconnect.INIT_PARENTS: vizconnect.getTransport(_name).setParent(vizconnect.getRoot()) #VC: set the pivot of the node if initFlag&vizconnect.INIT_PIVOTS: vizconnect.getTransport(_name).setPivot(vizconnect.getAvatar('main_avatar').getAttachmentPoint('head').getNode3d()) #VC: return values can be modified here return None ################################# # Tool Code ################################# def initTools(initFlag=vizconnect.INIT_INDEPENDENT, initList=None): #VC: place any general initialization code here rawTool = vizconnect.getRawToolDict() #VC: return values can be modified here return None ################################# # Avatar Code ################################# def initAvatars(initFlag=vizconnect.INIT_INDEPENDENT, initList=None): #VC: place any general initialization code here rawAvatar = vizconnect.getRawAvatarDict() #VC: initialize a new avatar _name = 'main_avatar' if vizconnect.isPendingInit('avatar', _name, initFlag, initList): #VC: init the raw object if initFlag&vizconnect.INIT_RAW: #VC: set some parameters rightHandFilename = 'glove.cfg' leftHandFilename = '' #VC: create the raw object # base avatar avatar = viz.addGroup() avatar._bodyPartDict = {} avatar._handModelDict = {} # head head = viz.addGroup() head.setParent(avatar) avatar._bodyPartDict[vizconnect.AVATAR_HEAD] = head # left hand if leftHandFilename: leftHand = avatar.add(leftHandFilename) avatar.leftHandFilename = leftHandFilename else: leftHand = viz.addGroup() avatar.leftHandFilename = None leftHand.setParent(avatar) avatar._bodyPartDict[vizconnect.AVATAR_L_HAND] = leftHand # right hand if rightHandFilename: rightHand = avatar.add(rightHandFilename) avatar.rightHandFilename = rightHandFilename else: rightHand = viz.addGroup() avatar.rightHandFilename = None rightHand.setParent(avatar) avatar._bodyPartDict[vizconnect.AVATAR_R_HAND] = rightHand # done rawAvatar[_name] = avatar #VC: init the wrapper (DO NOT EDIT) if initFlag&vizconnect.INIT_WRAPPERS: vizconnect.addAvatar(rawAvatar[_name], _name, make='Generic', model='Head and Hand') #VC: init the gestures if initFlag&vizconnect.INIT_GESTURES: #VC: need to get the raw input dict so we have access to signals import vizact rawInput = vizconnect.getConfiguration().getRawDict('input') #VC: gestures for the avatar's r_hand import hand # remove the old hand rightHand = rawAvatar[_name]._bodyPartDict[vizconnect.AVATAR_R_HAND] if rightHand: rightHand.remove() # add a new hand def initHand(): sensor = hand.InputSensor() rawAvatar[_name].handSensor = sensor sensor.createHandRenderer = lambda *args,**kw: hand._InputDeviceRenderer(*args,**kw) def appliedGetData(): #VC: set the mappings for the gestures if rawInput['r_hand_input'].isButtonDown(1):# make=Generic, model=Joystick, name=r_hand_input, signal=Button 1 return (hand.GESTURE_FIST, False, False)# GESTURE_FIST #VC: end gesture mappings return (hand.GESTURE_FLAT_HAND,False,False) sensor.getData = appliedGetData file=None if hasattr(rawAvatar[_name], "rightHandFilename"): file = rawAvatar[_name].rightHandFilename return hand.HandModel(left=False, type=hand.GLOVE_5DT, file=file, sensor=sensor) rightHand = initHand() rightHand.setParent(rawAvatar[_name]) rawAvatar[_name]._bodyPartDict[vizconnect.AVATAR_R_HAND] = rightHand rawAvatar[_name]._handModelDict[vizconnect.AVATAR_R_HAND] = rightHand #VC: gestures may change the raw avatar, so refresh the raw in the wrapper vizconnect.getAvatar(_name).setRaw(rawAvatar[_name]) #VC: init the animator if initFlag&vizconnect.INIT_ANIMATOR: # need to get the raw tracker dict for animating the avatars from vizconnect.util.avatar import animator from vizconnect.util.avatar import skeleton # get the skeleton from the avatar _skeleton = skeleton.Disembodied(rawAvatar[_name]) #VC: set which trackers animate which body part # format is: bone: (tracker, parent, degrees of freedom used) _trackerAssignmentDict = { vizconnect.AVATAR_HEAD:(vizconnect.getTracker('head_tracker').getNode3d(), None, vizconnect.DOF_6DOF), } #VC: create the raw object _rawAnimator = animator.Disembodied(rawAvatar[_name], _skeleton, _trackerAssignmentDict) #VC: set animator in wrapper (DO NOT EDIT) vizconnect.getAvatar(_name).setAnimator(_rawAnimator, make='Virtual', model='Disembodied') #VC: set the parent of the node if initFlag&vizconnect.INIT_PARENTS: vizconnect.getAvatar(_name).setParent(vizconnect.getTracker('mouse_orientation_group')) #VC: set the name of the default vizconnect.setDefault('avatar', 'main_avatar') #VC: return values can be modified here return None ################################# # Application Settings ################################# def initSettings(): #VC: apply general application settings viz.mouse.setTrap(False) viz.mouse.setVisible(viz.MOUSE_AUTO_HIDE) vizconnect.setMouseTrapToggleKey('') #VC: return values can be modified here return None ################################# # Post-initialization Code ################################# def postInit(): """Add any code here which should be called after all of the initialization of this configuration is complete. Returned values can be obtained by calling getPostInitResult for this file's vizconnect.Configuration instance.""" import vizact groupTracker = vizconnect.getRawTracker('mouse_orientation_group') mouseTracker = vizconnect.getRawTracker('mouse_orientation') headTracker = vizconnect.getRawTracker('head_tracker') transport = vizconnect.getRawTransport('main_transport') avatar = vizconnect.getAvatar('main_avatar') body = avatar.getNode3d() def onUpdate(): # Set group tracker orientation equal to mouse tracker orientation, but with pitch and roll eliminated ori = mouseTracker.getEuler(viz.ABS_GLOBAL) ori = [ori[0], 0, 0] groupTracker.setEuler(ori, viz.ABS_GLOBAL) # Set transport orientation equal to group tracker orientation transport.setEuler(ori, viz.ABS_GLOBAL) # Recalculate avatar body orientation to correct for an error when transport orientation is set equal to group tracker orientation headOri = headTracker.getEuler(viz.ABS_GLOBAL) bodyYaw = ori[0] + headOri[0] if bodyYaw > 180: bodyYaw = bodyYaw - 360 bodyOri = [bodyYaw, 0, 0] body.setEuler(bodyOri, viz.ABS_GLOBAL) return None vizact.onupdate(vizconnect.PRIORITY_ANIMATOR+1, onUpdate) return None ################################# # Stand alone configuration ################################# def initInterface(): #VC: start the interface vizconnect.interface.go(__file__, live=True, openBrowserWindow=True, startingInterface=vizconnect.interface.INTERFACE_STARTUP) #VC: return values can be modified here return None ############################################### if __name__ == "__main__": initInterface() viz.add('piazza.osgb') viz.add('piazza_animations.osgb')