コード例 #1
0
ファイル: DateTimeAxis.cs プロジェクト: eyouyou/WpfDrawing
        public override double IntervalPositioning(ValueSection section, IVariable variable, int step)
        {
            var variable_data = (variable as Value <DateTime>).Data;

            variable = new Value <DateTime>(variable_data.AddMilliseconds(MinUnit * step));

            var data = (variable as Value <DateTime>).Data;

            var left  = (section.Left as Value <DateTime>).Data;
            var right = (section.Right as Value <DateTime>).Data;

            if (data < left || data > right)
            {
                return(double.NaN);
            }
            List <ValueSection> total = GetSectionsExcept(section);
            var totalMilliseconds     = 0.0;
            var index      = 0;
            var data_index = -1;

            foreach (var item in total)
            {
                if (item.Contains(variable))
                {
                    data_index = index;
                }
                var left_except  = (item.Left.ValueData("") as Value <DateTime>).Data;
                var right_except = (item.Right.ValueData("") as Value <DateTime>).Data;

                totalMilliseconds += (right_except - left_except).TotalMilliseconds;
                index++;
            }
            if (total.Count == 1 && total[0].Equals(section))
            {
                return((data - left).TotalMilliseconds / totalMilliseconds);
            }
            else if (total.Count == 0)
            {
                return(double.NaN);
            }
            else
            {
                var sum = total.Take(data_index).Select(it => ((it.Right.ValueData("") as Value <DateTime>).Data - (it.Left.ValueData("") as Value <DateTime>).Data).TotalMilliseconds
                                                        / totalMilliseconds).Sum();

                var current_left  = (total[data_index].Left.ValueData("") as Value <DateTime>).Data;
                var current_right = (total[data_index].Right.ValueData("") as Value <DateTime>).Data;

                return((data - current_left).TotalMilliseconds / totalMilliseconds + sum);
            }
        }
コード例 #2
0
        public static List <RatioSection> GetSectionsFromRatioCroodAndSection(ValueSection range_section, DiscreteAxis xAxis, bool isInterregional, List <double> ratios, List <IVariable> data)
        {
            List <RatioSection> list = new List <RatioSection>();

            ratios = new List <double>(ratios);
            var ratios_temp = ratios;
            var last        = data.Last();

            if (data.Count == 1 && range_section.Contains(last))
            {
                var position = xAxis.IntervalPositioning(range_section, last, 1);
                ratios.Add(position);
            }

            if (isInterregional)
            {
                ratios.Insert(0, 0);
                for (int i = 0; i < ratios.Count - 1; i++)
                {
                    var          item    = ratios[i];
                    RatioSection section = new RatioSection();
                    section.Left        = item;
                    section.Right       = ratios[i + 1];
                    section.Current     = (section.Left + section.Right) / 2;
                    section.CurrentData = i < data.Count ? data[i] : Value.Bad;
                    list.Add(section);
                }
            }
            else
            {
                for (int i = 0; i < ratios_temp.Count; i++)
                {
                    var item = ratios[i];

                    RatioSection section = new RatioSection();
                    section.Current     = item;// section.Left + section.Right - section.Left / 2;
                    section.CurrentData = i < data.Count ? data[i] : Value.Bad;

                    section.Left  = i - 1 >= 0 ? (ratios[i - 1] + item) / 2 : item - ratios[i + 1] / 2;
                    section.Right = i + 1 < ratios.Count ? (ratios[i + 1] + item) / 2 : item + ratios[i - 1] / 2;
                    list.Add(section);
                }
            }
            return(list);
        }
コード例 #3
0
ファイル: DiscreteAxis.cs プロジェクト: eyouyou/WpfDrawing
        public List <ValueSection> GetSectionsExcept(ValueSection section)
        {
            var total = new List <ValueSection>();

            if (ExceptSections != null && ExceptSections.Count > 0)
            {
                foreach (var item in ExceptSections)
                {
                    total.AddRange(section.Except(item));
                }
            }
            else
            {
                return(new List <ValueSection>()
                {
                    section
                });
            }
            return(total);
        }
コード例 #4
0
ファイル: CategoryAxis.cs プロジェクト: eyouyou/WpfDrawing
 public override double IntervalPositioning(ValueSection section, IVariable variable, int step)
 {
     return(double.NaN);
 }