public void LoadScript(string scriptFileName) { Trace.WriteLine("Loading script '" + scriptFileName + "'", "ENGINE"); Settings = new FlightSettings(); Heap.Clear(); Report = null; //TODO: initialize all variables Directory.SetCurrentDirectory(Path.GetDirectoryName(scriptFileName)); var lines = File.ReadAllLines(scriptFileName); string line; int lineNumber = 0; try { for (lineNumber = 0; lineNumber < lines.Length; lineNumber++) { line = lines[lineNumber]; var obj = ScriptingObject.Parse(this, line); if (obj != null) { //place on heap Heap.Add(obj.Definition.ObjectName, obj); } } } catch (Exception ex) { var message = "line " + (lineNumber + 1).ToString() + ": " + ex.Message; Trace.WriteLine("Exception parsing " + message, "ENGINE"); throw new ArgumentException(message); } if (!Settings.AreWellInitialized()) { var message = "Incomplete script: DATETIME, UTCOFFSET, DATUM, UTMZONE and MAP are required."; Trace.WriteLine("Exception: " + message, "ENGINE"); throw new ArgumentException(message); } RaisePropertyChanged("Settings"); RaisePropertyChanged("ShortDescription"); RaisePropertyChanged("Detail"); Display(true); }
//constructor protected FlightReport(FlightSettings settings) { Settings = settings; SignatureStatus = SignatureStatus.NotSigned; pilotId = 0; LoggerModel = ""; LoggerSerialNumber = ""; debriefers = new List <string>(); OriginalTrack = new AXPoint[0]; Markers = new ObservableCollection <AXWaypoint>(); DeclaredGoals = new ObservableCollection <GoalDeclaration>(); Notes = new ObservableCollection <string>(); }
//factory public static FlightReport Load(string debriefer, string filePath, FlightSettings settings) { FlightReport report = null; var ext = Path.GetExtension(filePath).ToLower(); if (ext == SerializedFileExtension) { //deserialize report report = ObjectSerializer <FlightReport> .Load(filePath, serializationFormat); report.Debriefer = debriefer; report.DoTrackCleanUp(); } else { var logFile = LoggerFile.Load(filePath, settings.UtcOffset, settings.AltitudeCorrectionsFileName); //check pilot id var pilotId = logFile.PilotId; if (pilotId == 0) { //try to get the pilot Id from filename //The file name must contain a P or p followed with pilot number (1 to 3 digits) //examples: f001_p021_l0.trk, Flight01P001.trk, 20120530AM_p01.trk, 0530AMP02_1.trk var pattern = @"P(\d{1,3})"; var input = Path.GetFileName(filePath); var matches = Regex.Matches(input, pattern, RegexOptions.IgnoreCase); if (matches.Count == 1) { pilotId = int.Parse(matches[0].Groups[1].Value); } if (pilotId == 0) { throw new Exception( "The pilot id is not present in the track log file and it could not be inferred from the file name.\n" + "The file name must contain a P or p followed with pilot number (1 to 3 digits)\n" + "examples: f001_p021_l0.trk, Flight01P001.trk, 20120530AM_p01.trk, 0530AMP02_1.trk" ); } } //Convert geographical coordinates to AX coordinates var tracklog = logFile.GetTrackLog(); var track = new AXPoint[tracklog.Length]; Parallel.For(0, track.Length, i => { track[i] = settings.FromGeoToAXPoint(tracklog[i], logFile.IsAltitudeBarometric); }); var markers = new ObservableCollection <AXWaypoint>(); foreach (var m in logFile.GetMarkers()) { markers.Add(settings.FromGeoToAXWaypoint(m, logFile.IsAltitudeBarometric)); } var declarations = new ObservableCollection <GoalDeclaration>(); foreach (var d in logFile.GetGoalDeclarations()) { declarations.Add(d); } //Make new report report = new FlightReport(settings) { Debriefer = debriefer, IsDirty = true, LogFile = logFile, SignatureStatus = logFile.SignatureStatus, pilotId = pilotId, //don't use PilotId on constructor! LoggerModel = logFile.LoggerModel, LoggerSerialNumber = logFile.LoggerSerialNumber, OriginalTrack = track, Markers = markers, DeclaredGoals = declarations, Notes = new ObservableCollection <string>() }; switch (logFile.SignatureStatus) { case SignatureStatus.NotSigned: report.Notes.Add("The log file is not signed"); break; case SignatureStatus.Genuine: report.Notes.Add("The log file has a valid signature"); break; case SignatureStatus.Counterfeit: report.Notes.Add("*** THE LOG FILE HAS AN INVALID SIGNATURE! ***"); break; } report.DoTrackCleanUp(); report.DetectTakeOffAndLanding(); } return(report); }
public ScriptingEngine(MapViewerControl mapViewer) { MapViewer = mapViewer; Settings = new FlightSettings(); Heap = new Dictionary <string, ScriptingObject>(); }