The following example rotates different cubes using viztouch move events. In order to activate move on a cube the first touch event must intersect with it's geometry:
Code:
import viz
import vizshape
import viztouch
viz.go()
dojo = viz.addChild('dojo.osgb')
redCube = vizshape.addCube(pos=[-1,1.8,6],color=viz.RED)
blueCube = vizshape.addCube(pos=[1,1.8,6],color=viz.BLUE)
viztouch.setMode(viztouch.MODE_TOUCH)
class ShapeSpinner(object):
def __init__(self, model):
self.model = model
self.last_pos = []
self.touchDown_event = viztouch.onTouchDown(self.beginTouch)
self.touchMove_event = viztouch.onTouchMove(self.moveTouch)
self.touchUp_event = viztouch.onTouchUp(self.endTouch)
self.touchMove_event.setEnabled(viz.OFF)
def beginTouch(self, e):
pos = e.pos.normalized
#If begin touch intersects model enable movement
if viz.pick(pos=pos) == self.model:
self.touchMove_event.setEnabled(viz.ON)
self.last_pos = pos
def moveTouch(self,e):
pos = e.pos.normalized
if pos[0] > self.last_pos[0]:
self.model.setEuler([-0.4,0.0,0],viz.REL_LOCAL)
elif pos[0] < self.last_pos[0]:
self.model.setEuler([0.4,0.0,0],viz.REL_LOCAL)
self.last_pos = pos
def endTouch(self,e):
self.touchMove_event.setEnabled(viz.OFF)
ShapeSpinner(redCube)
ShapeSpinner(blueCube)
viz.mouse(viz.OFF)