private Trajectory readTrajectory(string inputFileName, out GaitFile file) { var input = (EinputMode)Enum.Parse(typeof(EinputMode), ConfigurationManager.AppSettings["inputMode"], true); var projection = (EprojectionMode)Enum.Parse(typeof(EprojectionMode), ConfigurationManager.AppSettings["projectionMode"], true); file = new GaitFile(); Trajectory trajectory = new Trajectory(); Frame fr; file.ReadFile(inputFileName); trajectory.points = new List <Point>(); long frameNum = -1; while ((fr = file.GetNextFrame(frameNum)) != null) { trajectory.add(fr); frameNum = fr.FrameNumber; } if (projection == EprojectionMode.ground) { trajectory.rotateTrajectory(); } trajectory.samplingRate = (input == EinputMode.wii) ? 100 : 30; return(trajectory); }
private void RecordTimes_SelectionChanged(object sender, SelectionChangedEventArgs e) { detailsTable.Clear(); timeLine.Points.Clear(); trajectory.points.Clear(); frames.Clear(); if (e.AddedItems.Count == 0) { return; } string filename = ((AnalysisFile)e.AddedItems[0]).FullName; var metrics = Metrics.load(filename); foreach (Metric m in metrics) { var row = detailsTable.NewRow(); row["Metric"] = m.name; row["Value"] = m.value.ToString(m.formatting); row["Typical Range"] = String.Format("{0} - {1}", m.lowerTypicalRange.ToString(m.formatting), m.higherTypicalRange.ToString(m.formatting)); row["Preference"] = Enum.GetName(typeof(Epreference), m.preferedRange); row["Description"] = m.description; bool inRange = false; switch (m.preferedRange) { case Epreference.noPreference: inRange = true; break; case Epreference.higherIsBetter: if (m.value >= m.lowerTypicalRange) { inRange = true; } break; case Epreference.lowerIsBetter: if (m.value <= m.higherTypicalRange) { inRange = true; } break; case Epreference.inRange: if (m.value <= m.higherTypicalRange && m.value >= m.lowerTypicalRange) { inRange = true; } break; } row["In Range"] = inRange; detailsTable.Rows.Add(row); } string prefix = System.IO.Path.GetFileName(filename); if (!Tools.parseFileName(prefix, out string identifier, out string exercise, out DateTime dt)) { return; } var fileName = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(filename), identifier) + "_" + dt.ToString(Tools.dateFormat) + "_" + exercise + "_kinect.xml"; gaitFile = new GaitFile(); gaitFile.ReadFile(fileName); long frameNum = -1; Frame fr; while ((fr = gaitFile.GetNextFrame(frameNum)) != null) { if (trajectory.add(fr)) { frames.Add(fr); } frameNum = fr.FrameNumber; } trajectory.samplingRate = 30; if (applyLowPassFilterToTimeDomain) { trajectory.filter(); } var analyzer = Exercises.GetAnalyzer(exercise); var segments = analyzer.segmentTrajectory(trajectory); int segmentCounter = 0; foreach (var segment in segments) { segmentCounter++; var name = Enum.GetName(typeof(Analyzer.ESegmentType), segment.Item2); var str = String.Format("{0}) {1}", segmentCounter, name); foreach (var p in segment.Item1.points) { frameToSegmentName[p.timeStamp] = str; } } frameSelector.Maximum = trajectory.points.Count - 1; frameSelector.Value = 0; frameSelector.TickFrequency = 300; // ten seconds DrawTimeDomainGraph(); }