private void Worker_MultipleTimesDataExportCompleted(object sender, RunWorkerCompletedEventArgs e) { // unsubscribe to future events and reset resolution _worker.RunWorkerCompleted -= Worker_MultipleTimesDataExportCompleted; _fullResolution = false; // check if worker finished its jobs if (e.Cancelled) { return; } SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "CSV file (*.csv)|*.csv"; if (sfd.ShowDialog() != true) { return; } var exportOptionsWndw = new ExportOptionsWindow() { ShowMinimum = true }; if (!exportOptionsWndw.ShowDialog().Value) { return; } Exporter.ExportMultipleTimesData(sfd.FileName, (List <CurveData>)e.Result, exportOptionsWndw.IsRowAlignedData); MessageBox.Show("Export Completed"); }
private void Worker_SingleCurveDataExportCompleted(object sender, RunWorkerCompletedEventArgs e) { // unsubscribe to future events and reset resolution _worker.RunWorkerCompleted -= Worker_SingleCurveDataExportCompleted; _fullResolution = false; // check if worker finished its jobs if (e.Cancelled) { return; } SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "CSV file (*.csv)|*.csv"; if (sfd.ShowDialog() != true) { return; } var exportOptionsWndw = new ExportOptionsWindow() { ShowMinimum = false }; if (!exportOptionsWndw.ShowDialog().Value) { return; } // this is a single curve worker, so we can safely call First() var curveData = ((List <CurveData>)e.Result).First(); Exporter.ExportSingleCurveData(sfd.FileName, curveData, exportOptionsWndw.IncludeModeOfPropagation, exportOptionsWndw.IncludeFreeSpaceLoss, exportOptionsWndw.IsRowAlignedData); MessageBox.Show("Export Completed"); }
private bool CsvExport_MultipleTimePercentages(string filepath) { var inputControl = grid_Controls.Children[0] as MultipleTimeInputsControl; var exportOptionsWndw = new ExportOptionsWindow() { ShowMinimum = true }; if (!exportOptionsWndw.ShowDialog().Value) { return(false); } var version = Assembly.GetExecutingAssembly().GetName().Version; var dll = FileVersionInfo.GetVersionInfo("p528.dll"); // Regenerate data at 1 km steps for export var A__db = new List <List <double> >(); for (int i = 0; i < inputControl.TIMEs.Count; i++) { A__db.Add(new List <double>()); } var dists = new List <double>(); int warnings = 0; double d__km; double h_1__meter = (_units == Units.Meters) ? inputControl.H1 : (inputControl.H1 * Constants.METER_PER_FOOT); double h_2__meter = (_units == Units.Meters) ? inputControl.H2 : (inputControl.H2 * Constants.METER_PER_FOOT); double f__mhz = inputControl.FMHZ; var result = new CResult(); double d = xAxis.MinValue; while (d <= xAxis.MaxValue) { // convert distance to specified units for input to P.528 d__km = (_units == Units.Meters) ? d : (d * Constants.KM_PER_NAUTICAL_MILE); for (int i = 0; i < inputControl.TIMEs.Count; i++) { var r = P528(d__km, h_1__meter, h_2__meter, f__mhz, inputControl.TIMEs[i], ref result); // Ignore 'ERROR_HEIGHT_AND_DISTANCE' for visualization. Just relates to the d__km = 0 point and will return 0 dB result if (r != ERROR_HEIGHT_AND_DISTANCE && r != 0) { warnings = r; } A__db[i].Add(Math.Round(result.A__db, 3)); } dists.Add(Math.Round(d, 0)); d++; } using (var fs = new StreamWriter(filepath)) { fs.WriteLine($"Data Generated by the ITS ITU-R Rec P.528-{dll.FileMajorPart} GUI"); fs.WriteLine($"Generated on {DateTime.Now.ToShortDateString()}"); fs.WriteLine($"App Version,{version.Major}.{version.Minor}.{version.Build}"); fs.WriteLine($"P.528-{dll.FileMajorPart} DLL Version,{dll.FileMajorPart}.{dll.FileMinorPart}.{dll.FileBuildPart}"); // Check and print any warnings if (warnings != 0) { fs.WriteLine(); if ((warnings & WARNING__DFRAC_TROPO_REGION) == WARNING__DFRAC_TROPO_REGION) { fs.WriteLine(Messages.ModelConsistencyWarning); } if ((warnings & WARNING__LOW_FREQUENCY) == WARNING__LOW_FREQUENCY) { fs.WriteLine(Messages.LowFrequencyWarning); } } fs.WriteLine(); fs.WriteLine($"h_1,{inputControl.H1}," + ((_units == Units.Meters) ? "meters" : "feet")); fs.WriteLine($"h_2,{inputControl.H2}," + ((_units == Units.Meters) ? "meters" : "feet")); fs.WriteLine($"f__mhz,{f__mhz}"); fs.WriteLine(); if (exportOptionsWndw.IsRowAlignedData) { fs.Write(((_units == Units.Meters) ? "d__km" : "d__n_mile") + ","); fs.WriteLine($"{String.Join(",", dists)}"); for (int i = 0; i < inputControl.TIMEs.Count; i++) { fs.WriteLine($"time = {inputControl.TIMEs[i]} %,{String.Join(",", A__db[i])}"); } } else { fs.Write((_units == Units.Meters) ? "d__km" : "d__n_mile"); for (int i = 0; i < inputControl.TIMEs.Count; i++) { fs.Write($",time = {inputControl.TIMEs[i]} %"); } fs.WriteLine(); for (int i = 0; i < dists.Count; i++) { fs.Write($"{dists[i]}"); for (int j = 0; j < inputControl.TIMEs.Count; j++) { fs.Write($",{A__db[j][i]}"); } fs.WriteLine(); } } } return(true); }
private bool CsvExport_SingleCurve(string filepath) { var inputControl = grid_Controls.Children[0] as SingleCurveInputsControl; var exportOptionsWndw = new ExportOptionsWindow() { ShowMinimum = false }; if (!exportOptionsWndw.ShowDialog().Value) { return(false); } var version = Assembly.GetExecutingAssembly().GetName().Version; var dll = FileVersionInfo.GetVersionInfo("p528.dll"); // Regenerate data at 1 km steps for export var A__db = new List <double>(); var A_fs__db = new List <double>(); var dists = new List <double>(); var modes = new List <int>(); int warnings = 0; double d__km, d_out; double h_1__meter = (_units == Units.Meters) ? inputControl.H1 : (inputControl.H1 * Constants.METER_PER_FOOT); double h_2__meter = (_units == Units.Meters) ? inputControl.H2 : (inputControl.H2 * Constants.METER_PER_FOOT); double f__mhz = inputControl.FMHZ; double time = inputControl.TIME; var result = new CResult(); double d = xAxis.MinValue; while (d <= xAxis.MaxValue) { // convert distance to specified units for input to P.528 d__km = (_units == Units.Meters) ? d : (d * Constants.KM_PER_NAUTICAL_MILE); var r = P528(d__km, h_1__meter, h_2__meter, f__mhz, time, ref result); // Ignore 'ERROR_HEIGHT_AND_DISTANCE' for visualization. Just relates to the d__km = 0 point and will return 0 dB result if (r != ERROR_HEIGHT_AND_DISTANCE && r != 0) { warnings = r; } // convert output distance from P.528 back into user-specified units d_out = (_units == Units.Meters) ? result.d__km : (result.d__km / Constants.KM_PER_NAUTICAL_MILE); dists.Add(Math.Round(d_out, 0)); A__db.Add(Math.Round(result.A__db, 3)); A_fs__db.Add(Math.Round(result.A_fs__db, 3)); modes.Add(result.propagation_mode); d++; } using (var fs = new StreamWriter(filepath)) { fs.WriteLine($"Data Generated by the ITS ITU-R Rec P.528-{dll.FileMajorPart} GUI"); fs.WriteLine($"Generated on {DateTime.Now.ToShortDateString()}"); fs.WriteLine($"App Version,{version.Major}.{version.Minor}.{version.Build}"); fs.WriteLine($"P.528-{dll.FileMajorPart} DLL Version,{dll.FileMajorPart}.{dll.FileMinorPart}.{dll.FileBuildPart}"); // Check and print any warnings if (warnings != 0) { fs.WriteLine(); if ((warnings & WARNING__DFRAC_TROPO_REGION) == WARNING__DFRAC_TROPO_REGION) { fs.WriteLine(Messages.ModelConsistencyWarning); } if ((warnings & WARNING__LOW_FREQUENCY) == WARNING__LOW_FREQUENCY) { fs.WriteLine(Messages.LowFrequencyWarning); } } fs.WriteLine(); fs.WriteLine($"h_1,{inputControl.H1}," + ((_units == Units.Meters) ? "meters" : "feet")); fs.WriteLine($"h_2,{inputControl.H2}," + ((_units == Units.Meters) ? "meters" : "feet")); fs.WriteLine($"f__mhz,{f__mhz}"); fs.WriteLine($"time%,{time * 100}"); fs.WriteLine(); if (exportOptionsWndw.IncludeModeOfPropagation) { fs.WriteLine("Mode of Propagation: 1 = Line-of-Sight; 2 = Diffraction; 3 = Troposcatter\n"); } if (exportOptionsWndw.IsRowAlignedData) { fs.Write(((_units == Units.Meters) ? "d__km" : "d__n_mile") + ","); fs.WriteLine($"{String.Join(",", dists)}"); fs.WriteLine($"A__db,{String.Join(",", A__db)}"); if (exportOptionsWndw.IncludeFreeSpaceLoss) { fs.WriteLine($"A_fs__db,{String.Join(",", A_fs__db)}"); } if (exportOptionsWndw.IncludeModeOfPropagation) { fs.WriteLine($"Mode,{String.Join(",", modes)}"); } } else { fs.Write(((_units == Units.Meters) ? "d__km" : "d__n_mile") + ","); fs.Write("A__db"); if (exportOptionsWndw.IncludeFreeSpaceLoss) { fs.Write(",A_fs__db"); } if (exportOptionsWndw.IncludeModeOfPropagation) { fs.Write(",PropMode"); } fs.WriteLine(); for (int i = 0; i < A__db.Count; i++) { fs.Write($"{dists[i]},{A__db[i]}"); if (exportOptionsWndw.IncludeFreeSpaceLoss) { fs.Write($",{A_fs__db[i]}"); } if (exportOptionsWndw.IncludeModeOfPropagation) { fs.Write($",{modes[i]}"); } fs.WriteLine(); } } } return(true); }