Hi guys,
I am trying to add an action to an object once it is grabbed by a hand. Unfortunately I am having a bit of trouble in getting the objects to move at all!
This is what I have so far....
Code:
import viz
import vizact
#function for changing numbers to three decimal places
def decimal(Pos):
for i, number in enumerate(Pos):
Pos[i] = round(number,3)
ground = viz.addChild('ground.osgb')
Tool = viz.add('Tool_V12.osgb', pos=[0,0,4], euler=[180,0,0])
Tool.collideMesh()
#Get the clamp parts
ClampA_Transform = Tool.getChild('G05515000_SAJG01A-5068.2')
ClampA = ClampA_Transform.getChild('All Nodes')
ClampA.setCenter(56,30,24)
ClampA.color(viz.YELLOW)
ClampA_Pos = ClampA.getPosition(mode=viz.REL_GLOBAL)
decimal(ClampA_Pos)
ClampA.collideBox()
#Clamp B
ClampB_Transform = Tool.getChild('G05515000_SAJG01A-5068.1')
ClampB = ClampB_Transform.getChild('All Nodes')
ClampB.setCenter(56,30,24)
ClampB.color(viz.YELLOW)
ClampB_Pos = ClampB.getPosition(mode=viz.REL_GLOBAL)
decimal(ClampB_Pos)
ClampB.collideMesh()
import viztracker
viztracker.DEFAULT_HANDS = True
viztracker.go()
rightHand = viztracker.get('lefthand')
#enable physics
viz.phys.enable()
ground.collidePlane()
rightHand.collideMesh()
#ball.collideSphere()
closest = None #Used to identify closest object to hand
MoveableParts = [ClampA, ClampB]
def updateClosest():
global closest
list = viz.phys.intersectNode(rightHand)
if list != []:
closestDistance = 999999
closest = None
handPos = rightHand.getPosition()
for object in list:
if (object in MoveableParts):
distance = vizmat.Distance(handPos, object.getPosition(viz.ABS_GLOBAL))
if distance < closestDistance:
closest = object
closestDistance = distance
else:
closest = None
vizact.onupdate(viz.PRIORITY_DEFAULT, updateClosest)
link = None
def onGesture(e):
global link
if closest is not None:
node = closest
link = viz.grab(rightHand, node)
if node is ClampA:
#link= viz.grab(hand, closest)
global ClampA_Pos
Pos = ClampA.getPosition(mode=viz.REL_GLOBAL)
decimal(Pos)
if Pos == ClampA_Pos:
node.addAction(vizact.spinTo(euler=[-90,0,0], speed=90))
elif Pos != ClampA_Pos:
node.addAction(vizact.spinTo(euler=[90,0,0], speed=90))
if node is ClampB:
global ClampB_Pos
Pos = ClampB.getPosition(mode=viz.REL_GLOBAL)
decimal(Pos)
if Pos == ClampB_Pos:
node.addAction(vizact.spinTo(euler=[90,0,0], speed=90))
else:# CurrentPos != ClampB_Pos:
node.addAction(vizact.spinTo(euler=[-90,0,0], speed=90))
import hand
viz.callback( hand.HAND_GESTURE_EVENT, onGesture )