Esempio n. 1
0
        /// <summary>
        /// Set up the interpolation state for processing of an epoch interval between two measurement epochs
        /// </summary>
        /// <param name="ClearInterpolators"></param>
        /// <param name="LeftInterpolationFence"></param>
        /// <param name="RightInterpolationFence"></param>
        /// <param name="LeftFence1"></param>
        /// <param name="LeftFence2"></param>
        /// <param name="RightFence1"></param>
        /// <param name="RightFence2"></param>
        /// <param name="Height1"></param>
        /// <param name="Height2"></param>
        /// <param name="Time1"></param>
        /// <param name="Time2"></param>
        /// <param name="ADataTime"></param>
        /// <param name="ADataLeft"></param>
        /// <param name="ADataRight"></param>
        private void SetupInterpolators(bool ClearInterpolators,
                                        Fence LeftInterpolationFence, Fence RightInterpolationFence,
                                        FencePoint LeftFence1, FencePoint LeftFence2,
                                        FencePoint RightFence1, FencePoint RightFence2,
                                        ref XYZ Height1, ref XYZ Height2,
                                        ref XYZ Time1, ref XYZ Time2,
                                        double ADataTime,
                                        XYZ ADataLeft, XYZ ADataRight)
        {
            if (ClearInterpolators)
            {
                for (int i = 0, limit = InterpolationFences.Length; i < limit; i++)
                {
                    InterpolationFences[i].Clear();
                }
            }

            if (ADataLeft.IsNull || ADataRight.IsNull)
            {
                // There is no data available to construct an interpolation context...
                return;
            }

            if (MachineWheelWidth > 0)
            {
                double DeltaX         = ADataRight.X - ADataLeft.X;
                double DeltaY         = ADataRight.Y - ADataLeft.Y;
                double WheelBaseWidth = Math.Sqrt(DeltaX * DeltaX + DeltaY * DeltaY);
                double Ratio          = MachineWheelWidth / WheelBaseWidth;

                if (Ratio >= 0.5)
                {
                    LeftFence1.SetXY(ADataLeft.X, ADataLeft.Y);
                    LeftFence2.SetXY(ADataRight.X, ADataRight.Y);
                    InterpolationFences[MachineSideConst.None].Add(LeftInterpolationFence); // machine side none
                }
                else
                {
                    LeftFence1.SetXY(ADataLeft.X, ADataLeft.Y);
                    LeftFence2.SetXY(ADataLeft.X + Ratio * DeltaX, ADataLeft.Y + Ratio * DeltaY);
                    InterpolationFences[MachineSideConst.Left].Add(LeftInterpolationFence); // machine side left

                    RightFence1.SetXY(ADataRight.X - Ratio * DeltaX, ADataRight.Y - Ratio * DeltaY);
                    RightFence2.SetXY(ADataRight.X, ADataRight.Y);
                    InterpolationFences[MachineSideConst.Right].Add(RightInterpolationFence); // machine side right
                }
            }
            else
            {
                LeftFence1.SetXY(ADataLeft.X, ADataLeft.Y);
                LeftFence2.SetXY(ADataRight.X, ADataRight.Y);
                InterpolationFences[MachineSideConst.None].Add(LeftInterpolationFence); // machine side none
            }

            Height1 = ADataLeft;
            Height2 = ADataRight;

            Time1 = new XYZ(ADataLeft.X, ADataLeft.Y, ADataTime);
            Time2 = new XYZ(ADataRight.X, ADataRight.Y, ADataTime);
        }
Esempio n. 2
0
        public void Test_FencePointTests_SetXYTest()
        {
            FencePoint fp = new FencePoint(10.0, 10.0);

            fp.SetXY(100.0, 200.0);

            Assert.True(fp.X == 100.0 && fp.Y == 200.0 && fp.Z == Consts.NullDouble, "Fence point not created as expected");
        }