/// <summary>
        /// Starts the operation of snapping to the outside of a bounding box which is created from the center of a transform.
        /// </summary>
        public static HUMTransform.Data.ObjectBounds ObjectBounds(this HUMTransform.Data.To to, Transform snapTo)
        {
            var snapObjectHalf  = to.positionData.from.transform.Size().Half();
            var snapToHalf      = snapTo.Size().Half();
            var snapSurfaceData = new HUMTransform.Data.ObjectBounds(snapTo, to, snapObjectHalf, snapToHalf);

            return(snapSurfaceData);
        }
        /// <summary>
        /// Snaps a previous transforms specified point to another transforms back bounding box bounds.
        /// </summary>
        public static Vector3 Back(this HUMTransform.Data.ObjectBounds bounds, float padding = 0f)
        {
            var pointOffset = Vector3.zero;

            switch (bounds.to.positionData.position)
            {
            case HUMTransform.Data.TransformSnapPosition.Center:
                pointOffset = bounds.snapTo.position - (new Vector3(0, 0, bounds.snapTo.localScale.z / 2));
                bounds.to.positionData.from.transform.Snap().Center().To().Point(pointOffset, padding);
                break;

            case HUMTransform.Data.TransformSnapPosition.Top:
                pointOffset = bounds.snapTo.position - (new Vector3(0, 0, bounds.snapTo.localScale.z / 2));
                bounds.to.positionData.from.transform.Snap().Center().To().Point(pointOffset, padding);
                break;

            case HUMTransform.Data.TransformSnapPosition.Bottom:
                pointOffset = bounds.snapTo.position - (new Vector3(0, 0, bounds.snapTo.localScale.z / 2));
                bounds.to.positionData.from.transform.Snap().Bottom().To().Point(pointOffset, padding);
                break;

            case HUMTransform.Data.TransformSnapPosition.Left:
                pointOffset = bounds.snapTo.position - (new Vector3(0, 0, bounds.snapTo.localScale.z / 2));
                bounds.to.positionData.from.transform.Snap().Left().To().Point(pointOffset, padding);
                break;

            case HUMTransform.Data.TransformSnapPosition.Right:
                pointOffset = bounds.snapTo.position - (new Vector3(0, 0, bounds.snapTo.localScale.z / 2));
                bounds.to.positionData.from.transform.Snap().Right().To().Point(pointOffset, padding);
                break;

            case HUMTransform.Data.TransformSnapPosition.Front:
                pointOffset = bounds.snapTo.position - (new Vector3(0, 0, bounds.snapTo.localScale.z / 2));
                bounds.to.positionData.from.transform.Snap().Front().To().Point(pointOffset, padding);
                break;

            case HUMTransform.Data.TransformSnapPosition.Back:
                pointOffset = bounds.snapTo.position - (new Vector3(0, 0, bounds.snapTo.localScale.z / 2));
                bounds.to.positionData.from.transform.Snap().Back().To().Point(pointOffset, padding);
                break;
            }

            return(pointOffset);
        }