Exemple #1
0
        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);
        }
Exemple #2
0
 //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>();
 }
Exemple #3
0
        //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);
        }
Exemple #4
0
 public ScriptingEngine(MapViewerControl mapViewer)
 {
     MapViewer = mapViewer;
     Settings  = new FlightSettings();
     Heap      = new Dictionary <string, ScriptingObject>();
 }