I am using VIVE headset and controller and using it for Object Move in VRED.
I am trying to grab and move the object using parent constrain code given as sample.
I just want to make a modification to this code by grabbing it from the same rotation orientation as I left it in the last grab. Somehow I am unable to achieve my objective and while using this code the delete constraint is not working and object gets stuck to the controller. Is there a way grab the object, then rotate it and leave it and grab it from the new rotated orientation?
Below is my code and I have modified def stopMove() function to flush rotation optimizations in the below code.
r = self.node.getRotationAsEuler()
vrOptimize.flushRotations(self.node)
self.node.setRotationAsEuler(r)
class ObjectAttacher():
def __init__(self):
self.moverEnabled = False
self.createMenu()
self.node = None
def startMove(self,action,device):
self.node = self.getMovable(device.pick().getNode())
if not self.node.isNull():
vrSessionService.addNodeSync(self.node)
self.constraint = vrConstraintService.createParentConstraint([device.getNode()],self.node,False)
def stopMove(self, action, device):
if self.node is not None and not self.node.isNull():
r = self.node.getRotationAsEuler()
vrOptimize.flushRotations(self.node)
self.node.setRotationAsEuler(r)
vrSessionService.removeNodeSync(self.node)
vrConstraintService.deleteConstraint(self.constraint)
def createMenu(self):
self.tool = vrImmersiveUiService.createTool("CustomObjectAttacher")
self.tool.setText("Attach")
self.tool.setCheckable(True)
self.tool.setChecked(True)
self.tool.setOnOffIconData(onIcon, offIcon)
self.tool.signal().checked.connect(self.enableMover)
self.tool.signal().unchecked.connect(self.disableMover)
def deleteMenu(self):
vrImmersiveUiService.deleteTool(self.tool)
def enableMover(self):
if not self.moverEnabled:
pointer = vrDeviceService.getInteraction("Pointer")
start = pointer.getControllerAction("start")
start.signal().triggered.connect(self.startMove)
execute = pointer.getControllerAction("execute")
execute.signal().triggered.connect(self.stopMove)
self.moverEnabled = True
def disableMover(self):
if self.moverEnabled:
pointer = vrDeviceService.getInteraction("Pointer")
start = pointer.getControllerAction("start")
start.signal().triggered.disconnect(self.startMove)
execute = pointer.getControllerAction("execute")
execute.signal().triggered.disconnect(self.stopMove)
self.moverEnabled = False
def getMovable(self,node):
while not node.isNull():
print((node.getName()))
if node.getName().startswith("Movable"):
return node
node = node.getParent()
return node
mover = ObjectAttacher()