In some of my more complex objects, I define a script so that the motion of the parent object is defined by the motion of each of the handles. In the context of dynamic geometry, objects can be stretched, so this is logical for one and two handed operation in our context.
In your context it may only be logical to use one-handed interaction in this scenario.
A simple example:
void Update(){
/*if the position of the centerHandle changes, move the sphere*/
if ((this.transform.position != centerPoint.transform.position) && !edgePoint.GetComponent<InteractionBehaviour>().IsBeingGrasped) {
edgePoint.transform.position += (centerPoint.transform.position - this.transform.position);
this.transform.position = centerPoint.transform.position;
}
/* if the position of the edgeHandle changes change the radius */
if (Vector3.Magnitude(centerPoint.transform.position - edgePoint.transform.position) != radius)
{
radius = Vector3.Magnitude(centerPoint.transform.position - edgePoint.transform.position);
updateMesh();
}
}
To prevent feedback loops, we are currently implementing a reactionManager class that builds a minimal spanning tree from each hand's interactions to all of the objects that it should affect.
Another workaround for this issue for simpler objects is to use physics (i.e. spring, joint) for interactions between rigidbodies not directly in contact with the user.
Take a look at the videos at handwaver.org and PM me if you want to know more about our use of InteractionBehaviour.