/// <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); } }
/// <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); } }