def createCalibrationCylinders(self): ############################################################## ############################################################## ## left eye and calib grid self.leftEyeProbeCylinder = vizshape.addCylinder(height=self.eyeProbeCylLength,radius=self.eyeProbeRadius,top=False,bottom=False,axis = vizshape.AXIS_X,color=viz.BLUE) self.leftEyeProbeCylinder.disable(viz.CULL_FACE) self.leftEyeProbeCylinder.visible( viz.OFF ) self.leftEyeCylinderBack = vizshape.addCircle(self.eyeProbeRadius,axis=vizshape.AXIS_X,color=viz.GREEN) self.leftEyeCylinderBack.disable(viz.CULL_FACE) self.leftEyeCylinderBack.setParent(self.leftEyeProbeCylinder) self.leftEyeCylinderBack.setPosition(self.eyeProbeCylLength/2,0,0) #self.leftEyeProbeCylinder) self.lGridVertBar = vizshape.addBox([self.probeBarWidthMM,self.eyeProbeRadius*2,self.probeBarWidthMM]) self.lGridVertBar.setParent(self.leftEyeCylinderBack) ############################################################## ############################################################## ## Draw right eye components self.rightEyeProbeCylinder = vizshape.addCylinder(height=self.eyeProbeCylLength,radius=self.eyeProbeRadius,top=False,bottom=False,axis = vizshape.AXIS_X,color=viz.BLUE) self.rightEyeProbeCylinder.disable(viz.CULL_FACE) self.rightEyeProbeCylinder.visible( viz.OFF ) self.rightEyeCylinderBack = vizshape.addCircle(self.eyeProbeRadius,axis=vizshape.AXIS_X,color=viz.GREEN) self.rightEyeCylinderBack.disable(viz.CULL_FACE) self.rightEyeCylinderBack.setParent(self.rightEyeProbeCylinder) self.rightEyeCylinderBack.setPosition(self.eyeProbeCylLength/2,0,0) #self.leftEyeProbeCylinder) self.rGridHorzBar = vizshape.addBox([self.probeBarWidthMM,self.probeBarWidthMM,self.eyeProbeRadius*2]) self.rGridHorzBar.setParent(self.rightEyeCylinderBack)
def createCalibrationCylinders(self): ############################################################## ############################################################## ## left eye and calib grid self.leftEyeProbeCylinder = vizshape.addCylinder( height=self.eyeProbeCylLength, radius=self.eyeProbeRadius, top=False, bottom=False, axis=vizshape.AXIS_X, color=viz.BLUE) self.leftEyeProbeCylinder.disable(viz.CULL_FACE) self.leftEyeProbeCylinder.visible(viz.OFF) self.leftEyeCylinderBack = vizshape.addCircle(self.eyeProbeRadius, axis=vizshape.AXIS_X, color=viz.GREEN) self.leftEyeCylinderBack.disable(viz.CULL_FACE) self.leftEyeCylinderBack.setParent(self.leftEyeProbeCylinder) self.leftEyeCylinderBack.setPosition(self.eyeProbeCylLength / 2, 0, 0) #self.leftEyeProbeCylinder) self.lGridVertBar = vizshape.addBox([ self.probeBarWidthMM, self.eyeProbeRadius * 2, self.probeBarWidthMM ]) self.lGridVertBar.setParent(self.leftEyeCylinderBack) ############################################################## ############################################################## ## Draw right eye components self.rightEyeProbeCylinder = vizshape.addCylinder( height=self.eyeProbeCylLength, radius=self.eyeProbeRadius, top=False, bottom=False, axis=vizshape.AXIS_X, color=viz.BLUE) self.rightEyeProbeCylinder.disable(viz.CULL_FACE) self.rightEyeProbeCylinder.visible(viz.OFF) self.rightEyeCylinderBack = vizshape.addCircle(self.eyeProbeRadius, axis=vizshape.AXIS_X, color=viz.GREEN) self.rightEyeCylinderBack.disable(viz.CULL_FACE) self.rightEyeCylinderBack.setParent(self.rightEyeProbeCylinder) self.rightEyeCylinderBack.setPosition(self.eyeProbeCylLength / 2, 0, 0) #self.leftEyeProbeCylinder) self.rGridHorzBar = vizshape.addBox([ self.probeBarWidthMM, self.probeBarWidthMM, self.eyeProbeRadius * 2 ]) self.rGridHorzBar.setParent(self.rightEyeCylinderBack)
def makeRail(self): rail = viz.addGroup() # Cylinders to act as the wheel tracks leftCyl = vizshape.addCylinder(height=20, radius=5, axis=vizshape.AXIS_Y, slices=20, bottom=True, top=True) m = viz.Matrix() m.postTrans(-10) leftCyl.setMatrix(m) rightCyl = vizshape.addCylinder(height=20, radius=5, axis=vizshape.AXIS_Y, slices=20, bottom=True, top=True) m = viz.Matrix() m.postTrans(10) rightCyl.setMatrix(m) # Slats slat1 = vizshape.addBox(size=(40, 5, 5), right=True, left=True, top=True, bottom=True, front=True, back=True, splitFaces=False) m = viz.Matrix() m.postTrans(0, 5, 0) slat1.setMatrix(m) slat2 = vizshape.addBox(size=(40, 5, 5), right=True, left=True, top=True, bottom=True, front=True, back=True, splitFaces=False) m = viz.Matrix() m.postTrans(0, -5, 0) slat2.setMatrix(m) leftCyl.setParent(rail) rightCyl.setParent(rail) slat1.setParent(rail) slat2.setParent(rail) return rail
def createPhysicalObjects(): global midX minLineLength = 3 maxLineGap = 0.5 edge = cv2.Canny(gray,100,200) lines = cv2.HoughLinesP(edge,1,np.pi/180,100,minLineLength,maxLineGap) noOfLines = lines.size/4 print noOfLines i = 0 while(i < noOfLines): for x1,y1,x2,y2 in lines[i]: print x1,y1,x2,y2 midX = (float(x1) + float(x2))/2 midY = (float(y1) + float(y2))/2 x = float(midX)/100 y = -float(midY)/100 angle = int(math.atan((y1-y2)/(x2-x1))*180/math.pi) #print angle box = vizshape.addBox(splitFaces=True) box.setPosition(x,y,6.0) xDiff = math.fabs(x1-x2) yDiff = math.fabs(y1-y2) square = math.pow(xDiff,2) + math.pow(yDiff,2) boxSize = math.sqrt(square)/100 box.setScale(boxSize,0.02,0.5) #box.enable(viz.SAMPLE_ALPHA_TO_COVERAGE) box.color(viz.SKYBLUE) box.collideBox() box.disable(viz.DYNAMICS) box.setEuler(0,0,angle) i+=2
def __init__(self): viz.EventClass.__init__(self) self.zones = [] for i in range(1, 101): self.zones.append(Zone(myId = i, center = [0, 0, i * 100], zoneRadius = 50.0, zoneHeight = 25)) for obj in self.zones: obj.zone.color(r = 0, g = 1.0, b = 0) obj.zone.alpha(0.8) obj.zone.setPosition(obj.getCenter()) self.player = vizshape.addBox(size = [5, 5, 5]) self.player.color([1, 0, 0]) self.playerX = 0 self.playerY = 0 self.playerZ = 0 self.inId = 0 self.callback(viz.KEYDOWN_EVENT, self.onKeyDown) self.onKeyDown(' ') self.callback(viz.TIMER_EVENT, self.onTimer) self.starttimer(1, viz.FASTEST_EXPIRATION, viz.FOREVER)
def createCollisionBody(avatar): # create collision boxes around bones that matter global collisionLimbBoxes for limbName in COLLISION_LIMBS: limb = avatar.getBone(limbName) # create box for limb limbBox = vizshape.addBox(color=viz.WHITE) limbBox.disable(viz.RENDERING) # find the right size for the box size = findBoneSize(limbName) limbBox.setScale(size) # set up collision properties # BL:start limbBox.collideBox(bounce=0.0) if limbName == "Bip01 L Forearm": leftHandIDs.append(limbBox.id) elif limbName == "Bip01 R Forearm": rightHandIDS.append(limbBox.id) # if not (limbName == 'Bip01 L Forearm' or limbName == 'Bip01 R Forearm'): else: TouchCube.disabledTouchers.append(limbBox) # BL:end # only enable collide notify when animating bone # limbBox.enable(viz.COLLIDE_NOTIFY) limbBox.disable(viz.DYNAMICS) collisionLimbBoxes.append(limbBox) pptExtension.limbBoxes = collisionLimbBoxes vizact.onupdate(0, updateCollisionBoxes, avatar) return
def createStandingBox(self): """ Draw the standing box """ boxSizeInfo = [ self.standingBoxSize_WHL[0], self.standingBoxSize_WHL[1], self.standingBoxSize_WHL[2] ] self.standingBox = vizshape.addBox(boxSizeInfo, color=viz.GREEN, splitFaces=True, back=True) self.standingBox.emissive([0, 1, 0]) self.standingBox.alpha(0.5) if (self.isLeftHanded): self.standingBoxOffset_X *= -1 self.standingBox.setPosition(float(-self.standingBoxOffset_X), self.standingBoxSize_WHL[1] / 2, .01) self.standingBox.color(1, 0, 0, node='back') self.standingBox.emissive(1, 0, 0, node='back') self.standingBox.alpha(0.7, node='back') self.standingBox.setParent(self.objects) #self.standingBox.disable(viz.CULLING) self.standingBox.disable(viz.CULL_FACE)
def __setupTracking__(self): #get mocap interface self.mocap = Connector.getMocapInterface() #Get the shutter-glass rigid body self.shutterGlass = self.mocap.returnPointerToRigid(Connector.SHUTTERGLASSES) self.head_tracker = viz.link(self.shutterGlass.vizNode,viz.NullLinkable,srcFlag=viz.ABS_PARENT) self.cave.setTracker(self.head_tracker) # Create cave view cave_origin = vizcave.CaveView(self.head_tracker) #In case you want to override & translate the physical location of cave, uncommnet this ''' origin_tracker = viztracker.KeyboardMouse6DOF() origin_link = viz.link(origin_tracker, cave_origin) origin_link.setMask(viz.LINK_POS) ''' #Foot rigidBodies leftFootRigid = self.mocap.returnPointerToRigid(Connector.L_FOOT) rightFootRigid = self.mocap.returnPointerToRigid(Connector.R_FOOT) #Foot visuals, make them 100% transparent when not in debug mode self.leftFootViz = vizshape.addBox(size=(.2,.2,.2)) self.rightFootViz = vizshape.addBox(size=(.2,.2,.2)) if(self.debug): self.leftFootViz.alpha(0.025) self.rightFootViz.alpha(0.025) else: self.leftFootViz.alpha(0.0075) self.rightFootViz.alpha(0.0075) #Foot class objects self.leftFoot = Foot(mocapFootObj = leftFootRigid, name="Left") self.rightFoot = Foot(mocapFootObj = rightFootRigid, name="Right") #setup buffer updates vizact.onupdate(0, self.leftFoot.populateNextBufferElement) vizact.onupdate(0, self.rightFoot.populateNextBufferElement) vizact.onupdate(0, self.updateBooties) viz.callback(viz.COLLIDE_BEGIN_EVENT, self.collideDetected)
def addOutsideLighting(model=MODEL, scene=viz.MainScene): scenery = vizshape.addBox([2.8, 2.8, 2.8]) scenery.emissive(viz.SLATE) scenery.setPosition([1.15, 2.34, 4.73]) tex = viz.addTexture("resources/images/sfview.png") scenery.texture(tex) scenery.disable(viz.SHADOW_CASTING) light = vizfx.addDirectionalLight(scene=SCENE) light.quadraticattenuation(1) light.intensity(0.2) light.setPosition([0.24, 2, 3.73]) light.setEuler(144, 0, 0)
def define_table(): """ Zusammenbau des Tischs. Quelle: Herr Hofmann """ table1_plate = vizshape.addBox(size=[2, 0.1, 2], pos=[0, 1, 5], alpha=1) table1_plate.collideBox() table1_plate.disable(viz.DYNAMICS) table1_foot1 = vizshape.addBox(size=[0.25, 1, 0.25], pos=[0.7, 0.5, 4.5], alpha=1) table1_foot1.collideBox() table1_foot1.disable(viz.DYNAMICS) table1_foot2 = vizshape.addBox(size=[0.25, 1, 0.25], pos=[-0.7, 0.5, 5.5], alpha=1) table1_foot2.collideBox() table1_foot2.disable(viz.DYNAMICS) table1_foot3 = vizshape.addBox(size=[0.25, 1, 0.25], pos=[-0.7, 0.5, 4.5], alpha=1) table1_foot3.collideBox() table1_foot3.disable(viz.DYNAMICS) table1_foot4 = vizshape.addBox(size=[0.25, 1, 0.25], pos=[0.7, 0.5, 5.5], alpha=1) table1_foot4.collideBox() table1_foot4.disable(viz.DYNAMICS) podest = vizshape.addBox( size=[1.3, 0.65, 1.7], #Podest für omnRobh pos=[-1.9, 0, 5.0], alpha=1) podest.color(.5, .5, .7) #KUKA-Logo logo = vizshape.addBox(size=[2.4, 2.0, 0.01], pos=[0, 4.0, 7], alpha=1) logo.texture(viz.addTexture('logo.jpg')) # Textures table1_plate.texture(viz.addTexture('Maserung.jpg')) table1_foot1.texture(viz.addTexture('Maserung.jpg')) table1_foot2.texture(viz.addTexture('Maserung.jpg')) table1_foot3.texture(viz.addTexture('Maserung.jpg')) table1_foot4.texture(viz.addTexture('Maserung.jpg'))
def massMakeBoxes(boxList): print("massMakeBozes is a go!") # Make all of the boxes needed in the trail. for x in range(9): print("making box " + str(x)) temp = vizshape.addBox([bSize, bSize, bSize], right=True, left=True, top=True, bottom=True, front=True, back=True, splitFaces=False, color=viz.GREEN) boxList.append(temp) massSetBoxPos(boxList) return boxList
def createStandingBox(self): ''' This creates a transparent box from which the subject starts each trial. Parameters of the box are typically stored in the experimetn config file. This function is typically called in room.init() ''' # Draw the standing box boxSizeInfo = [ self.standingBoxSize_WHL[0], self.standingBoxSize_WHL[1],self.standingBoxSize_WHL[2]] self.standingBox = vizshape.addBox( boxSizeInfo,color=viz.GREEN,splitFaces = True,back=True) self.standingBox.setPosition([self.standingBoxOffset_X, 0.1, self.standingBoxOffset_negZ]) self.standingBox.emissive([0,1,0]) self.standingBox.alpha(0.5) # Fix Me: Kamran self.standingBox.setParent(self.objects) self.standingBox.disable(viz.CULL_FACE)
def createStandingBox(self): # Draw the standing box boxSizeInfo = [ self.standingBoxSize_WHL[0], self.standingBoxSize_WHL[1],self.standingBoxSize_WHL[2]] self.standingBox = vizshape.addBox( boxSizeInfo,color=viz.GREEN,splitFaces = True,back=True) self.standingBox.emissive([0,1,0]) self.standingBox.alpha(0.5) if( self.isLeftHanded ): self.standingBoxOffset_X *= -1; self.standingBox.setPosition(float(-self.standingBoxOffset_X),self.standingBoxSize_WHL[1]/2,.01) self.standingBox.color(1,0,0,node='back') self.standingBox.emissive(1,0,0,node='back') self.standingBox.alpha(0.7,node='back') self.standingBox.setParent(self.objects) #self.standingBox.disable(viz.CULLING) self.standingBox.disable(viz.CULL_FACE)
def setup(avatar): global headSphere, lhSphere, rhSphere, lfSphere, rfSphere; global rhPos, lhPos, rfPos, lfPos, bodyPos; rhPos = avatar.getBone('Bip01 R Hand').getPosition(viz.ABS_GLOBAL); lhPos = avatar.getBone('Bip01 L Hand').getPosition(viz.ABS_GLOBAL); rfPos = avatar.getBone('Bip01 R Foot').getPosition(viz.ABS_GLOBAL); lfPos = avatar.getBone('Bip01 L Foot').getPosition(viz.ABS_GLOBAL); bodyPos = avatar.getBone('Bip01').getPosition(viz.ABS_GLOBAL); viz.MainView.setPosition(2.2, 0.5, -1.7) viz.MainView.setEuler(-110, 0, 0) viz.MainWindow.fov(90) grid = vizshape.addGrid(); grid.color([0.5] * 3); global bodyBox; bodyBox = vizshape.addBox(); bodyBox.setScale(0.45, 1.2, 0.35); bodyBox.visible(viz.OFF); viz.callback(viz.KEYDOWN_EVENT, onKeyDown); #link = viz.link(avatar.getBone('Bip01 Head'), viz.MainView) #link = viz.link(viz.MainView, avatar.getBone('Bip01 Head')) #link.postTrans([0, 0, -0.2]); if(DEBUG_MODE): print "adding spheres"; rhSphere = vizshape.addSphere(radius = 0.1, color = viz.WHITE); lhSphere = vizshape.addSphere(radius = 0.1, color = viz.WHITE); rfSphere = vizshape.addSphere(radius = 0.1, color = viz.WHITE); lfSphere = vizshape.addSphere(radius = 0.1, color = viz.WHITE); headSphere = vizshape.addSphere(radius = 0.1, color = viz.YELLOW); return;
def practice(): practice_text = viz.addText3D('Practice trials', pos=[-2.5, 1.7, 20]) practice_text.color(0, 0, 0) yield viztask.waitKeyDown(viz.KEY_KP_ENTER) practice_text.remove() targets = [5, 12, 24] while len(targets) > 0: global k k = 0 yield viztask.waitTime(.5) ready_text = viz.addText3D('Get ready!', pos=[-2, 1.7, 20]) ready_text.color(0, 0, 0) yield viztask.waitTime(1) ready_text.remove() yield viztask.waitTime(2) yield room() doors = [] D1 = random.choice([-4.25, -3.25, -2.25, -1.25]) D2 = random.choice([4.75, 5.75, 6.75, 7.75]) D3 = random.choice([13.75, 14.75, 15.75, 16.75]) D4 = random.choice([22.75, 23.75, 24.75, 25.75]) D5 = random.choice([31.75, 32.75, 33.75, 34.75]) L_doors = [] L_doors.append(D1) L_doors.append(D2) L_doors.append(D3) L_doors.append(D4) L_doors.append(D5) D7 = random.choice([-4.25, -3.25, -2.25, -1.25]) D8 = random.choice([4.75, 5.75, 6.75, 7.75]) D9 = random.choice([13.75, 14.75, 15.75, 16.75]) D10 = random.choice([22.75, 23.75, 24.75, 25.75]) D11 = random.choice([31.75, 32.75, 33.75, 34.75]) R_doors = [] R_doors.append(D7) R_doors.append(D8) R_doors.append(D9) R_doors.append(D10) R_doors.append(D11) people = [] P1 = random.choice( [9.25, 10.25, 11.25, 12.25, 18.25, 19.25, 20.25, 21.25]) P2 = random.choice( [27.25, 28.25, 29.25, 30.25, 36.25, 37.25, 38.25, 39.25]) L_people = [] L_people.append(P1) L_people.append(P2) P3 = random.choice( [9.25, 10.25, 11.25, 12.25, 18.25, 19.25, 20.25, 21.25]) P4 = random.choice( [27.25, 28.25, 29.25, 30.25, 36.25, 37.25, 38.25, 39.25]) R_people = [] R_people.append(P3) R_people.append(P4) targ = random.choice(targets) if targ == 5: size = .102012 if targ == 12: size = .24483 if targ == 24: size = .48966 sphere = vizshape.addSphere((size), 20, 20) sphere.color(1.02, .444, 0) sphere.setPosition([0, (size), (targ)]) shadow = vizshape.addCircle((size), 20) shadow.color( [.05, .05, .05] ) #proportion of 1 for amount of each color (red, green, blue). 0,0,0 = black, 1,1,1 = white. shadow.setEuler([0, 90, 0]) shadow.setPosition([0, .001, (targ)]) for z in np.asarray(L_doors): door = vizshape.addBox(size=[.04445, 2.13, .91]) door.texture(wood) door.setPosition([-4.9733, 1.065, float(z)]) doors.append(door) doorknob = vizshape.addSphere(radius=.045, axis=vizshape.AXIS_X) doorknob.color(viz.YELLOW) doorknob.setPosition(-4.9396, 1, (float(z) - .3364)) doors.append(doorknob) for z in np.asarray(R_doors): door = vizshape.addBox(size=[.04445, 2.13, .91]) door.texture(wood) door.setPosition([4.9683, 1.065, float(z)]) doors.append(door) doorknob = vizshape.addSphere(radius=.045, axis=vizshape.AXIS_X) doorknob.color(viz.YELLOW) doorknob.setPosition(4.9396, 1, (float(z) - .3364)) doors.append(doorknob) for z in np.asarray(L_people): x = random.choice([0, 90, 180]) person = viz.addAvatar('vcc_female.cfg', euler=(float(x), 0, 0)) person.setPosition([-4.25, 0, float(z)]) person.state(1) people.append(person) for z in np.asarray(R_people): x = random.choice([0, 180, 270]) person = viz.addAvatar('vcc_female.cfg', euler=(float(x), 0, 0)) person.setPosition([4.5, 0, float(z)]) person.state(1) people.append(person) targets.remove(targ) en_env() tic = time.time() yield viztask.waitTime( .01 ) #this is necessary to keep the headset display on for the duration of time.sleep. Can't use time.sleep for any longer than 100 ms or so bc it pauses tracking time.sleep( .09 ) #this is necessary to be as precise as possible in the display time. Still not perfect bc of unknown processing time of background functions toc = time.time() mask.enable(viz.RENDERING) dis_env() sphere.remove() shadow.remove() for door in np.asarray(doors): door.remove() for person in np.asarray(people): person.remove() yield viztask.waitTime(1) mask.disable(viz.RENDERING) print toc - tic viz.callback( viz.KEYDOWN_EVENT, KeyEvents ) #press Enter (main keyboard) if the participant misses the target and the target will be appended back into the list. yield viztask.waitKeyDown(viz.KEY_KP_ENTER) if k == 1: targets.append(targ)
def __init__(self): viz.EventClass.__init__(self) # curve that represents the track self.track = CoasterCurve() # controls the camera's view in 3rd person self.rotateView = 0 self.distView = -200 self.view = 3 # Environment map - puts the scene inside a large box and # texture maps sky images onto the six box sides. sky = viz.add(viz.ENVIRONMENT_MAP, 'sky.jpg') skybox = viz.add('skydome.dlc') skybox.texture(sky) # Create a coaster car consisting of a box with a spherical cap in front. # The front of the car faces down the -Z axis. self.car = viz.addGroup() c1 = vizshape.addBox([2, 2, 4], color=viz.GREEN) m = viz.Matrix() m.postTrans(0, 1, 0) # raise bottom of box to XY plane c1.setMatrix(m) c1.setParent(self.car) c1 = vizshape.addBox([1, 2, 1.9], color=viz.BLACK) m = viz.Matrix() m.postTrans(0, 1.5, 1) c1.setMatrix(m) c1.setParent(self.car) c2 = vizshape.addSphere(radius=1, color=viz.YELLOW) m = viz.Matrix() m.postTrans(0, 1, -2) # move to front of box c2.setMatrix(m) c2.setParent(self.car) viz.startLayer(viz.LINE_STRIP) viz.vertexColor(viz.BLACK) for i in range(1, 928): temp = self.track.getLocationAtDist(i) viz.vertex(temp) self.lineStrip = viz.endLayer() self.tunnel = vizshape.addCylinder(height=75, radius=10, bottom=False, top=False, cullFace=False) m = viz.Matrix() m.postAxisAngle(1, 0, 0, 90) m.postMult(self.track.getCurOrient()) m.postTrans(self.track.getCurLocation()) m.postTrans(75, 0, 0) self.tunnel.setMatrix(m) self.tunnelText = viz.addTexture('tunnel.jpg') self.tunnel.texture(self.tunnelText) # set key board callback function self.callback(viz.KEYDOWN_EVENT, self.onKeyDown) # call keyboard callback to initialize the view to 3rd person self.onKeyDown("3")
def createSensors(): global firstNodeBox, secondNodeBox, thirdNodeBox, fourthNodeBox, fifthNodeBox, boxEntered1, boxEntered2, boxEntered3, boxEntered4, boxEntered5 global firstProximityBox, secondProximityBox, thirdProximityBox, fourthProximityBox, fifthProximityBox #create sensors for text firstNodeBox = vizshape.addBox(size=(globals_oa.answerQuadSize),right=False,left=False,top=False,bottom=True,front=True,back=False,splitFaces=True,flipFaces=True) firstNodeBox.setPosition(globals_oa.firstQuadPosition) firstNodeBox.setEuler(globals_oa.firstQuadEuler) firstNodeBox.texture(handTexture, node='bottom') firstNodeBox.emissive(viz.WHITE) firstNodeBox.alpha(.7) firstProximityBox = vizproximity.Sensor(vizproximity.RectangleArea((.45,.45),(0,0)), source = (firstNodeBox)) secondNodeBox = vizshape.addBox(size=(globals_oa.answerQuadSize),right=False,left=False,top=False,bottom=True,front=True,back=False,splitFaces=True,flipFaces=True) secondNodeBox.texture(handTexture, node='bottom') secondNodeBox.emissive(viz.WHITE) secondNodeBox.setPosition(globals_oa.secondQuadPosition) secondNodeBox.setEuler(globals_oa.secondQuadEuler) secondNodeBox.alpha(.7) secondProximityBox = vizproximity.Sensor(vizproximity.RectangleArea((.45,.45),(0,0)), source = (secondNodeBox)) thirdNodeBox = vizshape.addBox(size=(globals_oa.answerQuadSize),right=False,left=False,top=False,bottom=True,front=True,back=False,splitFaces=True,flipFaces=True) thirdNodeBox.setPosition(globals_oa.thirdQuadPosition) thirdNodeBox.texture(handTexture, node='bottom') thirdNodeBox.emissive(viz.WHITE) thirdNodeBox.alpha(.7) thirdProximityBox = vizproximity.Sensor(vizproximity.RectangleArea((.45,.45),(0,0)), source = (thirdNodeBox)) fourthNodeBox = vizshape.addBox(size=(globals_oa.answerQuadSize),right=False,left=False,top=False,bottom=True,front=True,back=False,splitFaces=True,flipFaces=True) fourthNodeBox.texture(handTexture, node='bottom') fourthNodeBox.emissive(viz.WHITE) fourthNodeBox.setPosition(globals_oa.fourthQuadPosition) fourthNodeBox.setEuler(globals_oa.fourthQuadEuler) fourthNodeBox.alpha(.7) fourthProximityBox = vizproximity.Sensor(vizproximity.RectangleArea((.45,.45),(0,0)), source = (fourthNodeBox)) fifthNodeBox = vizshape.addBox(size=(globals_oa.answerQuadSize),right=False,left=False,top=False,bottom=True,front=True,back=False,splitFaces=True,flipFaces=True) fifthNodeBox.setPosition(globals_oa.fifthQuadPosition) fifthNodeBox.setEuler(globals_oa.fifthQuadEuler) fifthNodeBox.texture(handTexture, node='bottom') fifthNodeBox.emissive(viz.WHITE) fifthNodeBox.alpha(.7) fifthProximityBox = vizproximity.Sensor(vizproximity.RectangleArea((.45,.45),(0,0)), source = (fifthNodeBox)) #create targets # targetLeftHand = vizproximity.Target(globals_oa.lhViveTracker) # targetRightHand = vizproximity.Target(globals_oa.rhViveTracker) targetLeftHand = vizproximity.Target(globals_oa.lhModel) targetRightHand = vizproximity.Target(globals_oa.rhModel) #Create proximity manager manager = vizproximity.Manager() #Add destination sensors to manager manager.addSensor(firstProximityBox) manager.addSensor(secondProximityBox) manager.addSensor(thirdProximityBox) manager.addSensor(fourthProximityBox) manager.addSensor(fifthProximityBox) #Add viewpoint target to manager manager.addTarget(targetLeftHand) manager.addTarget(targetRightHand) manager.onEnter(None, enterProximity) manager.onExit(None, exitProximity) # vizact.onkeydown('x',manager.setDebug,viz.TOGGLE) # firstNodeBox.disable(viz.RENDERING) # secondNodeBox.disable(viz.RENDERING) # thirdNodeBox.disable(viz.RENDERING) # fourthNodeBox.disable(viz.RENDERING) # fifthNodeBox.disable(viz.RENDERING) firstNodeBox.visible(False) secondNodeBox.visible(False) thirdNodeBox.visible(False) fourthNodeBox.visible(False) fifthNodeBox.visible(False) if globals_oa.rhViveTracker is not None: vizact.onsensordown(globals_oa.rhViveTracker, steamvr.BUTTON_TRIGGER,selectAnswer) if globals_oa.lhViveTracker is not None: vizact.onsensordown(globals_oa.lhViveTracker, steamvr.BUTTON_TRIGGER,selectAnswer)
frodo = frodo + [randy2[1]] * 50 frodo = frodo + [randy2[2]] * 50 samwise = samwise + [1] * 25 samwise = samwise + [0] * 25 samwise = samwise + [1] * 25 samwise = samwise + [0] * 25 samwise = samwise + [1] * 25 samwise = samwise + [0] * 25 global phaxxe phaxxe = 0 #don't start at match ankles because there is no previous test to look at, indexing error in stepind #experimental, add lines where alpha and X should be alphal = vizshape.addBox(size=[1, 0.002, 0.001]) alphal.setPosition(0, targetUr, 0) Xl = vizshape.addBox(size=[1, 0.002, 0.001]) Xl.setPosition(0, targetXr, 0) #create latitudinal grid, "10" is the target step length, the grid expands above and belo #lines = {}#create empty dictionary #for x in range(1,12,1): # lines["Tp{0}".format(x)]=vizshape.addBox(size=[1,0.002,0.001]) # lines["Tp{0}".format(x)].setPosition(0,targetmean+0.05*targetmean+(x-1)*0.1*targetmean,0)#each gap represents 20 percent of target? # lines["Tn{0}".format(x)]=vizshape.addBox(size=[1,0.002,0.001]) # lines["Tn{0}".format(x)].setPosition(0,targetmean+0.05*targetmean-(x-1)*0.1*targetmean,0) ## print((x-1)*0.02) #global tnums #tnums = {} #for x in range(0,21,1):
viz.vertex(-4.8, 2.7, 18.9) viz.vertex(4.8, -2.7, 18.9) viz.vertex(-4.8, -2.7, 18.9) viz.vertexColor(0, 1, 0) viz.vertex(6.4, 0, 18.9) viz.vertex(-6.4, 0, 18.9) viz.vertex(0, 3.6, 18.9) viz.vertex(0, -3.6, 18.9) gridLines = viz.endLayer() squares = {} fbsquares = {} for i in range(len(position)): if i <= 11 and i != 10: squares['square' + str(i)] = vizshape.addBox(size=(size, size, 0.01), splitFaces=False, pos=position[str(i)]) #fbsquares['fbsquare'+str(i)] = vizshape.addQuad(size=(size+0.1,size+0.1), pos = position[str(i)],color = (0,0,0)) else: squares['square' + str(i)] = vizshape.addBox(size=(keepsize, keepsize, 0.01), splitFaces=False, pos=position[str(i)]) #fbsquares['fbsquare'+str(i)] = vizshape.addQuad(size=(keepsize+0.1,keepsize+0.1), pos = position[str(i)],color = (1,1,1 )) texts = {} #Set text showing on the squares for i in range(len(position)): if i <= 11 and i != 10: texts['text' + str(i)] = viz.addText(textList[str(i)].encode('utf-8'), parent=squares['square' + str(i)],
def calibration(): ''' The heart of the calibration routine. Presents points and collects data. ''' # start calibration routine and sample data n = {'subject':'calibration.should_start', 'hmd_video_frame_size':(2160,1200), 'outlier_threshold':35} print(send_recv_notification(n)) ref_data = [] yield showMessage('Zum Starten die Leertaste drücken') for p in norm_positions: print('calibration point: ', p) norm_x = p[0] norm_y = p[1] first_run = True if first_run: first_run = False '''set up a plane 'right in front of user' on which we want to project the dots''' # target the current center of view p_line = viz.MainWindow.screenToWorld(.5, .5) # let's modify the line and call it line 2. Here we let the line end at the "depth" value p_line_2 = viz.Line(begin=p_line.begin, end=p_line.end, dir=p_line.dir, length=depth) # Add the plane and apply the matrix of our viewpoint to the plane plane = vizshape.addBox(size=[3.6, 2, .1]) mymat = viz.MainView.getMatrix() plane.setMatrix(mymat) # Reposition the plane to the end of line 2 plane.setPosition(p_line_2.end) plane.color([.25,.25,.25]) plane.alpha(.95) # Lock it to user plane_link = viz.grab(viz.MainView, plane) # interpolate a line from norm values to 3d coordinates line = viz.MainWindow.screenToWorld([norm_x, norm_y]) # find the intersection intersection = viz.intersect(line.begin, line.end) # place a dot (at depth level of line) dot = vizshape.addSphere(radius=sphere_size) dot.setPosition(intersection.point) # lock dot to user view_link = viz.grab(viz.MainView, dot) print('ready') viz.playSound('beep500_200.wav') yield viztask.waitKeyDown(' ') for s in range(60): # get the current pupil time (pupil uses CLOCK_MONOTONIC with adjustable timebase). # You can set the pupil timebase to another clock and use that. t = get_pupil_timestamp() # here the left and right screen marker positions are identical. datum0 = {'norm_pos':p,'timestamp':t,'id':0} datum1 = {'norm_pos':p,'timestamp':t,'id':1} ref_data.append(datum0) ref_data.append(datum1) yield viztask.waitTime(1/60.) print(t) dot.color(viz.RED) print('waiting for next position...') yield viztask.waitKeyDown(' ') yield dot.remove() # send ref data to Pupil Capture/Service: # this notification can be sent once at the end or multiple times. # during one calibraiton all new data will be appended. n = {'subject':'calibration.add_ref_data','ref_data':ref_data} print(send_recv_notification(n)) # stop calibration # pupil will correlate pupil and ref data based on timestamps, # compute the gaze mapping params, and start a new gaze mapper. n = {'subject':'calibration.should_stop'} print(send_recv_notification(n)) time.sleep(2) showMessage('calibration done! - now validate!') plane.remove() yield viztask.waitTime(2)
def _createVizNode(self, shape, size): if (shape == 'box'): print 'Making box vizNode' if (type(size) == float or len(size) != 3): print '**********Invalid size for ' + self.fileName print 'Check rigidBodySizesString. Expected 3 val for box: height,width,length.' print 'Got: ' + str(size) import winsound winsound.Beep(1000, 250) self.vizNode = vizshape.addBox(size, alpha=0.7, color=viz.RED) return elif (shape == 'sphere'): if (type(size) != float): # accept a float print '**********Invalid size for ' + self.fileName print 'Check rigidBodySizesString. Expected 1 val for sphere: radius' print 'Got: ' + str(size) import winsound winsound.Beep(1000, 250) print 'Making sphere vizNode' self.vizNode = vizshape.addSphere(radius=float(size), alpha=0.7, color=viz.BLUE) elif (shape == 'cylinder'): if (type(size) == float or len(size) != 2): print '**********Invalid size for ' + self.fileName print 'Check rigidBodySizesString. Expected 2 val for cylinder: height,radius' print 'Got: ' + str(size) import winsound winsound.Beep(1000, 250) print 'Making cylinder vizNode' # height, rad, self.vizNode = vizshape.addCylinder(height=size[0], radius=size[1], alpha=0.3, color=viz.YELLOW, axis=vizshape.AXIS_X) #self.vizNode.setAxisAngle(1,0,0,90) if (self.vizNode): self.vizNode.disable(viz.CULL_FACE) if (self.isVisible): self.vizNode.visible(viz.ON) #Make the object visible. else: self.vizNode.visible(viz.OFF) #Make the object invisible. print self.fileName + ' vizNode created, but not set as visible' self.physNode = self.vizNode.collideMesh() else: print 'Problem creating viz node' import winsound winsound.Beep(1000, 250)
def trial_down (): global k k = 0 global x x = 0 for i in range (100): yield viztask.waitTime(.5) ready_text = viz.addText3D('Get ready!',pos = [-2,1.7,20]) ready_text.color(0,0,0) yield viztask.waitTime(1) ready_text.remove () yield viztask.waitTime(2) yield room () doors = [] D1 = random.choice([-4.25,-3.25,-2.25,-1.25]) D2 = random.choice([4.75,5.75,6.75,7.75]) D3 = random.choice([13.75,14.75,15.75,16.75]) D4 = random.choice([22.75,23.75,24.75,25.75]) D5 = random.choice([31.75,32.75,33.75,34.75]) L_doors = [] L_doors.append(D1) L_doors.append(D2) L_doors.append(D3) L_doors.append(D4) L_doors.append(D5) D7 = random.choice([-4.25,-3.25,-2.25,-1.25]) D8 = random.choice([4.75,5.75,6.75,7.75]) D9 = random.choice([13.75,14.75,15.75,16.75]) D10 = random.choice([22.75,23.75,24.75,25.75]) D11 = random.choice([31.75,32.75,33.75,34.75]) R_doors = [] R_doors.append(D7) R_doors.append(D8) R_doors.append(D9) R_doors.append(D10) R_doors.append(D11) people = [] P1 = random.choice([9.25,10.25,11.25,12.25,18.25,19.25,20.25,21.25]) P2 = random.choice([27.25,28.25,29.25,30.25,36.25,37.25,38.25,39.25]) L_people = [] L_people.append(P1) L_people.append(P2) P3 = random.choice([9.25,10.25,11.25,12.25,18.25,19.25,20.25,21.25]) P4 = random.choice([27.25,28.25,29.25,30.25,36.25,37.25,38.25,39.25]) R_people = [] R_people.append(P3) R_people.append(P4) targ = random.choice(targets) if targ == 2.5: size = .051006 if targ == 3.5: size = .071409 if targ == 4.8: size = .097932 if targ == 6.2: size = .126495 if targ == 7.6: size = .155059 if targ == 9: size = .183622 if targ == 10.4: size = .212186 if targ == 11.8: size = .240749 if targ == 13.2: size = .269313 if targ == 14.6: size = .297876 if targ == 17.4: size = .355003 if targ == 20.2: size = .41213 if targ == 23: size = .469257 if targ == 25.8: size = .526384 if targ == 30: size = .612075 if targ == 38: size = .775295 print targ sphere = vizshape.addSphere((size),20,20) sphere.color(1.02,.444,0) sphere.setPosition([0,(size),(targ)]) shadow = vizshape.addCircle((size),20) shadow.color([.05,.05,.05]) #proportion of 1 for amount of each color (red, green, blue). 0,0,0 = black, 1,1,1 = white. shadow.setEuler([0,90,0]) shadow.setPosition([0,.001,(targ)]) for z in np.asarray(L_doors): door = vizshape.addBox(size=[.04445,2.13,.91]) door.texture(wood) door.setPosition([-4.9733,1.065,float(z)]) doors.append(door) doorknob = vizshape.addSphere(radius=.045,axis=vizshape.AXIS_X) doorknob.color(viz.YELLOW) doorknob.setPosition(-4.9396,1,(float(z)-.3364)) doors.append(doorknob) for z in np.asarray(R_doors): door = vizshape.addBox(size=[.04445,2.13,.91]) door.texture(wood) door.setPosition([4.9683,1.065,float(z)]) doors.append(door) doorknob = vizshape.addSphere(radius=.045,axis=vizshape.AXIS_X) doorknob.color(viz.YELLOW) doorknob.setPosition(4.9396,1,(float(z)-.3364)) doors.append(doorknob) for z in np.asarray(L_people): o = random.choice([0,90,180]) person = viz.addAvatar('vcc_female.cfg',euler=(float(o),0,0)) person.setPosition([-4.25,0,float(z)]) person.state(1) people.append(person) for z in np.asarray(R_people): o = random.choice([0,180,270]) person = viz.addAvatar('vcc_female.cfg',euler=(float(o),0,0)) person.setPosition([4.5,0,float(z)]) person.state(1) people.append(person) en_env() tic = time.time() yield viztask.waitTime(.01) time.sleep(.09+x) toc = time.time () mask.enable(viz.RENDERING) dis_env() sphere.remove () shadow.remove () for door in np.asarray(doors): door.remove() for person in np.asarray(people): person.remove() yield viztask.waitTime(1) mask.disable(viz.RENDERING) print toc - tic viz.callback(viz.KEYDOWN_EVENT,KeyEvents) yield viztask.waitKeyDown(viz.KEY_KP_ENTER) if k == 1: break times.append((toc - tic)+.01) print times
def makeBasicVisNode(self): # Returns a pointer to a vizshape object # This is added to the room.objects parent new_vis_node = [] if self.shape == 'box': # print 'Making box visNode' if type(self.size) == float or len(self.size) != 3: print '**********Invalid size for box' print 'Check rigidBodySizesString. Expected 3 val for box: height,width,length.' print 'Got: ' + str(self.size) import winsound winsound.Beep(1000, 250) lwh = [self.size[1], self.size[2], self.size[0]] new_vis_node = vizshape.addBox(lwh, alpha=self.alpha, color=viz.RED) elif self.shape == 'sphere': if type(self.size) == list and len(self.size) == 1: self.size = float(self.size[0]) if type(self.size) != float: # accept a float print '**********Invalid size for sphere' print 'Check rigidBodySizesString. Expected 1 val for sphere: radius' print 'Got: ' + str(self.size) import winsound winsound.Beep(1000, 250) # print 'Making sphere visNode' new_vis_node = vizshape.addSphere(radius=float(self.size), alpha=self.alpha, color=viz.BLUE, slices=10, stacks=10) elif 'cylinder' in self.shape: if type(self.size) == float or len(self.size) != 2: print '**********Invalid size for cylinder' print 'Check rigidBodySizesString. Expected 2 val for cylinder: height,radius' print 'Got: ' + str(self.size) import winsound winsound.Beep(1000, 250) # print 'Making cylinder visNode' if self.shape[-2:] == '_X' or self.shape[-2:] == '_Y' or self.shape[-2:] == '_Z': axis_string = 'vizshape.AXIS' + self.shape[-2:] print axis_string + axis_string + axis_string + axis_string eval_string = 'vizshape.addCylinder(height=self.size[0],radius=self.size[1], ' \ 'alpha = self.alpha,color=viz.BLUE,axis=' + axis_string + ')' new_vis_node = eval(eval_string) else: new_vis_node = vizshape.addCylinder(height=self.size[0], radius=self.size[1], alpha=self.alpha, color=viz.BLUE, axis=vizshape.AXIS_Y) if new_vis_node: self.vis_node = new_vis_node else: print 'vizEnv.room.makeBasicVisNode(): Unable to create visNode' import winsound winsound.Beep(1000, 250) # if(self.parentRoom): new_vis_node.setParent(self.parent_room.objects)
global viewLink viewLink = viz.link(navigationNode, viz.MainView) global beltspeed beltspeed = 1 #units must be meters/second #hmrl = viz.addChild('HMRL8.osgb') #hmrl.setPosition(0,0,0) #hmrl.setEuler(90,270,0) #hmrl.setScale(0.01,0.01,0.01) #create optic flow rt = {} tlocs = {} for x in range(1,50,1): rt["T{0}".format(x)]=vizshape.addBox(size=[0.1,0.1,0.1]) rt["T{0}".format(x)].setPosition(0.462,0,2*x) tlocs["T{0}".format(x)]=2*x rt["T{0}".format(x)].color(1,1,1) # rt["T{0}".format(x)].disable(viz.LIGHTING) r2t = {} t2locs = {} for x in range(1,50,1): r2t["T{0}".format(x)]=vizshape.addBox(size=[0.1,0.1,0.1]) r2t["T{0}".format(x)].setPosition(0.462,3,2*x) t2locs["T{0}".format(x)]=2*x r2t["T{0}".format(x)].color(1,1,1) r3t = {} t3locs = {}
def addThirdArm(avatar): global isCube1, isCube2, thirdArm # For horn: # # EXTENSION: Add third arm # TAH_HEIGHT = 0.2 # TAH_TOP_RADIUS = 0.02 # TAH_BOTTOM_RADIUS = 0.01 # TA_HEIGHT = 2.0 # TA_POPPER_HEIGHT = 1.0 # TA_RADIUS = 0.015 # thirdArmCHorn = vizshape.addCylinder(height=TAH_HEIGHT, topRadius=TAH_TOP_RADIUS, bottomRadius=TAH_BOTTOM_RADIUS) # # # To attach arm to chest: # tahCLink = viz.link(avatar.getBone('Bip01 Spine'), thirdArmCHorn, mask=viz.LINK_POS) # tahCLink.preTrans([0, 0.3, 0.1], 0) # #tahCLink.preEuler([0, 90, 0], 1) # # thirdArmC = viz.addGroup() # thirdArmLimbC = vizshape.addCone(TA_RADIUS, TA_HEIGHT) # #thirdArmLimbC.setParent(thirdArmC) # tacLink = viz.link(thirdArmC, thirdArmLimbC, priority=1) # tacLink.preEuler([0,90,0], 0) # tacLink.preTrans([0, TA_HEIGHT / 2, 0], 1) # #thirdArmLimbC.setPosition(0, TA_HEIGHT / 2, 0, mode=viz.ABS_PARENT) # thirdArmC.setParent(thirdArmCHorn) # thirdArmC.setPosition(0, TAH_HEIGHT / 2, 0, mode=viz.ABS_PARENT) # thirdArmC.color(0,1,0) # # # Add third arm collision box # thirdArmLimbC.collideBox() # thirdArmLimbC.disable(viz.DYNAMICS) # TouchCube.thirdArm = thirdArmLimbC # For Arm: thirdArmHorn = viz.addGroup() thirdArm = viz.addChild(resources.ARM_MODEL) thirdArm.setScale(resources.ARM_SCALE) thirdArm.setParent(thirdArmHorn) tahLink = viz.link(avatar.getBone('Bip01 Spine'), thirdArmHorn) tahLink.preTrans([0, 0.3, 0.1], 0) tahLink.preEuler([-90, 0, 0], 1) box = vizshape.addBox(size=(1, 1, 1)) spherelink = viz.link(thirdArmHorn, box) #spherelink.preTrans([0, 0, -1], 1) # Add third arm collision box # collide = vizshape.addBox(thirdArm.getBoundingBox().getSize()) # center = thirdArm.getBoundingBox().getCenter() # collide.setCenter(center[0] + 0.65, center[1] + 0.08, center[2]) # #collide.setParent(thirdArm) # colLink1 = viz.link(avatar.getBone('Bip01 Spine'), collide, priority=0) # colLink2 = viz.link(thirdArm, collide, priority=1, mask=viz.LINK_ORI) # colLink1.preTrans([0, 0.3, 0.1], 0) # colLink2.postEuler([-90, 0, 0], 1) # collide.collideBox() # collide.alpha(0.5) thirdArm.collideBox() thirdArm.disable(viz.DYNAMICS) TouchCube.thirdArm = thirdArm # EXTENSION: Add third arm movement via intersense cube isense = viz.add('intersense.dle') isCube1 = isense.addTracker(port=4) isCube2 = isense.addTracker(port=5) # Link cubes pptextension.isCube1 = isCube1 pptextension.isCube2 = isCube2 # Setup thirdarm updating. vizact.onupdate(0, updateThirdArm)
global viewLink viewLink = viz.link(navigationNode, viz.MainView) global beltspeed beltspeed = 1 #units must be meters/second #hmrl = viz.addChild('HMRL8.osgb') #hmrl.setPosition(0,0,0) #hmrl.setEuler(90,270,0) #hmrl.setScale(0.01,0.01,0.01) #create optic flow rt = {} tlocs = {} for x in range(1, 50, 1): rt["T{0}".format(x)] = vizshape.addBox(size=[0.1, 0.1, 0.1]) rt["T{0}".format(x)].setPosition(0.462, 0, 2 * x) tlocs["T{0}".format(x)] = 2 * x rt["T{0}".format(x)].color(1, 1, 1) # rt["T{0}".format(x)].disable(viz.LIGHTING) r2t = {} t2locs = {} for x in range(1, 50, 1): r2t["T{0}".format(x)] = vizshape.addBox(size=[0.1, 0.1, 0.1]) r2t["T{0}".format(x)].setPosition(0.462, 3, 2 * x) t2locs["T{0}".format(x)] = 2 * x r2t["T{0}".format(x)].color(1, 1, 1) r3t = {} t3locs = {}
def view(): yield room() doors = [] D1 = random.choice([-4.25, -3.25, -2.25, -1.25]) D2 = random.choice([4.75, 5.75, 6.75, 7.75]) D3 = random.choice([13.75, 14.75, 15.75, 16.75]) D4 = random.choice([22.75, 23.75, 24.75, 25.75]) D5 = random.choice([31.75, 32.75, 33.75, 34.75]) L_doors = [] L_doors.append(D1) L_doors.append(D2) L_doors.append(D3) L_doors.append(D4) L_doors.append(D5) D7 = random.choice([-4.25, -3.25, -2.25, -1.25]) D8 = random.choice([4.75, 5.75, 6.75, 7.75]) D9 = random.choice([13.75, 14.75, 15.75, 16.75]) D10 = random.choice([22.75, 23.75, 24.75, 25.75]) D11 = random.choice([31.75, 32.75, 33.75, 34.75]) R_doors = [] R_doors.append(D7) R_doors.append(D8) R_doors.append(D9) R_doors.append(D10) R_doors.append(D11) people = [] P1 = random.choice([-3.75, -2.75, -1.75, .75, 1.75, 2.75, 3.75, 5.25]) P2 = random.choice([9.25, 10.25, 11.25, 12.25, 18.25, 19.25, 20.25, 21.25]) P3 = random.choice( [27.25, 28.25, 29.25, 30.25, 36.25, 37.25, 38.25, 39.25]) L_people = [] L_people.append(P1) L_people.append(P2) L_people.append(P3) P4 = random.choice([-3.75, -2.75, -1.75, .75, 1.75, 2.75, 3.75, 5.25]) P5 = random.choice([9.25, 10.25, 11.25, 12.25, 18.25, 19.25, 20.25, 21.25]) P6 = random.choice( [27.25, 28.25, 29.25, 30.25, 36.25, 37.25, 38.25, 39.25]) R_people = [] R_people.append(P4) R_people.append(P5) R_people.append(P6) for z in np.asarray(L_doors): door = vizshape.addBox(size=[.04445, 2.13, .91]) door.texture(wood) door.setPosition([-4.9733, 1.065, float(z)]) doors.append(door) doorknob = vizshape.addSphere(radius=.045, axis=vizshape.AXIS_X) doorknob.color(viz.YELLOW) doorknob.setPosition(-4.9396, 1, (float(z) - .3364)) doors.append(doorknob) for z in np.asarray(R_doors): door = vizshape.addBox(size=[.04445, 2.13, .91]) door.texture(wood) door.setPosition([4.9683, 1.065, float(z)]) doors.append(door) doorknob = vizshape.addSphere(radius=.045, axis=vizshape.AXIS_X) doorknob.color(viz.YELLOW) doorknob.setPosition(4.9396, 1, (float(z) - .3364)) doors.append(doorknob) for z in np.asarray(L_people): object = random.choice([1, 2, 3]) if object == 1: x = random.choice([0, 90, 180]) person = viz.addAvatar('vcc_female.cfg', euler=(float(x), 0, 0)) person.setPosition([-4.25, 0, float(z)]) person.state(1) people.append(person) if object == 2: x = random.choice([0, 90, 180]) person = viz.addAvatar('vcc_male.cfg', euler=(float(x), 0, 0)) person.setPosition([-4.25, 0, float(z)]) person.state(1) people.append(person) if object == 3: x = random.choice([0, 90, 180]) person = viz.addAvatar('vcc_male2.cfg', euler=(float(x), 0, 0)) person.setPosition([-4.25, 0, float(z)]) person.state(1) people.append(person) for z in np.asarray(R_people): object = random.choice([1, 2, 3]) if object == 1: x = random.choice([0, 180, 270]) person = viz.addAvatar('vcc_female.cfg', euler=(float(x), 0, 0)) person.setPosition([4.5, 0, float(z)]) person.state(1) people.append(person) if object == 2: x = random.choice([0, 180, 270]) person = viz.addAvatar('vcc_male.cfg', euler=(float(x), 0, 0)) person.setPosition([4.5, 0, float(z)]) person.state(1) people.append(person) if object == 3: x = random.choice([0, 180, 270]) person = viz.addAvatar('vcc_male2.cfg', euler=(float(x), 0, 0)) person.setPosition([4.5, 0, float(z)]) person.state(1) people.append(person) en_env() tic = time.time() yield viztask.waitTime(10.5) toc = time.time() dis_env() print 'View length: ', (toc - tic) for door in np.asarray(doors): door.remove() for person in np.asarray(people): person.remove()
def startBoatIntro(): global boatScene, ALL_GRABBED_EVENT, wheel, radius, wheelTimer, skipKey # hideOceanScene() # FADE_IN_TIME = 4 globals_oa.user.setPosition([0,0,0]) # yield fader.fadeOutTask() yield fader.fadeInTask() #1.5 yield viztask.waitTime(4) #4 yield fader.fadeOutTask() #1.5 yield crystalBallScene() yield cityScene() yield globals_oa.AUDIO_BOAT_AMBIENT_INTRO.play() yield fader.fadeInTask() #1.5 yield viztask.waitTime(globals_oa.BETWEEN_FADING_TIME - 1) #4 yield fader.fadeOutTask() #1.5 yield viztask.waitTime(1) boatscene.unhideBoatAndIschia() yield fader.fadeInTask() # Next few blocks of code for making the steering wheel on the boat spin wheel = globals_oa.boat.getChild('steeringWheel') box = wheel.getBoundingBox() wheel.setCenter(box.center) radius = box.height / 2 wheelTimer = vizact.ontimer(0.01, rotateWheel, radius) wheelManager = vizproximity.Manager() global rhandtar, lhandtar rhsphere = vizshape.addSphere(radius = 0.05) rhsphere.setParent(globals_oa.rhModel) rhsphere.setPosition([0,0,.55]) rhsphere.disable(viz.RENDERING) lhsphere = vizshape.addSphere(radius = 0.05) lhsphere.setParent(globals_oa.lhModel) lhsphere.setPosition([0,0,.55]) lhsphere.disable(viz.RENDERING) if globals_oa.rhModel is not None:rhandtar = vizproximity.Target(rhsphere)#globals_oa.rhModel) if globals_oa.lhModel is not None:lhandtar = vizproximity.Target(lhsphere)#globals_oa.lhModel) wheelManager.addTarget(rhandtar) wheelManager.addTarget(lhandtar) wheelSource = vizshape.addBox([box.width - 2, box.height, box.depth - 2]) wheelSource.setPosition([box.center[0] - 3.65, box.center[1], box.center[2] + 0.83]) wheelSource.visible(False) wheelSensor = vizproximity.addBoundingBoxSensor(wheelSource) wheelManager.addSensor(wheelSensor) # wheelManager.setDebug(viz.ON) wheelManager.onEnter(wheelSensor, enterWheel) wheelManager.onExit(wheelSensor, exitWheel) ####new audio additions yield viztask.waitAny([viztask.waitTime(globals_oa.INITIAL_WAIT_TIME), skipKey]) # yield globals_oa.BOAT_AUDIO_INTRO_1.play() playAudioAndSaveGlobalPointer(globals_oa.BOAT_AUDIO_INTRO_1) result = yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.BOAT_AUDIO_INTRO_1), skipKey]) markAudioPlayAsEnded() if result.condition is skipKey: globals_oa.BOAT_AUDIO_INTRO_1.stop() else: yield viztask.waitAny([viztask.waitTime(2), skipKey]) ### loadDisabledZonesAndInitWorldvizCode() boatscene.Quad1() # yield globals_oa.BOAT_AUDIO_INTRO_2.play() playAudioAndSaveGlobalPointer(globals_oa.BOAT_AUDIO_INTRO_2) result = yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.BOAT_AUDIO_INTRO_2), skipKey]) markAudioPlayAsEnded() if result.condition is skipKey: globals_oa.BOAT_AUDIO_INTRO_2.stop() else: yield viztask.waitAny([viztask.waitTime(3), skipKey]) boatscene.Quad2() # yield globals_oa.BOAT_AUDIO_INTRO_3.play() playAudioAndSaveGlobalPointer(globals_oa.BOAT_AUDIO_INTRO_3) result = yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.BOAT_AUDIO_INTRO_3), skipKey]) if result.condition is skipKey: globals_oa.BOAT_AUDIO_INTRO_3.stop() else: yield viztask.waitAny([viztask.waitTime(3), skipKey]) boatscene.Quad3() # yield globals_oa.BOAT_AUDIO_INTRO_4.play() playAudioAndSaveGlobalPointer(globals_oa.BOAT_AUDIO_INTRO_4) result = yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.BOAT_AUDIO_INTRO_4), skipKey]) markAudioPlayAsEnded() if result.condition is skipKey: globals_oa.BOAT_AUDIO_INTRO_4.stop() else: yield viztask.waitAny([viztask.waitTime(3), skipKey]) yield globals_oa.CANVAS_QUAD.visible(False) globals_oa.CANVAS_QUAD_3_TEXTURE.remove() #grab on boat: start #init grab on boat initializeBoatGrabberAndPhysics() # yield globals_oa.BOAT_AUDIO_INTRO_5.play() playAudioAndSaveGlobalPointer(globals_oa.BOAT_AUDIO_INTRO_5) result = yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.BOAT_AUDIO_INTRO_5), skipKey]) markAudioPlayAsEnded() if result.condition is skipKey: globals_oa.BOAT_AUDIO_INTRO_5.stop() #adding a 1 min slot for grab testing on boat yield viztask.waitAny( [viztask.waitTime(1 * 60), viztask.waitEvent(ALL_GRABBED_EVENT), skipKey]) #stop grabbing, now that you are going underwater! disableBoatGrabberAndPhysics() wheelTimer.setEnabled(0) #grab on boat: end yield fader.fadeOutTask() boatscene.hideScene() enableOceanScene() #hiding the tunnel boxes before diving underwater tunnelBox1 = globals_oa.terrainZone1.getChild('Box001') tunnelBox2 = globals_oa.terrainZone1.getChild('Box002') tunnelBox3 = globals_oa.terrainZone1.getChild('Box003') tunnelBox4 = globals_oa.terrainZone1.getChild('Box004') tunnelBox1.visible(False) tunnelBox2.visible(False) tunnelBox3.visible(False) tunnelBox4.visible(False) globals_oa.AUDIO_BOAT_AMBIENT_INTRO.stop() # globals_oa.ZONE1_TRANSITION.play() playAudioAndSaveGlobalPointer(globals_oa.ZONE1_TRANSITION) globals_oa.AUDIO_BOAT_AMBIENT_SPLASH.play() # yield viztask.waitMediaEnd(globals_oa.AUDIO_BOAT_AMBIENT_SPLASH) result = yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.ZONE1_TRANSITION), skipKey]) markAudioPlayAsEnded() if result.condition is skipKey: globals_oa.ZONE1_TRANSITION.stop() #viz.res.addPublishFile('data/speciesToFindZone1.txt') scavengerhunt.initialize(globals_oa.terrainZone1, globals_oa.filePathToSpeciesForScavengerHuntInZone1) # transport_vhil.onKeyDown('g') viztask.schedule(swimFromZoneToZone()) #the scheduling below is moved to swimFromZoneToZone # viztask.schedule(startZone3Hunt()) yield fader.fadeInTask() # removeSphere() # showOceanScene() globals_oa.AUDIO_ZONE1_AMBIENT.play() globals_oa.ZONE1_AUDIO_1.play()
import vizcam import vizact import __main__ import vizuniverse import vizproximity import viztracker2 as viztracker import vizshape import viz import vizshape import viz import vizshape viz.go() #Create box with each face split into separate sub-node box = vizshape.addBox([1,1,1],splitFaces=True,pos=(0,1.8,4)) box.addAction(vizact.spin(0,1,0,45)) #Create textures t1 = viz.add('image1.jpg') t2 = viz.add('image2.jpg') #Apply first texture to front/back face box.texture(t1,node='front') box.texture(t1,node='back') #Apply second texture to left/right face box.texture(t2,node='left') box.texture(t2,node='right')
def makeBasicVisNode(self): # Returns a pointer to a vizshape object # This is added to the room.objects parent newvisNode = [] if(self.shape == 'box' ): #print 'Making box visNode' if( type(self.size) == float or len(self.size) !=3): print '**********Invalid size for box' print 'Check rigidBodySizesString. Expected 3 val for box: height,width,length.' print 'Got: ' + str(self.size) import winsound winsound.Beep(1000,250) lwh = [self.size[1],self.size[2],self.size[0]] newvisNode = vizshape.addBox(lwh ,alpha = self.alpha,color=viz.RED) elif(self.shape == 'sphere'): if( type(self.size) == list and len(self.size) == 1 ): self.size = float(self.size[0]) if( type(self.size) != float): # accept a float print '**********Invalid size for sphere' print 'Check rigidBodySizesString. Expected 1 val for sphere: radius' print 'Got: ' + str(self.size) import winsound winsound.Beep(1000,250) #print 'Making sphere visNode' newvisNode = vizshape.addSphere(radius = float(self.size), alpha = self.alpha,color=viz.BLUE,slices=10, stacks=10) elif('cylinder' in self.shape): if( type(self.size) == float or len(self.size) !=2): print '**********Invalid size for cylinder' print 'Check rigidBodySizesString. Expected 2 val for cylinder: height,radius' print 'Got: ' + str(self.size) import winsound winsound.Beep(1000,250) #print 'Making cylinder visNode' if( self.shape[-2:] == '_X' or self.shape[-2:] == '_Y' or self.shape[-2:] == '_Z' ): axisString = 'vizshape.AXIS' + self.shape[-2:] print axisString + axisString + axisString + axisString evalString = 'vizshape.addCylinder(height=self.size[0],radius=self.size[1], alpha = self.alpha,color=viz.BLUE,axis=' + axisString + ')' newvisNode = eval(evalString) else: newvisNode = vizshape.addCylinder(height=self.size[0],radius=self.size[1], alpha = self.alpha,color=viz.BLUE, axis = vizshape.AXIS_Y ) if( newvisNode ) : self.visNode = newvisNode else: print 'vizEnv.room.makeBasicVisNode(): Unable to create visNode' import winsound winsound.Beep(1000,250) #if(self.parentRoom): newvisNode.setParent(self.parentRoom.objects)
def goCG(): bgcolor = [0.15*1.2, 0.67*1.2, 0.95*1.2] viz.clearcolor(bgcolor) global skipKey, egg flagPile = globals_oa.terrainZone1.getChild('flagPile.OSGB', viz.CHILD_REPLACE_TRANSFORM) fishZone1 = schooling.initialize(1) # yield viztask.waitEvent(globals_oa.VIDEO_END_EVENT) # loadStuffAtStartAndHideThemALL() vizact.onsensorup(globals_oa.rhViveTracker, steamvr.BUTTON_TRIGGER, printRightHandPosition) vizact.onsensorup(globals_oa.lhViveTracker, steamvr.BUTTON_TRIGGER, printLeftHandPosition) globals_oa.terrainZone1.visible(viz.ON) globals_oa.ocean.visible(viz.ON) # schooling.hidePercentage(0) # schooling.chromis_chromis.hidePercentage(0) # schooling.diplodus_annularis.hidePercentage(0) # schooling.labrus_viridis.hidePercentage(0) # schooling.sarpa_salpa.hidePercentage(0) # schooling.show(fishZone1) # fog = vizfx.addFogEffect(colorRamp=viz.addTexture(globals_oa.MODEL_DIRECTORY + 'FogRamp.tif'), height=1, density=(.09)) # fog = vizfx.addFogEffect(colorRamp=viz.addTexture(globals_oa.MODEL_DIRECTORY + 'FogRamp.tif'), height=1, density=(10)) # vizfx.getComposer().addEffect(fog) # viz.MainScene.enable(viz.FOG, op=viz.OP_ROOT) viz.fogcolor(viz.AZURE) viz.fog(0.025) # worldvizcode.initVFXforDC(globals_oa.terrainZone1) # should moved into loadAndHide? worldvizcode.startEffects(globals_oa.terrainZone1) #not needed? #positioning the user on the terrain # offsetting the user on the terrain y_offset = -1.5 userPos = globals_oa.user.getPosition(viz.ABS_GLOBAL) globals_oa.user.setPosition([userPos[0], y_offset, userPos[2]]) #####** Healthy CG zone fades in** # terrain1Child = globals_oa.terrainZone1.getChild('Terrain_Zone009') # posToMoveUserTo = terrain1Child.getBoundingBox().center # print "posToMoveUserTo = " + str(posToMoveUserTo) if globals_oa.fader is None: globals_oa.fader = View_Fader.addFader(fadeTime=5) globals_oa.fader.fadeIn() ##### #This is a healthy reef, where carbon dioxide has not yet altered seawater chemistry. # ##### #When scientists measure the health and biodiversity of a reef, they perform something called a species count. ##### #Today, you will be counting the number of sea snails on this part of the reef. Look at your right hand # globals_oa.TRANSITION_TO_CG.play() yield viztask.waitAny([viztask.waitTime(10), skipKey]) globals_oa.CG_SCENE1_1.play() # getAllChildrenZone1 = viz.MainScene.getChildren(all=True) def fadeAllZone1(): globals_oa.terrainZone1.alpha(0) globals_oa.terrainZone1.visible(viz.ON) worldvizcode.stopEffects() viz.fog(0) fadeInZone1 = vizact.fadeTo(1, time=2) yield globals_oa.terrainZone1.addAction(fadeInZone1) # for child in getAllChildrenZone1: # child.addAction(fadeInZone1) yield viztask.waitAny([viztask.waitTime(17), skipKey]) # globals_oa.CG_SCENE1_1.stop() #*participant sees 3D model of sea snail rotating like a hologram* # if globals_oa.rhViveTracker is not None: # vizact.ontimer2(0.004, 25, scavengerhunt.vibrateHandController, 2) # leftHandVibrateTimer.setEnabled(True) # rightHandVibrateTimer.setEnabled(True) rotatingSnail.visible(viz.ON) snailLink = None vizact.ontimer2(.004, 50, vibrateRightHand) if globals_oa.rhViveTracker is not None: snailLink = viz.link(globals_oa.rhViveTracker, rotatingSnail) snailLink.setOffset([0.0, y_offset, 0.0]) snailLink.preTrans([0.01,-0.03,-0.13]) snailLink.preEuler([0,0,180]) yield viztask.waitTime(11) ##### #*hologram disappears, species count begins* if snailLink is not None: snailLink.remove() rotatingSnail.visible(viz.OFF) rotatingSnail.remove() ##### flashing the flag pile ###### egg.visible(viz.ON) flashOn = vizact.fadeTo(1, time=1, interpolate=vizact.easeInOut) flashOff = vizact.fadeTo(0, time=1, interpolate=vizact.easeInOut) flashSequence = vizact.sequence(flashOn, flashOff, 5) egg.add(flashSequence) yield viztask.waitTime(11) globals_oa.CG_SCENE1_2.play() print "playing CG_SCENE1_2 now" # yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.CG_SCENE1_2), skipKey]) yield viztask.waitAny([viztask.waitTime(17), skipKey]) # scavengerhunt.initialize(globals_oa.terrainZone1, globals_oa.filePathToSpeciesForScavengerHuntInZone1) # scavengerhunt.hideBasketAndStuffAttachedToIt() print "waiting for the species hunt end event, or for a timer to run out" # yield viztask.waitAny([viztask.waitEvent(scavengerhunt.ZONE1_OVER_EVENT), viztask.waitTime(60), skipKey]) yield viztask.waitAny([viztask.waitTime(35), skipKey]) print "species hunt is over" # leftHandVibrateTimer.setEnabled(False) # rightHandVibrateTimer.setEnabled(False) # scavengerhunt.endScavengerHunt() # yield viztask.waitEvent(scavengerhunt.ZONE1_OVER_EVENT) # scavengerhunt.disableGrabber() #waiting for the audio to end print "waiting for the narration to end" yield viztask.waitAny([viztask.waitTime(5), skipKey]) #healthy zone fading out # print "fading out from zone-1 begin" # globals_oa.fader.fadeOutTask() globals_oa.fader.fadeOut() # print "fading out from zone-1 complete" yield viztask.waitAny([viztask.waitTime(5), skipKey]) ##### #**Unhealthy CG zone fades in** # globals_oa.terrainZone1.disable(viz.RENDERING) globals_oa.terrainZone1.visible(viz.OFF) if globals_oa.lhModelFlag is not None: globals_oa.lhModelFlag.visible(viz.OFF) if globals_oa.rhModelFlag is not None: globals_oa.rhModelFlag.visible(viz.OFF) schooling.hide(fishZone1) # userPos = globals_oa.user.getPosition() # globals_oa.user.setPosition(userPos[0] + globals_oa.zone3_X_offset, userPos[1], userPos[2]) # globals_oa.user.setPosition(userPos[0], userPos[1], userPos[2]) # globals_oa.basket.setPosition(globals_oa.basketPosInCGscene3) # globals_oa.terrainZone3.setPosition(-60.73, 0.0, 0.0) # scavengerhunt.hideBasketAndStuffAttachedToIt() globals_oa.terrainZone3.visible(viz.ON) # worldvizcode.stopEffects() worldvizcode.startEffects(globals_oa.terrainZone3) # schooling.show(fishZone2) # print "fading into zone-3 begin" # globals_oa.fader.fadeInTask() globals_oa.fader.fadeIn() # print "fading into zone-3 complete" ##### Observe the changes that have occurred as acidity has increased. Reach out and touch one of the streams of bubbles rising from the sea floor globals_oa.CG_SCENE2_1.play() print "playing CG_SCENE2_1 now" # yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.CG_SCENE2_1), skipKey]) #adding proximity handling for touching the bubbles global bubbleVibratorManager bubbleVibratorManager = vizproximity.Manager() # bubbleVibratorManager.setDebug(viz.ON) vizact.onkeydown('b', bubbleVibratorManager.setDebug, viz.TOGGLE) #adding bounding box sensors around the bubbles updateVibrationSensors() # vizact.onkeydown('u',updateVibrationSensors) #adding boxes around the hands as targets global rhandtar, lhandtar # rhsphere = vizshape.addSphere(radius = 0.07) rhsphere = vizshape.addBox(size=(0.1,0.1,0.3)) rhsphere.setParent(globals_oa.rightHand) rhsphere.setPosition([0,0,-0.15]) rhsphere.disable(viz.RENDERING) # lhsphere = vizshape.addSphere(radius = 0.07) lhsphere = vizshape.addBox(size=(0.1,0.1,0.3)) lhsphere.setParent(globals_oa.leftHand) lhsphere.setPosition([0,0,-0.15]) lhsphere.disable(viz.RENDERING) # if globals_oa.rhModel is not None: rhandtar = vizproximity.Target(rhsphere)#globals_oa.rhModel) # if globals_oa.lhModel is not None: lhandtar = vizproximity.Target(lhsphere)#globals_oa.lhModel) bubbleVibratorManager.addTarget(rhandtar) bubbleVibratorManager.addTarget(lhandtar) bubbleVibratorManager.onEnter(None, vibrateHandInBubbles) bubbleVibratorManager.onExit(None, stopVibrationOfHandInBubbles) print "*********************************** SENSORS ADDED FOR VIBRATING BUBBLES ***********************************" yield viztask.waitAny([viztask.waitTime(globals_oa.CG_SCENE2_1.getDuration()), skipKey]) ##### **wait until participant touches a stream of bubbles** ##### ** repeat last sentence until they do so** #####The vents here in Ischia are releasing carbon dioxide, which is making the water more acidic. #####You study this part of the reef to predict how human carbon dioxide emissions will affect #####our world’s oceans and the species that live within them. #####Look at your right hand. globals_oa.CG_SCENE2_2.play() print "playing CG_SCENE2_2 now" yield viztask.waitAny([viztask.waitTime(16), skipKey]) if globals_oa.rhViveTracker is not None: corrodedRotatingSnail.visible(viz.ON) vizact.ontimer2(.004, 50, vibrateRightHand) print '***********linking cooroded snail' snailLink = viz.link(globals_oa.rhViveTracker, corrodedRotatingSnail) snailLink.setOffset([0.0, y_offset, 0.0]) snailLink.preTrans([0.01, -0.03, -0.13]) snailLink.preEuler([0, 0, 180]) snailLink.setMask(viz.LINK_POS) spinForever = vizact.spin(0,1,0, 90, dur = viz.FOREVER) corrodedRotatingSnail.runAction(spinForever) yield viztask.waitTime(10) corrodedRotatingSnail.visible(viz.OFF) yield viztask.waitAny([viztask.waitTime(40), skipKey]) if bubbleVibratorManager is not None: bubbleVibratorManager.clearSensors() bubbleVibratorManager.clearTargets() if rightHandVibrateTimer is not None: rightHandVibrateTimer.setEnabled(False) if leftHandVibrateTimer is not None: leftHandVibrateTimer.setEnabled(False) globals_oa.finalTransitionSound.play() # yield viztask.waitTime(1) bubbleStreams = globals_oa.terrainZone3.getChild('zone2_smaller.OSGB') bubbleStreams.setAnimationSpeed(0.1) globals_oa.UNDERWATER_AMBIENT.stop() yield viztask.waitTime(3) globals_oa.FINAL_SCENE.play() yield viztask.waitAny([viztask.waitTime(10), skipKey]) fadeInSphere = vizact.fadeTo(0, time=2) fadeOutSphere = vizact.fadeTo(1, time=2) def fadingFadeThing(): yield viztask.waitTime(1) globals_oa.fadingSphere.addAction(fadeOutSphere) yield viztask.waitActionEnd(globals_oa.fadingSphere, fadeOutSphere) globals_oa.terrainZone3.visible(viz.OFF) globals_oa.ocean.visible(viz.OFF) # globals_oa.terrainZone1.visible(viz.ON) globals_oa.globeScene.enable(viz.RENDERING) globals_oa.user.setPosition(0.0,-0.05,0.0) viz.fogcolor(viz.BLACK) viz.fog(0.2) viz.clearcolor(viz.BLACK) globals_oa.fader.fadeOutTask() globals_oa.fader.fadeInTask() # yield viztask.waitTime(2) yield globals_oa.fadingSphere.addAction(fadeInSphere) viztask.schedule(fadingFadeThing) globals_oa.fader.fadeOutTask()
global targettol targettol = 0.02 global circleL #slow leg circle marker circleL = vizshape.addSphere(0.01,50,50,color=viz.GREEN) circleL.setPosition(-0.03,targetL,0) circleL.disable(viz.LIGHTING)#no shading, we don't want depth perception here global circleR #slow leg circle marker circleR = vizshape.addSphere(0.01,50,50) circleR.color(1,0.7,0) circleR.setPosition(0.04,targetR,0) circleR.disable(viz.LIGHTING)#no shading, we don't want depth perception here global highlightr highlightr = vizshape.addBox(size=[0.25,0.0175,0.001]) highlightr.color(0,0,1) highlightr.setPosition(0.145,targetmean,0) highlightr.disable(viz.LIGHTING) global highlightl highlightl = vizshape.addBox(size=[0.25,0.0175,0.001]) highlightl.color(0,0,1) highlightl.setPosition(-0.135,targetmean,0) highlightl.disable(viz.LIGHTING) #setup order of highlights short = -0.2*targetmean long = 0.2*targetmean med = 0 global frodo
import viz from vhil_devkit import * import keyboardcontrol vhilGo() keyboardcontrol.control(MainView) ball = viz.add('ball.wrl') ball.setPosition([0,1.82,5]) box = ball.getBoundingBox() boxSize = box.size print str(boxSize) print 'center:',box.center import vizshape #sphere = vizshape.addSphere(1, flipFaces=True) prism = vizshape.addBox(size=boxSize, flipFaces=True) prism.setPosition(box.center) #import vizproximity #sensor = vizproximity.addBoundingBoxSensor(ball)
grass3.setPosition(0, -0.01, 50) #create a divider line global divider divider = vizshape.addQuad(size=(0.01, walkdistance * 50), axis=-vizshape.AXIS_Y, cullFace=False, cornerRadius=0) divider.setPosition(0, 0.001, (walkdistance * 50) / 2) divider.color(255, 255, 255) #make the Right targets rt = {} for x in range(1, int((walkdistance * 50) / (targetSL * 2)), 1): # rt["T{0}".format(x)]=vizshape.addQuad((0.1,targettol),axis=-vizshape.AXIS_Y,cullFace=False,cornerRadius=0) rt["T{0}".format(x)] = vizshape.addBox(size=[0.25, 0.02, 2 * targettol]) rt["T{0}".format(x)].setPosition(0.2, 0.011, x * 2 * targetSL) rt["T{0}".format(x)].color(0, 0, 0) lt = {} for x in range(1, int((walkdistance * 50) / (targetSL * 2)), 1): # rt["T{0}".format(x)]=vizshape.addQuad((0.1,targettol),axis=-vizshape.AXIS_Y,cullFace=False,cornerRadius=0) lt["T{0}".format(x)] = vizshape.addBox(size=[0.25, 0.02, 2 * targettol]) lt["T{0}".format(x)].setPosition(-0.2, 0.011, targetSL + x * 2 * targetSL) lt["T{0}".format(x)].color(0, 0, 0) #load avatar Mark #global man #man = viz.add('mark.cfg') #rfoot = man.getBone('Bip01 R Foot') #rfoot.lock()
#declare the total number of steps to attempt each target global STEPNUM STEPNUM =50 global hmd view = viz.addView hmd = oculus.Rift() hmd.getSensor profile = hmd.getProfile() hmd.setIPD(profile.ipd) viz.MainView.setPosition(0, 0.1, -0.47) viz.MainView.setEuler(0,0,0) global sagt sagt = vizshape.addBox(size=[0.04,0.02,0.01]) sagt.setPosition(0,0.1,0) #sagt.color(0,0.7,1) sagt.color(viz.GRAY) sagt.disable(viz.LIGHTING) global origin #origin = vizshape.addSphere(0.01,20,20) origin = viz.add('box3.obj',scale = [0.02,0.02,0.001],cache=viz.CACHE_NONE) #origin.color(20,20,20) origin.color(viz.GRAY) origin.disable(viz.LIGHTING) origin.setPosition(0,-0.01,0) global latt latt = vizshape.addBox(size=[0.02,0.04,0.01])
head = vrpn.addTracker('Tracker0@localhost', 9) body = vrpn.addTracker('Tracker0@localhost', 10) tracker = vrpn.addTracker('Tracker0@localhost', 4) head.swapPos([1, 2, -3]) head.swapQuat([-1, -2, 3, 4]) body.swapPos([1, 2, -3]) body.swapQuat([-1, -2, 3, 4]) ground = viz.add('ground.osgb') target_1 = vizshape.addCylinder(height=3, radius=0.02) target_1.color(viz.RED) target_1.setPosition([0, 0, 0]) target_2 = vizshape.addCylinder(height=3, radius=0.02) target_2.color(viz.RED) target_2.setPosition([0, 0, 7]) head_rep = vizshape.addBox([0.2, 0.2, 0.2]) head_rep.color(viz.PURPLE) body_rep = vizshape.addBox([0.2, 0.2, 0.2]) body_rep.color(viz.YELLOW_ORANGE) headlink = viz.link(head, head_rep) bodylink = viz.link(body, body_rep) manager = vizproximity.Manager() target = vizproximity.Target(headlink) manager.addTarget(target) def writing(trialNo): record = open('PBpath_P' + subject_no + '_Trial_' + str(trialNo) + time.strftime('_%Y-%m-%d_%H-%M-%S') + '.csv',
def makeBasicVizShape(self): # Returns a pointer to a vizshape object # This is added to the room.objects parent newnode3D = [] if(self.shape == 'box' ): #print 'Making box node3D' if( type(self.size) == float or len(self.size) !=3): print '**********Invalid size for box' print 'Check rigidBodySizesString. Expected 3 val for box: height,width,length.' print 'Got: ' + str(self.size) import winsound winsound.Beep(1000,250) lwh = [self.size[1],self.size[2],self.size[0]] newnode3D = vizshape.addBox(lwh ,alpha = self.alpha,color=viz.RED) elif(self.shape == 'sphere'): if( type(self.size) == list and len(self.size) == 1 ): self.size = float(self.size[0]) if( type(self.size) != float): # accept a float print '**********Invalid size for sphere' print 'Check rigidBodySizesString. Expected 1 val for sphere: radius' print 'Got: ' + str(self.size) import winsound winsound.Beep(1000,250) #print 'Making sphere node3D' newnode3D = vizshape.addSphere(radius = float(self.size), alpha = self.alpha,color=viz.BLUE,slices=10, stacks=10) elif('cylinder' in self.shape): if( type(self.size) == float or len(self.size) !=2): print '**********Invalid size for cylinder' print 'Check rigidBodySizesString. Expected 2 val for cylinder: height,radius' print 'Got: ' + str(self.size) import winsound winsound.Beep(1000,250) #print 'Making cylinder node3D' if( self.shape[-2:] == '_X' or self.shape[-2:] == '_Y' or self.shape[-2:] == '_Z' ): axisString = 'vizshape.AXIS' + self.shape[-2:] print axisString + axisString + axisString + axisString evalString = 'vizshape.addCylinder(height=self.size[0],radius=self.size[1], alpha = self.alpha,color=viz.BLUE,axis=' + axisString + ')' newnode3D = eval(evalString) else: newnode3D = vizshape.addCylinder(height=self.size[0],radius=self.size[1], alpha = self.alpha,color=viz.BLUE, axis = vizshape.AXIS_Y ) elif ('arrow' in self.shape): print 'Making an arrow' newnode3D = vizshape.addArrow(alpha = self.alpha,color=viz.BLUE, axis = vizshape.AXIS_X, length=0.2,radiusRatio=0.05 ) newnode3D.setPosition(pos) if( newnode3D ) : self.node3D = newnode3D else: print 'vizEnv.room.makeBasicVizShape(): Unable to create node3D' import winsound winsound.Beep(1000,250) #if(self.parentRoom): newnode3D.setParent(self.parentRoom.objects)
#declare the total number of steps to attempt each target global STEPNUM STEPNUM = 30 global hmd view = viz.addView hmd = oculus.Rift() hmd.getSensor profile = hmd.getProfile() hmd.setIPD(profile.ipd) viz.MainView.setPosition(0, 0.1, -0.47) viz.MainView.setEuler(0, 0, 0) global sagt sagt = vizshape.addBox(size=[0.04, 0.02, 0.01]) sagt.setPosition(0, 0.1, 0) #sagt.color(0,0.7,1) sagt.color(viz.GRAY) sagt.disable(viz.LIGHTING) global origin #origin = vizshape.addSphere(0.01,20,20) origin = viz.add('box3.obj', scale=[0.02, 0.02, 0.001], cache=viz.CACHE_NONE) #origin.color(20,20,20) origin.color(viz.GRAY) origin.disable(viz.LIGHTING) origin.setPosition(0, -0.01, 0) global latt latt = vizshape.addBox(size=[0.02, 0.04, 0.01])
def makeBasicVizShape(self): # TODO: Move this functionality to a shape subclass. # There is already mocapMarkerSphere subclass. It is confusing to have functionality split # between a subclass and class method. # Returns a pointer to a vizshape object # This is added to the room.objects parent newnode3D = [] if (self.shape == 'box'): #print 'Making box node3D' if (type(self.size) == float or len(self.size) != 3): print('**********Invalid size for box') print( 'Check rigidBodySizesString. Expected 3 val for box: height,width,length.' ) print('Got: ' + str(self.size)) import winsound winsound.Beep(1000, 250) lwh = [self.size[1], self.size[2], self.size[0]] newnode3D = vizshape.addBox(lwh, alpha=self.alpha, color=viz.RED) elif self.shape == 'sphere': if type(self.size) == list and len(self.size) == 1: self.size = float(self.size[0]) if type(self.size) != float: # accept a float print('**********Invalid size for sphere') print( 'Check rigidBodySizesString. Expected 1 val for sphere: radius' ) print('Got: ' + str(self.size)) import winsound winsound.Beep(1000, 250) #print 'Making sphere node3D' newnode3D = vizshape.addSphere(radius=float(self.size), alpha=self.alpha, color=viz.BLUE, slices=20, stacks=20) elif ('cylinder' in self.shape): if (type(self.size) == float or len(self.size) != 2): print('**********Invalid size for cylinder') print( 'Check rigidBodySizesString. Expected 2 val for cylinder: height,radius' ) print('Got: ' + str(self.size)) import winsound winsound.Beep(1000, 250) #print 'Making cylinder node3D' if (self.shape[-2:] == '_X' or self.shape[-2:] == '_Y' or self.shape[-2:] == '_Z'): axisString = 'vizshape.AXIS' + self.shape[-2:] print(axisString + axisString + axisString + axisString) evalString = 'vizshape.addCylinder(height=self.size[0],radius=self.size[1], alpha = self.alpha,color=viz.BLUE,axis=' + axisString + ')' newnode3D = eval(evalString) else: newnode3D = vizshape.addCylinder(height=self.size[0], radius=self.size[1], alpha=self.alpha, color=viz.BLUE, axis=vizshape.AXIS_Y) if newnode3D: self.node3D = newnode3D else: print('vizEnv.room.makeBasicVizShape(): Unable to create node3D') import winsound winsound.Beep(1000, 250) #if(self.parentRoom): newnode3D.setParent(self.parentRoom.objects)
def swimFromZoneToZone(): global SWIM_ZONE_TO_ZONE_COMPLETE_EVENT, LOOKED_OPENING_EVENT, lookingOpeningTimer, skipKey yield viztask.waitEvent(scavengerhunt.ZONE1_OVER_EVENT) scavengerhunt.disableGrabber() globals_oa.ZONE1_AUDIO_1.stop() globals_oa.basket.disable(viz.RENDERING) # Uncomment next block for immediately fading to zone 3 from zone 1; comment out lines 783 to 881 to skip swimming through the trench # yield fader.fadeOutTask() # for school in schooling.all_fish_schools: # school.hidePercentage(50) # globals_oa.currentZoneNumber = 2 # transport_vhil.cycleZones() # yield fader.fadeInTask() #get the child of the zone1 to hide stuffToHide1 = globals_oa.terrainZone1.getChild('RemoveThisWall') stuffToHide1.visible(False) playAudioAndSaveGlobalPointer(globals_oa.ZONE3_TRANSITION) result = yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.ZONE3_TRANSITION), skipKey]) markAudioPlayAsEnded() if result.condition is skipKey: globals_oa.ZONE3_TRANSITION.stop() #playAudioAndSaveGlobalPointer(globals_oa.ZONE3_TRANSITION2) #yield viztask.waitMediaEnd(globals_oa.ZONE3_TRANSITION2) #markAudioPlayAsEnded() vizact.onkeydown('q', shootForward) # viz.phys.disable() # Waits until the user has looked at the opening for 2 seconds before it starts swimming instructions viz.setCollectRenderStats(True) lookingOpeningTimer = vizact.ontimer(0.1, lookingAtOpening) yield viztask.waitAny([viztask.waitEvent(LOOKED_OPENING_EVENT), skipKey]) #create proximity sensor for the swimming between zones swimBetweenZonesProximityManager = vizproximity.Manager() # swimBetweenZonesProximityManager.setDebug(viz.ON) swimBetweenZonesProximityTarget = vizproximity.Target(viz.MainView) swimBetweenZonesProximityManager.addTarget(swimBetweenZonesProximityTarget) #create a box to act as the end of tunnel sensor, for zone-to-zone swimming endOfTunnelBox = vizshape.addBox(size = [3.0, 3.0, 3.0]) endOfTunnelBox.setPosition(globals_oa.CURRENT_ABS_POS_OF_END_OF_ZONE_TO_ZONE_TUNNEL) endOfTunnelBox.visible(False) zone3Sensor = vizproximity.addBoundingBoxSensor(endOfTunnelBox) swimBetweenZonesProximityManager.addSensor(zone3Sensor) swimBetweenZonesProximityManager.onEnter(zone3Sensor, EnterZone3Proximity) #create a sensor around the tube through the tunnel tunnelBox1 = globals_oa.terrainZone1.getChild('Box001') tunnelBox2 = globals_oa.terrainZone1.getChild('Box002') tunnelBox3 = globals_oa.terrainZone1.getChild('Box003') tunnelBox4 = globals_oa.terrainZone1.getChild('Box004') tunnelBox1.visible(False) tunnelBox2.visible(False) tunnelBox3.visible(False) tunnelBox4.visible(False) tunnelBoxSensor1 = vizproximity.addBoundingBoxSensor(tunnelBox1) tunnelBoxSensor2 = vizproximity.addBoundingBoxSensor(tunnelBox2) tunnelBoxSensor3 = vizproximity.addBoundingBoxSensor(tunnelBox3) tunnelBoxSensor4 = vizproximity.addBoundingBoxSensor(tunnelBox4) boundingBox = stuffToHide1.getBoundingBox() trackerLink = viz.link(stuffToHide1, viz.NullLinkable) tunnelOpeningSensor = vizproximity.Sensor(vizproximity.Box([boundingBox.width * 0.6, boundingBox.height * 0.3, boundingBox.depth * 1.2], [boundingBox.center[0] + 2.2, boundingBox.center[1], boundingBox.center[2] + 2]), trackerLink) swimBetweenZonesProximityManager.addSensor(tunnelBoxSensor1) swimBetweenZonesProximityManager.addSensor(tunnelBoxSensor2) swimBetweenZonesProximityManager.addSensor(tunnelBoxSensor3) swimBetweenZonesProximityManager.addSensor(tunnelBoxSensor4) swimBetweenZonesProximityManager.addSensor(tunnelOpeningSensor) swimBetweenZonesProximityManager.onEnter(tunnelBoxSensor1, EnterTunnelTube) swimBetweenZonesProximityManager.onEnter(tunnelBoxSensor2, EnterTunnelTube) swimBetweenZonesProximityManager.onEnter(tunnelBoxSensor3, EnterTunnelTube) swimBetweenZonesProximityManager.onEnter(tunnelBoxSensor4, EnterTunnelTube) swimBetweenZonesProximityManager.onEnter(tunnelOpeningSensor, EnterTunnelOpening) swimBetweenZonesProximityManager.onExit(tunnelBoxSensor1, ExitTunnelTube) swimBetweenZonesProximityManager.onExit(tunnelBoxSensor2, ExitTunnelTube) swimBetweenZonesProximityManager.onExit(tunnelBoxSensor3, ExitTunnelTube) swimBetweenZonesProximityManager.onExit(tunnelBoxSensor4, ExitTunnelTube) swimBetweenZonesProximityManager.onExit(tunnelOpeningSensor, ExitTunnelOpening) #turning on swimming transport_vhil.onKeyDown('g') playAudioAndSaveGlobalPointer(globals_oa.SWIMMING_INSTRUCTIONS) viztask.schedule(swimTutorial) viztask.schedule(removeGhostHands) result = yield viztask.waitAny([viztask.waitMediaEnd(globals_oa.SWIMMING_INSTRUCTIONS), skipKey]) markAudioPlayAsEnded() if result.condition is skipKey: globals_oa.SWIMMING_INSTRUCTIONS.stop() # print "waiting for swimming to end" yield viztask.waitAny([viztask.waitEvent(SWIM_ZONE_TO_ZONE_COMPLETE_EVENT), skipKey]) viztask.schedule(startZone3Hunt())
#def printViewPointPos(): # print "viz.MainView.getPosition() = " + str(viz.MainView.getPosition()) # #vizact.ontimer(1, printViewPointPos) #ground = viz.add('tut_ground.wrl') #ground.setPosition( 0, 1, 0 ) #Create a plane along the x and z axis intersecting the y axis at 1 #ground.collidePlane( 0, 1, 0, 1 ) #print "globals_oa.terrain1Floor.getPosition() = " + str(globals_oa.terrain1Floor.getPosition()) #oceanFloorPlane = vizshape.addPlane(size = [globals_oa.OCEAN_COLLISION_BOX_SIDE, globals_oa.OCEAN_COLLISION_BOX_SIDE], axis = vizshape.AXIS_Y, cullFace = False) #oceanFloorPlane = vizshape.addBox(size = [globals_oa.OCEAN_COLLISION_BOX_SIDE, 1.0, globals_oa.OCEAN_COLLISION_BOX_SIDE]) #oceanFloorPlane = vizshape.addBox(size = [globals_oa.OCEAN_COLLISION_BOX_LENGTH, 1.0, globals_oa.OCEAN_COLLISION_BOX_WIDTH]) oceanFloorPlane = vizshape.addBox(size = [globals_oa.UNDERWATER_ROCK_LENGTH, globals_oa.UNDERWATER_ROCK_HEIGHT, globals_oa.UNDERWATER_ROCK_BREADTH]) oceanFloorPlane.color(0.0, 0.0, 1.0) #oceanFloorPlane.visible(False) #oceanFloorPlane.alpha(0.4) #oceanFloorPlane.setPosition(30.0, -2.0, 0.0) #oceanFloorPlane.setPosition(globals_oa.OCEAN_FLOOR_PLANE_POS) oceanFloorPlane.setPosition(globals_oa.UNDERWATER_ROCK_POSITION) #oceanFloorPlane.setPosition(globals_oa.OCEAN_SURFACE_PLANE_POS) #oceanFloorPlane.setAxisAngle(globals_oa.OCEAN_FLOOR_PLANE_AXIS_ANGLE) #oceanFloorPlane.setAxisAngle(globals_oa.UNDERWATER_ROCK_AXIS_ANGLE) #oceanFloorPlane.setAxisAngle(globals_oa.OCEAN_SURFACE_PLANE_AXIS_ANGLE) #oceanFloorPlane.setEuler(30.0, 0.0, 0.0) def onKeyDown(key): global oceanFloorPlane # shift = 0.1
def Block3(): datafile.write('\n') datafile.write('Block3') global dum3 if dum == 2.5 and dum2 == 3.5: dum3 = 38 if dum == 2.5 and dum2 == 38: dum3 = 3.5 if dum == 3.5 and dum2 == 2.5: dum3 = 38 if dum == 3.5 and dum2 == 38: dum3 = 2.5 if dum == 38 and dum2 == 2.5: dum3 = 3.5 if dum == 38 and dum2 == 3.5: dum3 = 2.5 targets = [ 4.8, 6.2, 7.6, 9, 10.4, 11.8, 13.2, 14.6, 17.4, 20.2, 23, 25.8, 30, float(dum3), float(dum3) ] while len(targets) > 0: global k k = 0 yield viztask.waitTime(.5) ready_text = viz.addText3D('Get ready!', pos=[-2, 1.7, 20]) ready_text.color(0, 0, 0) yield viztask.waitTime(1) ready_text.remove() yield viztask.waitTime(2) yield room() doors = [] D1 = random.choice([-4.25, -3.25, -2.25, -1.25]) D2 = random.choice([4.75, 5.75, 6.75, 7.75]) D3 = random.choice([13.75, 14.75, 15.75, 16.75]) D4 = random.choice([22.75, 23.75, 24.75, 25.75]) D5 = random.choice([31.75, 32.75, 33.75, 34.75]) L_doors = [] L_doors.append(D1) L_doors.append(D2) L_doors.append(D3) L_doors.append(D4) L_doors.append(D5) D7 = random.choice([-4.25, -3.25, -2.25, -1.25]) D8 = random.choice([4.75, 5.75, 6.75, 7.75]) D9 = random.choice([13.75, 14.75, 15.75, 16.75]) D10 = random.choice([22.75, 23.75, 24.75, 25.75]) D11 = random.choice([31.75, 32.75, 33.75, 34.75]) R_doors = [] R_doors.append(D7) R_doors.append(D8) R_doors.append(D9) R_doors.append(D10) R_doors.append(D11) people = [] P1 = random.choice([-3.75, -2.75, -1.75, .75, 1.75, 2.75, 3.75, 5.25]) P2 = random.choice( [9.25, 10.25, 11.25, 12.25, 18.25, 19.25, 20.25, 21.25]) P3 = random.choice( [27.25, 28.25, 29.25, 30.25, 36.25, 37.25, 38.25, 39.25]) L_people = [] L_people.append(P1) L_people.append(P2) L_people.append(P3) P4 = random.choice([-3.75, -2.75, -1.75, .75, 1.75, 2.75, 3.75, 5.25]) P5 = random.choice( [9.25, 10.25, 11.25, 12.25, 18.25, 19.25, 20.25, 21.25]) P6 = random.choice( [27.25, 28.25, 29.25, 30.25, 36.25, 37.25, 38.25, 39.25]) R_people = [] R_people.append(P4) R_people.append(P5) R_people.append(P6) targ = random.choice(targets) if targ == 2.5: size = .051006 if targ == 3.5: size = .071409 if targ == 4.8: size = .097932 if targ == 6.2: size = .126495 if targ == 7.6: size = .155059 if targ == 9: size = .183622 if targ == 10.4: size = .212186 if targ == 11.8: size = .240749 if targ == 13.2: size = .269313 if targ == 14.6: size = .297876 if targ == 17.4: size = .355003 if targ == 20.2: size = .41213 if targ == 23: size = .469257 if targ == 25.8: size = .526384 if targ == 30: size = .612075 if targ == 38: size = .775295 print targ datafile.write('\n') datafile.write('%f' % (targ)) sphere = vizshape.addSphere((size), 20, 20) sphere.color(1.02, .444, 0) sphere.setPosition([0, (size), (targ)]) shadow = vizshape.addCircle((size), 20) shadow.color([.05, .05, .05]) shadow.setEuler([0, 90, 0]) shadow.setPosition([0, .001, (targ)]) for z in np.asarray(L_doors): door = vizshape.addBox(size=[.04445, 2.13, .91]) door.texture(wood) door.setPosition([-4.9733, 1.065, float(z)]) doors.append(door) doorknob = vizshape.addSphere(radius=.045, axis=vizshape.AXIS_X) doorknob.color(viz.YELLOW) doorknob.setPosition(-4.9396, 1, (float(z) - .3364)) doors.append(doorknob) for z in np.asarray(R_doors): door = vizshape.addBox(size=[.04445, 2.13, .91]) door.texture(wood) door.setPosition([4.9683, 1.065, float(z)]) doors.append(door) doorknob = vizshape.addSphere(radius=.045, axis=vizshape.AXIS_X) doorknob.color(viz.YELLOW) doorknob.setPosition(4.9396, 1, (float(z) - .3364)) doors.append(doorknob) for z in np.asarray(L_people): object = random.choice([1, 2, 3]) if object == 1: x = random.choice([0, 90, 180]) person = viz.addAvatar('vcc_female.cfg', euler=(float(x), 0, 0)) person.setPosition([-4.25, 0, float(z)]) person.state(1) people.append(person) if object == 2: x = random.choice([0, 90, 180]) person = viz.addAvatar('vcc_male.cfg', euler=(float(x), 0, 0)) person.setPosition([-4.25, 0, float(z)]) person.state(1) people.append(person) if object == 3: x = random.choice([0, 90, 180]) person = viz.addAvatar('vcc_male2.cfg', euler=(float(x), 0, 0)) person.setPosition([-4.25, 0, float(z)]) person.state(1) people.append(person) for z in np.asarray(R_people): object = random.choice([1, 2, 3]) if object == 1: x = random.choice([0, 180, 270]) person = viz.addAvatar('vcc_female.cfg', euler=(float(x), 0, 0)) person.setPosition([4.5, 0, float(z)]) person.state(1) people.append(person) if object == 2: x = random.choice([0, 180, 270]) person = viz.addAvatar('vcc_male.cfg', euler=(float(x), 0, 0)) person.setPosition([4.5, 0, float(z)]) person.state(1) people.append(person) if object == 3: x = random.choice([0, 180, 270]) person = viz.addAvatar('vcc_male2.cfg', euler=(float(x), 0, 0)) person.setPosition([4.5, 0, float(z)]) person.state(1) people.append(person) targets.remove(targ) en_env() tic = time.time() yield viztask.waitTime(5.5) #Actually is closer to 5 seconds toc = time.time() mask.enable(viz.RENDERING) dis_env() sphere.remove() shadow.remove() for door in np.asarray(doors): door.remove() for person in np.asarray(people): person.remove() yield viztask.waitTime(1) mask.disable(viz.RENDERING) print toc - tic datafile.write(' %f' % (toc - tic)) viz.callback(viz.KEYDOWN_EVENT, KeyEvents) yield viztask.waitKeyDown(viz.KEY_KP_ENTER) if k == 1: targets.append(targ) datafile.write(' targ missed')
#grids are good grid = vizshape.addGrid(color=[0.2]*3) viz.clearcolor(viz.GRAY) #Create proximity manager manager = vizproximity.Manager() manager.setDebug(viz.ON) #create our bisecting plane mid_plane= vizshape.addPlane(size=(.00001,.00001),axis=vizshape.AXIS_X, cullFace=False) start_node= vizshape.addCylinder(height1, radius=.00000000005,topRadius= None,bottomRadius= None, axis=vizshape.AXIS_Y,slices=20,bottom=True,top=True) end_node= vizshape.addCylinder(height1, radius=.00000001,topRadius= None,bottomRadius= None, axis=vizshape.AXIS_Y,slices=20,bottom=True,top=True) end_box=(vizshape.addBox([.06,.06,.06],right=True,left=True,top=True,bottom=True, front=True,back=True, splitFaces=False, color=viz.RED)) left_node1=vizshape.addCylinder(height1, radius= .000001,topRadius= None,bottomRadius= None, axis=vizshape.AXIS_Y,slices=20,bottom=True,top=True) #left_node2=vizshape.addCylinder(height1, radius= .000001,topRadius= None,bottomRadius= None, axis=vizshape.AXIS_Y,slices=20,bottom=True,top=True) #left_node3=vizshape.addCylinder(height1, radius= .000001,topRadius= None,bottomRadius= None, axis=vizshape.AXIS_Y,slices=20,bottom=True,top=True) right_node1=vizshape.addCylinder(height1, radius=.00000001,topRadius= None,bottomRadius= None, axis=vizshape.AXIS_Y,slices=20,bottom=True,top=True) #right_node2=vizshape.addCylinder(height1, radius=.00000001,topRadius= None,bottomRadius= None, axis=vizshape.AXIS_Y,slices=20,bottom=True,top=True) #right_node3=vizshape.addCylinder(height1, radius=.00000001,topRadius= None,bottomRadius= None, axis=vizshape.AXIS_Y,slices=20,bottom=True,top=True) #CHANGE: changed start_box's dimensions to max_size from .06 did the same w/ the start_sensor table= vizshape.addBox([50,.775,50],right=True,left=True,top=True,bottom=True, front=True,back=True, splitFaces=False, color= viz.PURPLE) start_node= vizshape.addBox([.00001, .000001, .0000001],right=True,left=True,top=True,bottom=True, front=True,back=True, splitFaces=False, color=viz.BLUE) if x>0: left_plane1= vizshape.addBox([control_array[0],.00001,control_array[0]],right=True,left=True,top=True,bottom=True, front=True,back=True, splitFaces=False, color= viz.GREEN) left_plane1.setPosition(-x_translate1,y_height1,z_depth1) right_plane1= vizshape.addBox([control_array[0],.00001,control_array[0]],right=True,left=True,top=True,bottom=True, front=True,back=True, splitFaces=False, color= viz.GREEN)
def addTrench(self): trench = viz.addGroup() leftWall = vizshape.addBox(size=[200, 200, 20000]) rightWall = vizshape.addBox(size=[200, 200, 20000]) floor = vizshape.addBox(size=[200, 2, 20000]) ceiling = vizshape.addBox(size=[200, 2, 20000]) m = viz.Matrix() m.postTrans(-200, 50, 2500) leftWall.setMatrix(m) m = viz.Matrix() m.postTrans(200, 50, 2500) rightWall.setMatrix(m) m = viz.Matrix() m.postTrans(0, -50, 2500) floor.setMatrix(m) m = viz.Matrix() m.postTrans(0, 125, 2000) ceiling.setMatrix(m) trenchTex = viz.addTexture('trench2.jpg') leftWall.texture(trenchTex) rightWall.texture(trenchTex) floor.texture(trenchTex) ceiling.visible(viz.OFF) leftWall.setParent(trench) rightWall.setParent(trench) floor.setParent(trench) ceiling.setParent(trench) obs1 = vizshape.addBox(size=[400, 175, 50]) obs1.setPosition(0, 60, 650) obs1.texture(trenchTex) obs1.setParent(trench) obs2 = vizshape.addBox(size=[250, 150, 50]) obs2.setPosition(-60, 0, 750) obs2.texture(trenchTex) obs2.setParent(trench) obs3 = vizshape.addBox(size=[400, 125, 50]) obs3.setPosition(0, -60, 950) obs3.texture(trenchTex) obs3.setParent(trench) obs4_1 = vizshape.addBox(size=[400, 100, 50]) obs4_1.setPosition(0, 100, 1100) obs4_1.texture(trenchTex) obs4_1.setParent(trench) obs4_2 = vizshape.addBox(size=[400, 75, 50]) obs4_2.setPosition(0, -10, 1100) obs4_2.texture(trenchTex) obs4_2.setParent(trench) obs5_1 = vizshape.addBox(size=[75, 200, 1000]) obs5_1.setPosition(50, 0, 2000) obs5_1.texture(trenchTex) obs5_1.setParent(trench) obs5_2 = vizshape.addBox(size=[75, 200, 1000]) obs5_2.setPosition(-50, 0, 2000) obs5_2.texture(trenchTex) obs5_2.setParent(trench) obs6_1 = vizshape.addBox(size=[400, 100, 1000]) obs6_1.setPosition(0, 100, 3000) obs6_1.texture(trenchTex) obs6_1.setParent(trench) obs6_2 = vizshape.addBox(size=[400, 50, 1000]) obs6_2.setPosition(0, -10, 3000) obs6_2.texture(trenchTex) obs6_2.setParent(trench) obs7_1 = vizshape.addBox(size=[75, 200, 1000]) obs7_1.setPosition(50, 0, 4000) obs7_1.texture(trenchTex) obs7_1.setParent(trench) obs7_2 = vizshape.addBox(size=[75, 200, 1000]) obs7_2.setPosition(-50, 0, 4000) obs7_2.texture(trenchTex) obs7_2.setParent(trench) obs8_1 = vizshape.addBox(size=[400, 100, 1000]) obs8_1.setPosition(0, 100, 5000) obs8_1.texture(trenchTex) obs8_1.setParent(trench) obs8_2 = vizshape.addBox(size=[400, 50, 1000]) obs8_2.setPosition(0, -10, 5000) obs8_2.texture(trenchTex) obs8_2.setParent(trench) obs9 = vizshape.addBox(size=[200, 200, 1000]) obs9.setPosition(-50, 0, 6000) obs9.texture(trenchTex) obs9.setParent(trench) obs10 = vizshape.addBox(size=[200, 200, 1000]) obs10.setPosition(0, 100, 7000) obs10.texture(trenchTex) obs10.setParent(trench) obs11 = vizshape.addBox(size=[200, 200, 1000]) obs11.setPosition(50, 0, 8000) obs11.texture(trenchTex) obs11.setParent(trench) obs12_1 = vizshape.addBox(size=[200, 200, 1000]) obs12_1.setPosition(0, -100, 9000) obs12_1.texture(trenchTex) obs12_1.setParent(trench) obs12_2 = vizshape.addBox(size=[200, 100, 1000]) obs12_2.setPosition(0, 100, 9000) obs12_2.texture(trenchTex) obs12_2.setParent(trench) obs13_1 = vizshape.addBox(size=[200, 200, 1000]) obs13_1.setPosition(0, -100, 10000) obs13_1.texture(trenchTex) obs13_1.setParent(trench) obs13_2 = vizshape.addBox(size=[150, 100, 1000]) obs13_2.setPosition(50, 50, 10000) obs13_2.texture(trenchTex) obs13_2.setParent(trench) obs13_1 = vizshape.addBox(size=[200, 200, 1000]) obs13_1.setPosition(0, -100, 11000) obs13_1.texture(trenchTex) obs13_1.setParent(trench) obs13_2 = vizshape.addBox(size=[150, 100, 1000]) obs13_2.setPosition(60, 50, 11000) obs13_2.texture(trenchTex) obs13_2.setParent(trench) obs13_3 = vizshape.addBox(size=[200, 100, 1000]) obs13_3.setPosition(0, 100, 11000) obs13_3.texture(trenchTex) obs13_3.setParent(trench) return trench
def _createVizNode(self,shape,size): if(shape == 'box' ): print 'Making box vizNode' if( type(size) == float or len(size) !=3): print '**********Invalid size for ' + self.fileName print 'Check rigidBodySizesString. Expected 3 val for box: height,width,length.' print 'Got: ' + str(size) import winsound winsound.Beep(1000,250) self.vizNode = vizshape.addBox(size,alpha = 0.7,color=viz.RED) return elif(shape == 'sphere'): if( type(size) != float): # accept a float print '**********Invalid size for ' + self.fileName print 'Check rigidBodySizesString. Expected 1 val for sphere: radius' print 'Got: ' + str(size) import winsound winsound.Beep(1000,250) print 'Making sphere vizNode' self.vizNode = vizshape.addSphere(radius = float(size), alpha = 0.7,color=viz.BLUE) elif(shape == 'cylinder'): if( type(size) == float or len(size) !=2): print '**********Invalid size for ' + self.fileName print 'Check rigidBodySizesString. Expected 2 val for cylinder: height,radius' print 'Got: ' + str(size) import winsound winsound.Beep(1000,250) print 'Making cylinder vizNode' # height, rad, self.vizNode = vizshape.addCylinder(height=size[0],radius=size[1], alpha = 0.3,color=viz.YELLOW,axis=vizshape.AXIS_X) #self.vizNode.setAxisAngle(1,0,0,90) if( self.vizNode ) : self.vizNode.disable(viz.CULL_FACE) if( self.isVisible ): self.vizNode.visible( viz.ON ) #Make the object visible. else: self.vizNode.visible( viz.OFF ) #Make the object invisible. print self.fileName + ' vizNode created, but not set as visible' self.physNode = self.vizNode.collideMesh() else: print 'Problem creating viz node' import winsound winsound.Beep(1000,250)
mylight.intensity(0.5) # disable headlight headLight = viz.MainView.getHeadLight() headLight.disable() # environment # x = [0, -5, 0, 5] z = [5, 0, -5, 0] rot = [0, 90, 0, 90] for n in range(4): wall = vizshape.addBox(size=(10.0, 3.0, 1.0), right=True, left=True, top=True, bottom=True, front=True, back=True, splitFaces=False) wall.setEuler(rot[n], 0, 0) wall.setPosition(x[n], 1.5, z[n]) wall.color(0.85, 0.85, 0.85) roof = vizshape.addBox(size=(10.0, 1.0, 10.0), right=True, left=True, top=True, bottom=True, front=True, back=True, splitFaces=False)
#create a divider line global divider divider = vizshape.addQuad(size=(0.01,walkdistance*50), axis=-vizshape.AXIS_Y, cullFace=False, cornerRadius=0) divider.setPosition(0,0.001,(walkdistance*50)/2) divider.color(255,255,255) #make the Right targets rt = {} for x in range(1,int((walkdistance*50)/(targetSL*2)),1): # rt["T{0}".format(x)]=vizshape.addQuad((0.1,targettol),axis=-vizshape.AXIS_Y,cullFace=False,cornerRadius=0) rt["T{0}".format(x)]=vizshape.addBox(size=[0.25,0.02,2*targettol]) rt["T{0}".format(x)].setPosition(0.2,0.011,x*2*targetSL) rt["T{0}".format(x)].color(0,0,0) lt = {} for x in range(1,int((walkdistance*50)/(targetSL*2)),1): # rt["T{0}".format(x)]=vizshape.addQuad((0.1,targettol),axis=-vizshape.AXIS_Y,cullFace=False,cornerRadius=0) lt["T{0}".format(x)]=vizshape.addBox(size=[0.25,0.02,2*targettol]) lt["T{0}".format(x)].setPosition(-0.2,0.011,targetSL+x*2*targetSL) lt["T{0}".format(x)].color(0,0,0) #load avatar Mark global man #man = viz.add('mark.cfg') man = viz.add('vcc_male.cfg') man.disable(viz.LIGHTING)
def validation(): ''' Show same calibration points and compare calulated gaze point to ground truth. (Displays both + angular error) ''' # ask for the sub port req.send_string('SUB_PORT') sub_port = req.recv_string() # open a sub port to listen to pupil sub = ctx.socket(zmq.SUB) sub.connect("tcp://{}:{}".format(addr, sub_port)) sub.setsockopt_string(zmq.SUBSCRIBE, u'gaze') # add gaze marker m_gaze = vizshape.addSphere(radius=sphere_size, color=viz.GREEN) m_gaze.disable(viz.INTERSECTION) if not gaze_marker_visible: m_gaze.disable(viz.RENDER) # invisible but phyisically present def get_gaze(eye_number): ''' checks gaze stream for confident measures of the eye (eye_number) until it finds them Args: eye_number (int): 1=left, 0=right Returns: [x, y] (float): normalized x and y values range [0,1] ''' found_confident_val = False while found_confident_val == False: topic = sub.recv_string() # unused msg = sub.recv() msg = loads(msg, encoding='utf-8') confidence = msg['confidence'] if msg['id'] == eye_number: if confidence > confidence_level: found_confident_val = True t = msg['timestamp'] # unused npx = msg['norm_pos'][0] npy = msg['norm_pos'][1] return [npx, npy] def updateGaze(): ''' calls 'get_gaze function' and takes the average of two eyes for the normal values - they will be used to project a sphere on where subjects look at ''' # get gaze data norm_pos_x = np.mean([get_gaze(1)[0], get_gaze(0)[0]]) norm_pos_y = np.mean([get_gaze(1)[1], get_gaze(0)[1]]) # find the intersection and project sphere line = viz.MainWindow.screenToWorld([norm_pos_x, norm_pos_y]) intersection = viz.intersect(line.begin, line.end) m_gaze.setPosition(intersection.point) # update cursor location on every sample vizact.onupdate(viz.PRIORITY_LINKS+1, updateGaze) dot_norm_pos=[] gaze_norm_pos=[] ang_error = [] yield showMessage('Zum Starten der Validierung die Leertaste drücken') for p in norm_positions: print('calibration point: ', p) norm_x = p[0] norm_y = p[1] first_run = True if first_run: first_run = False '''set up a plane 'right in front of user' on which we want to project the dots''' # target the current center of view p_line = viz.MainWindow.screenToWorld(.5, .5) # let's modify the line and call it line 2. Here we let the line end at the "depth" value p_line_2 = viz.Line(begin=p_line.begin, end=p_line.end, dir=p_line.dir, length=depth) # Add the plane and apply the matrix of our viewpoint to the plane plane = vizshape.addBox(size=[3.6, 2, .1]) mymat = viz.MainView.getMatrix() plane.setMatrix(mymat) # Reposition the plane to the end of line 2 plane.setPosition(p_line_2.end) plane.color([.25,.25,.25]) plane.alpha(.95) # Lock it to user plane_link = viz.grab(viz.MainView, plane) # interpolate a line from norm values to 3d coordinates line = viz.MainWindow.screenToWorld([norm_x, norm_y]) # find the intersection intersection = viz.intersect(line.begin, line.end) # place a dot (at depth level of line) dot = vizshape.addSphere(radius=sphere_size) dot.setPosition(intersection.point) # lock dot to user view_link = viz.grab(viz.MainView, dot) print('ready') viz.playSound('beep500_200.wav') yield viztask.waitKeyDown(' ') for s in range(60): # get the current pupil time (pupil uses CLOCK_MONOTONIC with adjustable timebase). # You can set the pupil timebase to another clock and use that. t = get_pupil_timestamp() dot_norm_pos.append(p) gaze_norm_pos.append(viz.MainWindow.worldToScreen(m_gaze.getPosition())) yield viztask.waitTime(1/60.) print(t) dot.color(viz.RED) print('waiting for next position...') yield viztask.waitKeyDown(' ') yield dot.remove() time.sleep(2) showMessage('validation done!') for p in norm_positions: i = norm_positions.index(p) chunk = range(i*60, (i+1)*60) print(i) dmx = np.mean([gaze_norm_pos[x][0] for x in chunk]) dmy = np.mean([gaze_norm_pos[y][1] for y in chunk]) # interpolate a line from norm values to 3d coordinates line = viz.MainWindow.screenToWorld([p[0], p[1]]) line_v = viz.MainWindow.screenToWorld([dmx, dmy]) # find the intersection intersection = viz.intersect(line.begin, line.end) intersection_v = viz.intersect(line_v.begin, line_v.end) # place a dots (at depth level of line) for both ground truth and gaze point dot = vizshape.addSphere(radius=sphere_size) dot.setPosition(intersection.point) dot.color(viz.BLUE) dot_v = vizshape.addSphere(radius=sphere_size*0.75) dot_v.setPosition(intersection_v.point) dot_v.color(viz.YELLOW_ORANGE) # lock dots to user view_link = viz.grab(viz.MainView, dot) viel_link2 = viz.grab(viz.MainView, dot_v) # calculate angular error error = vizmat.AngleBetweenVector(line.dir, line_v.dir) # cosangle = np.dot(a,b) / (np.linalg.norm(a) * np.linalg.norm(b)) # angle = np.arccos(cosangle) # error = np.degrees(angle) ang_error.append(error) print('angle is: ', error, 'for ', p) showMessage('mean angular error is: {}'.format(np.mean(ang_error))) print('mean angular error is: ', np.mean(ang_error), ' deg/ visual angle')
global targettol targettol = 0.02 global circleL #slow leg circle marker circleL = vizshape.addSphere(0.01, 50, 50, color=viz.GREEN) circleL.setPosition(-0.03, targetL, 0) circleL.disable(viz.LIGHTING) #no shading, we don't want depth perception here global circleR #slow leg circle marker circleR = vizshape.addSphere(0.01, 50, 50) circleR.color(1, 0.7, 0) circleR.setPosition(0.04, targetR, 0) circleR.disable(viz.LIGHTING) #no shading, we don't want depth perception here global highlightr highlightr = vizshape.addBox(size=[0.25, 0.0175, 0.001]) highlightr.color(0, 0, 1) highlightr.setPosition(0.145, targetmean, 0) highlightr.disable(viz.LIGHTING) global highlightl highlightl = vizshape.addBox(size=[0.25, 0.0175, 0.001]) highlightl.color(0, 0, 1) highlightl.setPosition(-0.135, targetmean, 0) highlightl.disable(viz.LIGHTING) #setup order of highlights short = -0.06 long = 0.06 med = 0 global frodo