Beispiel #1
0
        /// <summary>
        /// Gets the unit.
        /// </summary>
        /// <param name="current">The current.</param>
        /// <param name="levelFromCurrent">How much levels from the current unit? same factors are ignored</param>
        /// <returns></returns>
        public measureSystemUnitEntry GetUnit(measureSystemUnitEntry current, Int32 levelFromCurrent)
        {
            measureUnitLevelChange direction = measureUnitLevelChange.optimum;
            measureSystemUnitEntry candidate = current;
            measureSystemUnitEntry next      = null;

            if (levelFromCurrent < 0)
            {
                direction = measureUnitLevelChange.goLower;
            }
            if (levelFromCurrent > 0)
            {
                direction = measureUnitLevelChange.goHigher;
            }

            if (direction == measureUnitLevelChange.optimum)
            {
                return(current);
            }

            levelFromCurrent = Math.Abs(levelFromCurrent);

            do
            {
                next = GetUnit(candidate, direction);
                levelFromCurrent--;
                if (candidate == next)
                {
                    break;
                }
                candidate = next;
            } while (levelFromCurrent > 0);

            return(candidate);
        }
Beispiel #2
0
        /// <summary>
        /// Gets next unit in specified direction <see cref="measureUnitLevelChange"/>
        /// </summary>
        /// <param name="current">The current.</param>
        /// <param name="direction">The direction to get next unit</param>
        /// <returns>Next defined unit level with different factor</returns>
        public measureSystemUnitEntry GetUnit(measureSystemUnitEntry current, measureUnitLevelChange direction)
        {
            var    cindex  = units.IndexOf(current);
            double cfactor = current.factor;
            measureSystemUnitEntry candidate = current;

            do
            {
                if (direction == measureUnitLevelChange.goLower)
                {
                    if (cindex > 0)
                    {
                        cindex--;
                    }
                    else
                    {
                        break;
                    }
                }
                else if (direction == measureUnitLevelChange.goHigher)
                {
                    if (cindex < (units.Count - 1))
                    {
                        cindex++;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }

                candidate = units[cindex];

                if (candidate == null)
                {
                    break;
                }
            } while (candidate.factor == cfactor);

            return(candidate);
        }
Beispiel #3
0
        /// <summary>
        /// Gets the factor distance.
        /// </summary>
        /// <param name="current">The current.</param>
        /// <param name="direction">The direction.</param>
        /// <returns></returns>
        public double GetFactorDistance(measureSystemUnitEntry current, measureUnitLevelChange direction)
        {
            measureSystemUnitEntry next = GetUnit(current, direction);

            return(current.GetFactorDistance(next));
        }