Пример #1
0
        //private void CreateAggregatedFile(string aggregatedFile, params string[] sourceFilesNames)
        //{
        //    using (var aggregateStream = File.Open(aggregatedFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite))
        //    {

        //        List<Files.LocatorFile> sourceFiles = new List<Files.LocatorFile>(sourceFilesNames.Length);

        //        foreach (var filePath in sourceFilesNames.OrderBy(x => x))
        //        {
        //            var fileProp = new Files.FileProperties(filePath);
        //            var header = Factories.Header.Abstract.HeaderFactory.GetFactory(fileProp).Create(filePath);
        //            var file = Factories.File.Abstract.FileFactory.GetFactory(fileProp).Create(fileProp, header, null);

        //            sourceFiles.Add(file);
        //        }

        //        int index = 0;

        //        foreach (var file in sourceFiles)
        //        {
        //            using (var sourceStream = File.Open(file.Properties.FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        //            {

        //                byte[] dataString = new byte[file.Width * file.Header.BytesPerSample + file.Header.FileHeaderLength];

        //                while (sourceStream.Position != sourceStream.Length)
        //                {
        //                    sourceStream.CopyTo(aggregateStream);
        //                    OnProgressReport((int)(++index / (float)sourceFiles.Count * 100));
        //                    if (OnCancelWorker())
        //                    {
        //                        return;
        //                    }
        //                }

        //            }
        //        }

        //    }

        //}

        private void CreateAggregatedFile(string aggregatedFile, params string[] sourceFilesNames)
        {
            using (var aggregateStream = File.Open(aggregatedFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite))
            {

                List<Files.LocatorFile> sourceFiles = new List<Files.LocatorFile>(sourceFilesNames.Length);

                foreach (var filePath in sourceFilesNames)
                {
                    var fileProp = new Files.FileProperties(filePath);
                    var header = Factories.Header.Abstract.HeaderFactory.GetFactory(fileProp).Create(filePath);
                    var file = Factories.File.Abstract.FileFactory.GetFactory(fileProp).Create(fileProp, header, null);

                    sourceFiles.Add(file);
                }

                float totalLines = sourceFiles.Select(x => x.Height).Sum();
                int index = 0;


                foreach (var file in sourceFiles)
                {
                    using (var sourceStream = File.Open(file.Properties.FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {

                        byte[] dataString = new byte[file.Width * file.Header.BytesPerSample + file.Header.FileHeaderLength];

                        while (sourceStream.Position != sourceStream.Length)
                        {
                            sourceStream.Read(dataString, 0, dataString.Length);
                            aggregateStream.Write(dataString, 0, dataString.Length);


                            OnProgressReport((int)(index / totalLines * 100));
                            if (OnCancelWorker())
                            {
                                return;
                            }
                            index++;
                        }

                    }
                }

            }

        }
Пример #2
0
        private async void FillDataGrid()
        {
            List<HeaderInfoOutput> headerInfos = new List<HeaderInfoOutput>();

            string[] files = null;
            try
            {
                files = Directory.GetFiles(treeView1.SelectedNode == null ? GetFullName(treeView1.Nodes[0])
                   : GetFullName(treeView1.SelectedNode));
            }
            catch (IOException)
            {
                return;
            }
            var locatorFiles = await GetLocatorFiles(files);

            foreach (var file in locatorFiles)
            {
                try
                {
                    var props = new Files.FileProperties(file);
                    var header = (props.Type == FileType.raw) ? null :
                        Factories.Header.Abstract.HeaderFactory.GetFactory(props).Create(file);
                    headerInfos.Add(Factories.FilePreview.Abstract.FilePreviewFactory.GetFactory(props)
                        .Create(file, header).GetPreview());
                }
                catch (Exception ex)
                {
                    Logging.Logger.Log(Logging.SeverityGrades.Internal, string.Format("Error in file preview: {0}", ex));
                }
            }

            dataGridView1.Rows.Clear();

            for (int i = 0; i < headerInfos.Count; i++)
            {
                dataGridView1.Rows.Add();


                dataGridView1.Rows[i].Cells[0].Value = Path.GetFileNameWithoutExtension(headerInfos[i].HeaderName);
                dataGridView1.Rows[i].Cells[1].Value = Path.GetExtension(headerInfos[i].HeaderName);
                for (int j = 1; j < headerInfos[i].Params.Count(); j++)
                {
                    dataGridView1.Rows[i].Cells[j + 1].Value = headerInfos[i].Params.ToArray()[j].Item2;
                }
            }

        }
Пример #3
0
        private DocX PrepareReport(string reportFilePath, string locatorFilePath, ReporterSettings reporterSettings)
        {

            DocX document = DocX.Create(reportFilePath);

            var prop = new Files.FileProperties(locatorFilePath);
            var fileHeader = Factories.Header.Abstract.HeaderFactory.GetFactory(prop)
                .Create(locatorFilePath);

            var file = Factories.File.Abstract.FileFactory.GetFactory(prop)
                .Create(prop, fileHeader, null);


            Paragraph p = document.InsertParagraph();
            p.Alignment = Alignment.center;
            p.Append(System.IO.Path.GetFileName(locatorFilePath)).Bold().FontSize(20)
            .Append(Environment.NewLine)
            .Append(Environment.NewLine);


            if (reporterSettings.AddArea)
            {
                p.Append(string.Format("Площадь засвеченной поверхности: {0}км2",
                (Factories.AreaSizeCalc.Abstract.AreaSizeCalcFactory.GetFactory(file
                .Properties).Create(file.Header).CalculateArea(file.Width, file.Height) / 1000 / 1000)
                .ToString(".################################")))
                .Append(Environment.NewLine);
            }


            var cornerCoord = Factories.CornerCoords.Abstract.CornerCoordFactory
                .GetFactory(file.Properties)
                .Create(file, reporterSettings.FirstLineOffset, reporterSettings.LastLineOffset, reporterSettings.ReadToEnd);


            if (reporterSettings.AddTimes)
            {
                Paragraph timesParagraph = document.InsertParagraph();
                timesParagraph.Alignment = Alignment.left;
                foreach (var entry in cornerCoord.GetZoneStartAndEndTimes())
                {
                    timesParagraph.Append(string.Format("{0}: {1}", entry.Item1, entry.Item2));
                    timesParagraph.Append(Environment.NewLine);
                }
            }

            if (reporterSettings.AddCenter)
            {
                Paragraph cornersParagraph = document.InsertParagraph();
                cornersParagraph.Alignment = Alignment.left;
                foreach (var entry in cornerCoord.GetCenterCoordinates())
                {
                    cornersParagraph.Append(string.Format("{0}: {1}", entry.Item1, entry.Item2));
                    cornersParagraph.Append(Environment.NewLine);
                }
            }


            if (reporterSettings.AddCorners)
            {
                Paragraph cornersParagraph = document.InsertParagraph();
                cornersParagraph.Alignment = Alignment.left;
                foreach (var entry in cornerCoord.GetCoornerCoordinates())
                {
                    cornersParagraph.Append(string.Format("{0}: {1}", entry.Item1, entry.Item2));
                    cornersParagraph.Append(Environment.NewLine);
                }
            }

            if (reporterSettings.AddParametersTable)
            {
                foreach (var subHeaderInfo in file.Header.HeaderInfo)
                {
                    var headerTable = PrepareHeaderInfoTable(document, subHeaderInfo);
                    headerTable.AutoFit = AutoFit.Window;
                    document.InsertTable(headerTable);
                }
            }

            return document;
        }
Пример #4
0
        private void loaderWorker_InitFile(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            try
            {
                _properties = new Files.FileProperties((string)e.Argument);
                _header = Factories.Header.Abstract.HeaderFactory.GetFactory(_properties).Create(_properties.FilePath);

                _navi = Factories.NavigationContainer.Abstract.NavigationContainerFactory.GetFactory(_properties).Create(_properties, _header);

                _navi.Report += (s, pe) => ProgressReporter(pe.Percent);
                _navi.CancelJob += (s, ce) => ce.Cancel = _navi.Cancelled;
                _navi.ReportName += (s, tne) => ThreadHelper.ThreadSafeUpdateToolStrip<ToolStripStatusLabel>(_form.StatusLabel, lbl => { lbl.Text = tne.Name; });

                _cancellableAction = _navi;
                _navi.GetNavigation();
            }
            catch (OperationCanceledException)
            {
                e.Cancel = true;
                return;
            }

            _file = FileFactory.GetFactory(_properties).Create(_properties, _header, _navi);

            _ruler = new Behaviors.Ruler.RulerProxy(_file);
            _saver = SaverFactory.GetFactory(_properties).Create(_file);
            _searcher = Factories.NavigationSearcher.Abstract.PointFinderFactory.GetFactory(_file.Properties).Create(_file);
            _analyzer = new Behaviors.Analyzing.SampleAnalyzer();
            _pointSelector = new Behaviors.PointSelector.PointSelector();
            _areaSelector = new Behaviors.AreaSelector.AreaSelector(_file);
            _areaAligningWrapper = new Behaviors.AreaSelector.AreaSelectorsAlignerContainer();

            if (_pointSharer != null)
            {
                _pointSharer.DataReceived -= (s, gde) => CrossAppDataReceivedCallback(s, gde);
                _pointSharer.Dispose();
            }

            _pointSharer = Factories.PointSharer.Abstract.PointSharerFactory.GetFactory(_file.Properties).Create(_file,
                 new Behaviors.CrossAppCommunication.UdpExchange(_settings.MulticastEp, Behaviors.CrossAppCommunication.CommunicationType.Multicast),
                 System.Diagnostics.Process.GetCurrentProcess().Id);

            _pointSharer.DataReceived += (s, gde) => CrossAppDataReceivedCallback(s, gde);
        }
Пример #5
0
        private void loaderWorker_AlignImageCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            _aligner.Report -= (s, pe) => ProgressReporter(pe.Percent);
            _aligner.CancelJob -= (s, ce) => ce.Cancel = _aligner.Cancelled;


            if (e.Cancelled)
            {
                Logging.Logger.Log(Logging.SeverityGrades.Info, string.Format("Image aligning cancelled"));
            }
            else if (e.Error != null)
            {
                Logging.Logger.Log(Logging.SeverityGrades.Blocking, string.Format("Error occured while aligning image: {0}", e.Error.Message));
                Forms.FormsHelper.ShowErrorMsg("Unable to align image");
            }
            else
            {
                var fileName = Path.GetFullPath((string)e.Result);
                fileName = Path.ChangeExtension(fileName, "brl4");

                var type = new Files.FileProperties(fileName).Type;
                if (type != FileType.raw && type != FileType.r)
                {
                    EmbedNavigation(fileName, false);
                }

                Logging.Logger.Log(Logging.SeverityGrades.Info,
                    string.Format("Image aligning completed, new file saved at: {0}", fileName));
            }
            InitProgressControls(false);
        }
Пример #6
0
        private void EmbedNavigation(string rliFileName, bool forced = true)
        {
            var fileToChangeProp = new Files.FileProperties(rliFileName);
            var fileToChangeHeader = Factories.Header.Abstract.HeaderFactory.GetFactory(fileToChangeProp).Create(rliFileName);
            var fileToChange = Factories.File.Abstract.FileFactory.GetFactory(fileToChangeProp).Create(fileToChangeProp, fileToChangeHeader, null);

            if (!forced)
            {
                if (!Behaviors.Navigation.NavigationChanger.Abstract.NavigationChanger.HasBaRhgSource(fileToChange))
                {
                    Logging.Logger.Log(Logging.SeverityGrades.Info, @"Aligned image doesn't have .ba file as its source, navigation embedding process stopped.
                    Consider using manual embedding");
                    return;
                }
            }

            Behaviors.Navigation.NavigationChanger.Abstract.NavigationChanger naviChanger = null;

            using (var ofd = new OpenFileDialog() { Title = "Выберите исходный файл РГГ", Filter = Resources.NaviEmbeddingFilterSource })
            {
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        var sourceFileProp = new Files.FileProperties(ofd.FileName);
                        var sourceFileHeader = Factories.Header.Abstract.HeaderFactory.GetFactory(sourceFileProp).Create(ofd.FileName);
                        var sourceFile = Factories.File.Abstract.FileFactory.GetFactory(sourceFileProp).Create(sourceFileProp, sourceFileHeader, null);

                        naviChanger = Factories.NavigationChanger.Abstract.NavigationChangerFactory.GetFactory(fileToChangeProp).Create(fileToChange, sourceFile);

                        naviChanger.ChangeFlightTime();
                        naviChanger.ChangeNavigation();
                        Logging.Logger.Log(Logging.SeverityGrades.Info,
                            string.Format("Successfully applied navigation to {0}", rliFileName));
                    }
                    catch (Exception ex)
                    {
                        Logging.Logger.Log(Logging.SeverityGrades.Error,
                            string.Format("Unable to embed new navigation: {0}", ex.Message));
                        Forms.FormsHelper.ShowErrorMsg("Не удалось вшить навигацию");
                    }
                }
            }
        }