예제 #1
0
        /// <summary>
        /// 数据发生变化时调用
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataChanged(Position p)
        {
            if (OnDataChanged != null)
            {
                //筛选出的线条区间(新的线条)
                List <BrokenLine> lines = new List <BrokenLine>();

                //遍历线条
                for (int i = 0; i < brokenLines.Count; ++i)
                {
                    //筛选出状态点的值
                    List <StatePoint> points = new List <StatePoint>();
                    points.Add(new StatePoint()
                    {
                        state = 0, point = new Point(0, 0)
                    });

                    //选择状态点区间
                    for (int j = (int)((brokenLines[i].Points.Count() - 1) * p.p1);
                         j < (brokenLines[i].Points.Count() - 1) * p.p2; ++j)
                    {
                        if (j == 0 || j == (brokenLines[i].Points.Count() - 1))
                        {
                            continue;
                        }

                        double value = (brokenLines[i].Points[j].point.X - p.p1) / (p.p2 - p.p1);

                        if (value < 0 || value > 1)
                        {
                            continue;
                        }

                        points.Add(new StatePoint()
                        {
                            state = points.Count, point = new Point(value, 0)
                        });
                    }
                    points.Add(new StatePoint()
                    {
                        state = points.Count, point = new Point(1, 0)
                    });

                    lines.Add(new BrokenLine(points, brokenLines[i].Thickness, brokenLines[i].Name));
                }

                //计算时间区间
                TimeSpan timeSpan = EndTime - StartTime;

                TimeInterval t = new TimeInterval(StartTime + new TimeSpan((long)(timeSpan.Ticks * p.p1)),
                                                  StartTime + new TimeSpan((long)(timeSpan.Ticks * p.p2)));
                SelectedStartTime = t.StartTime;
                SelectedEndTime   = t.EndTime;

                //如果区间大于修改右边时间的显示位置,以免覆盖
                if (p.p2 > 0.85)
                {
                    //改变滑块右边的时间位置
                    dragBorder.ChangeRightTimePosition(0);
                    //改变缩略图右边的时间位置
                    tbk_RightTime.SetValue(Canvas.RightProperty, -57.0);
                }
                else
                {
                    dragBorder.ChangeRightTimePosition(1);
                    tbk_RightTime.SetValue(Canvas.RightProperty, -19.0);
                }

                //触发事件
                OnDataChanged?.Invoke(lines, t);
            }
        }
예제 #2
0
        /// <summary>
        /// 数据发生变化时调用
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataChanged(Position p)
        {
            if (OnDataChanged != null)
            {
                //更新选中区间
                position = p;

                //筛选出的线条区间
                List <BrokenLine> lines = new List <BrokenLine>();

                //遍历线条
                for (int i = 0; i < brokenLines.Count; ++i)
                {
                    //筛选出集合的值
                    List <Point> points = new List <Point>();
                    //选择点区间
                    for (int j = (int)(brokenLines[i].Points.Count * p.p1); j <= (int)(brokenLines[i].Points.Count * p.p2) && j < (int)(brokenLines[i].Points.Count); ++j)
                    {
                        points.Add(brokenLines[i].Points[j]);
                    }
                    lines.Add(new BrokenLine(points, brokenLines[i].Brush, brokenLines[i].Thickness, BrokenLineCapType.None, brokenLines[i].Name));



                    //////筛选出集合的值
                    //List<Double> points = new List<Double>();

                    //for (int j = 0; j < brokenLines[i].Points.Count; ++j)
                    //{
                    //    if (brokenLines[i].Points[j].X > p.p1 && brokenLines[i].Points[j].X < p.p2)
                    //    {
                    //        points.Add(brokenLines[i].Points[j]);
                    //    }
                    //}

                    ////计算集合内的值的X占筛选框的百分比
                    //for (int j = 0; j < points.Count(); ++j)
                    //{
                    //    points[j] = new Point((points[j].X - p.p1) / (p.p2 - p.p1), points[j].Y);
                    //}


                    //lines.Add(new BrokenLine(points, brokenLines[i].Brush, brokenLines[i].Thickness, brokenLines[i].BrokenLineCapType, brokenLines[i].Name));



                    #region 之前的逻辑
                    //List<Double> points = new List<Double>();

                    //选择点区间
                    //for (int j = (int)(brokenLines[i].Points.Count * p.p1);
                    //    j < (int)(brokenLines[i].Points.Count * p.p2); ++j)
                    //{
                    //    points.Add(brokenLines[i].Points[j]);
                    //}
                    //lines.Add(new BrokenLine(points, brokenLines[i].Brush, brokenLines[i].Thickness, brokenLines[i].BrokenLineCapType, brokenLines[i].Name));
                    #endregion
                }

                //计算时间区间
                TimeSpan timeSpan = EndTime - StartTime;

                TimeInterval t = new TimeInterval(StartTime + new TimeSpan((long)(timeSpan.Ticks * p.p1)),
                                                  StartTime + new TimeSpan((long)(timeSpan.Ticks * p.p2)));
                SelectedStartTime = t.StartTime;
                SelectedEndTime   = t.EndTime;

                //如果区间大于,修改右边时间的显示位置,以免覆盖
                if (p.p2 > 0.85)
                {
                    //改变滑块右边的时间位置
                    dragBorder.ChangeRightTimePosition(0);
                    //改变缩略图右边的时间位置
                    //tbk_RightTime.SetValue(Canvas.RightProperty, -57.0);
                    tbk_RightTime.Visibility = Visibility.Collapsed;
                }
                else
                {
                    dragBorder.ChangeRightTimePosition(1);
                    //tbk_RightTime.SetValue(Canvas.RightProperty, -19.0);
                    tbk_RightTime.Visibility = Visibility.Visible;
                }

                //触发事件
                OnDataChanged?.Invoke(lines, t);
            }
        }