private void plotter_Loaded(object sender, RoutedEventArgs e) { innerPlotter.ViewportBindingConverter = new InjectedPlotterVerticalSyncConverter(innerPlotter); if (Record != null && !string.IsNullOrEmpty(Record.Id)) { Record = MySession.Session.Get<Exerciserecord>(Record.Id); if (Record != null) { float[] targetLine = null; float[] actionLine = null; float[] powerLine = null; int xLength = int.MaxValue; if (Record.Record1 != null && !string.IsNullOrEmpty(Record.Record1)) //目标轨迹 { var temp = record.Record1.Split('|'); targetLine = new float[temp.Length]; for (int i = 0; i < temp.Length; i++) { if (!string.IsNullOrEmpty(temp[i])) { targetLine[i] = Convert.ToSingle(temp[i]); } } if (temp.Length < xLength) xLength = temp.Length; } if (Record.Record2 != null && !string.IsNullOrEmpty(Record.Record2)) //实际运动轨迹 { var temp = record.Record2.Split('|'); actionLine = new float[temp.Length]; for (int i = 0; i < temp.Length; i++) { if (!string.IsNullOrEmpty(temp[i])) { actionLine[i] = Convert.ToSingle(temp[i]); } } if (temp.Length < xLength) xLength = temp.Length; } if (Record.Record3 != null && !string.IsNullOrEmpty(Record.Record3)) //力量 { var temp = record.Record3.Split('|'); powerLine = new float[temp.Length]; for (int i = 0; i < temp.Length; i++) { if (!string.IsNullOrEmpty(temp[i])) { powerLine[i] = Convert.ToSingle(temp[i]); } } if (temp.Length < xLength) xLength = temp.Length; } if (xLength < int.MaxValue) { //添加X轴 var xs = Enumerable.Range(1, xLength).Select(i => i * 1).ToArray(); //var xds = xs.AsXDataSource(); plotter.Visible = DataRect.Create(0, -60, xLength, 60); //添加目标轨迹 if (targetLine != null) { var target = targetLine.Take(xLength).ToArray(); //var tl = target.Join(xds); var tl = new List<Point>(); for (int i = 0; i < xLength; i++) { Point p = new Point(xs[i], target[i]); tl.Add(p); } var ds = new EnumerableDataSource<Point>(tl); ds.SetXYMapping(pt => pt); plotter.AddLineGraph(ds, Colors.Red, 2, "目标轨迹"); } //添加运动轨迹 if (actionLine != null) { var action = actionLine.Take(xLength).ToArray(); //var al = action.Join(xds); var al = new List<Point>(); for (int i = 0; i < xLength; i++) { Point p = new Point(xs[i], action[i]); al.Add(p); } var ds = new EnumerableDataSource<Point>(al); ds.SetXYMapping(pt => pt); plotter.AddLineGraph(ds, Colors.Blue, 2, "运动轨迹"); } //添加力量 if (powerLine != null) { var power = powerLine.Take(xLength).ToArray(); //var pl = power.Join(xds); var pl = new List<Point>(); for (int i = 0; i < xLength; i++) { Point p = new Point(xs[i], power[i]); pl.Add(p); } var ds = new EnumerableDataSource<Point>(pl); ds.SetXYMapping(pt => pt); innerPlotter.AddLineGraph(ds, Colors.Yellow, 2, "力量"); } } //添加分组训练信息(图2) if (record.GroupRecord != null) { List<ClusteredBarData> barData = new List<ClusteredBarData>(); var group = record.GroupRecord.Split('|'); var groupRecords = new List<RecordData>(); for (int i = 0; i < group.Length; i++) { ClusteredBarData cbd = new ClusteredBarData(); var temp = group[i].Split(','); BarData bd = new BarData { YMin = Convert.ToSingle(temp[1]), YMax = Convert.ToSingle(temp[2]) }; bd.BrushColor = Colors.Blue; cbd.X = Convert.ToInt32(temp[0]); cbd.BarDatas = new List<BarData>(); cbd.BarDatas.Add(bd); barData.Add(cbd); } EnumerableDataSource<ClusteredBarData> ds = new EnumerableDataSource<ClusteredBarData>(barData); ds.SetXMapping(x => x.X); ds.SetYMapping(y => y.BarDatas[0].YMax); DataContext = ds; } } } }
private void gvDetail_SelectionChanged(object sender, SelectionChangedEventArgs e) { ReportDetail record = gvDetail.SelectedItem as ReportDetail; Exerciserecord item = new Exerciserecord(); item.Id = record.ExItemId; trainRecordDialog = new TrainDialog(); trainRecordDialog.Parent = this; TrainRecordDialog child = new TrainRecordDialog(); child.Close += new EventHandler(child_Close); child.Record = item; trainRecordDialog.Content = child; trainRecordDialog.Show(); }
private void SaveTrainRecord(TrainRecord record) { Application.Current.Dispatcher.Invoke(new Action(() => { try { if (record.ModeId == (int)ModeEnum.Fit) return; if (record != null) { Exerciserecord er = new Exerciserecord(); er.Id = Guid.NewGuid().ToString("N"); er.ActionId = record.ActionId; er.EndTime = record.EndTime; er.ExerciseDate = record.ExerciseDate; er.ExMinutes = record.ExMinutes; er.Times = record.Times; er.FactTimes = record.FactTimes; er.RobotForce = record.Force; er.IsFit = record.IsFit; er.MaxAngle = record.MaxAngle; er.MinAngle = record.MinAngle; er.ModeId = record.ModeId; er.PatientId = ModuleConstant.PatientId; er.Speed = record.Speed; er.StartTime = record.StartTime; er.Maxforce = record.MaxForce; er.AvgForce = record.AvgForce; er.RealMinAngle = record.RealMinAngle; er.RealMaxAngle = record.RealMaxAngle; er.GroupNum = record.GroupNum; er.PushRodValue = record.PushRodValue; StringBuilder sb = new StringBuilder(); if (record.TargetLine != null) { for (int i = 0; i < record.TargetLine.Length; i++) { if (i == 0) { sb.Append(record.TargetLine[i].ToString("#0.00")); } else { sb.Append("|").Append(record.TargetLine[i].ToString("#0.00")); } } er.Record1 = sb.ToString(); } sb = new StringBuilder(); if (record.RealLine != null) { for (int i = 0; i < record.RealLine.Length; i++) { if (i == 0) { sb.Append(record.RealLine[i].ToString("#0.00")); } else { sb.Append("|").Append(record.RealLine[i].ToString("#0.00")); } } er.Record2 = sb.ToString(); } sb = new StringBuilder(); if (record.ForceLine != null) { for (int i = 0; i < record.ForceLine.Length; i++) { if (i == 0) { sb.Append(record.ForceLine[i].ToString("#0.00")); } else { sb.Append("|").Append(record.ForceLine[i].ToString("#0.00")); } } er.Record3 = sb.ToString(); } sb = new StringBuilder(); if (record.GroupRecords != null) { for (int i = 0; i < record.GroupRecords.Length; i++) { if (i > 0) { sb.Append("|"); } sb.Append(record.GroupRecords[i].GroupNum).Append(",") .Append(record.GroupRecords[i].Min.ToString("#0.00")).Append(",") .Append(record.GroupRecords[i].Max.ToString("#0.00")); } er.GroupRecord = sb.ToString(); } MySession.Session.Save(er); MySession.Session.Flush(); } } catch {} })); }