private void RotateAroundTransform(DragData drag)
        {
            // In order to add two quaternion rotations correctly you multiply them.
            // To subtract you need to multiply by the inverse.
            Quaternion rotationDelta = (
                Snap.LocalRotationOfWorldRotation(mesh.transform, drag.transform.rotation) *
                Quaternion.Inverse(Snap.LocalRotationOfWorldRotation(mesh.transform, drag.startTransformRotation))
                );
            Quaternion snappedRotationDelta = Snap.RotationDelta(rotationDelta);

            transform.position = Snap.RotateAroundPivot(mesh.transform, transform.position, drag.transform.position, snappedRotationDelta);
        }
Exemple #2
0
        public void UpdatePositions(Transform controller, int controllerIndex)
        {
            Vector3    controllerPosition        = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, controller.position) : controller.position;
            Quaternion snappedControllerRotation = Snap.RotationDelta(controller.rotation);
            Vector3    up            = CalculateNormal(center, controllerPosition, controllerPosition + snappedControllerRotation * Vector3.right);
            int        numberOfSides = NumSidesByTwoVectors(controller.up, up);

            if (numberOfSides != lastNumberOfSides)
            {
                DestroyAndRecreateVertices(numberOfSides, controllerPosition, up);
            }
            else
            {
                MoveVertices(numberOfSides, controllerPosition, up);
            }
            lastNumberOfSides = numberOfSides;
        }