Exemplo n.º 1
0
        /// <summary>
        /// This method returns a vector (displacement) obtained by user input,
        /// either from clicking or typing. The input works by asking for a
        /// basepoint and then for a second point, which can be typed with absolute
        /// or relative coordinates. The difference between the 2 points is returned.
        /// </summary>
        /// <param name="v">The vector (diplacement) to be returned or Vector3.Empty if
        /// no vector could be obtained.</param>
        /// <returns>True if a valid vector (displacement) could be obtained, false otherwise.</returns>
        public bool GetVector(out Microsoft.DirectX.Vector3 v)
        {
            Snap.Magnet m1, m2;

            // Ask for 1st point
            if ((m1 = GetPoint(Culture.Get("getVector1"))) == null)
            {
                v = Microsoft.DirectX.Vector3.Empty;
                return(false);
            }

            // Activate vector Tracking
            Tracking.TrackingService ts = TrackingService;
            TrackingService = Tracking.VectorTrackingService.Instance;
            Microsoft.DirectX.Vector3 origin = m1.SnapPositionInt;
            TrackingService.SetPoint(origin);
            SnapPrimaryPoint = new Canguro.Controller.Snap.PointMagnet(origin, Canguro.Controller.Snap.PointMagnetType.SimplePoint);

            // Ask for 2nd point
            if ((m2 = GetPoint(Culture.Get("getVector2"))) == null)
            {
                v = Microsoft.DirectX.Vector3.Empty;
                TrackingService = ts;
                return(false);
            }
            SnapPrimaryPoint = new Canguro.Controller.Snap.PointMagnet(m2.SnapPositionInt, Canguro.Controller.Snap.PointMagnetType.SimplePoint);

            // Calculate and return difference
            v = m2.SnapPositionInt - origin;
            Model.UnitSystem.UnitSystem us = Canguro.Model.UnitSystem.UnitSystemsManager.Instance.CurrentSystem;
            v.X = us.FromInternational(v.X, Canguro.Model.UnitSystem.Units.Distance);
            v.Y = us.FromInternational(v.Y, Canguro.Model.UnitSystem.Units.Distance);
            v.Z = us.FromInternational(v.Z, Canguro.Model.UnitSystem.Units.Distance);

            TrackingService = ts;
            return(true);
        }