private int InsertPoint(int pi, Experiment exp, DateTime start, DateTime end, Segment seg) { for (; pi < MoveData.Length; ++pi) { if (!TimePoint.IsPoint(MoveData[pi])) { continue; } TimePoint tp = new TimePoint(MoveData[pi]); if (tp.Time >= start && tp.Time <= end) { if (tp.Position.X != 0 && tp.Position.Y != 0) { seg.Points.Add(tp); exp.MaxX = Math.Max(exp.MaxX, tp.Position.X); exp.MinX = Math.Min(exp.MinX, tp.Position.X); exp.MaxY = Math.Max(exp.MaxY, tp.Position.Y); } } else if (tp.Time > end) { break; } } return pi; }
private void InssertWave(int[] ti, Experiment exp, DateTime start, DateTime end, Segment seg) { for (int i = 0; i < this.ChannelCnt; ++i) { for (; ti[i] < ChannelTime[i].Count; ++ti[i]) { DateTime tmp = ChannelTime[i][ti[i]]; if (tmp >= start && tmp <= end) { seg.WaveList[i].Add(tmp); } else if (tmp > end) { break; } } exp.MaxWaveCnt[i] = Math.Max(exp.MaxWaveCnt[i], seg.WaveList[i].Count); } }
private void GenerateSegment() { int pi = 0; int[] ti = new int[ChannelCnt]; foreach (Experiment exp in Experiments) { exp.ChannelCnt = this.ChannelCnt; exp.MaxWaveCnt = new int[this.ChannelCnt]; exp.ChannelTag = this.ChannelTag; foreach (Trail t in exp.Trils) { DateTime start, end; for (start = t.StartTime; start < t.EndTime; start = end) { end = start.AddMilliseconds(Parameters.SegmentLength) < t.EndTime ? start.AddMilliseconds(Parameters.SegmentLength) : t.EndTime; Segment seg = new Segment(this.ChannelCnt) { Tra = t }; pi = InsertPoint(pi, exp, start, end, seg); InssertWave(ti, exp, start, end, seg); t.Segments.Add(seg); seg.Length = (end - start).TotalMilliseconds; } } } }
private Shape BuildShape(Segment seg, int colorId) { Shape shape = (Shape)Activator.CreateInstance(Parameters.ShapeType); double radio = Parameters.ColorRadio[colorId]; Point c = seg.CenterPoint(); double x = c.X * Parameters.XRate; double y = (this.CavHeight + Exp.MaxY * Parameters.YRate) / 2 - c.Y * Parameters.YRate; shape.Margin = new Thickness(x - radio, CavHeight - y - radio, 0, 0); shape.Fill = Parameters.ColorList[colorId]; shape.Width = shape.Height = radio * 2; return shape; }