Example #1
0
        private async void CalculatEngineNoiseMenuItem_Click()
        {
            dataGridView1.Scroll -= Grid_Scroll;
            dataGridView2.Scroll -= Grid_Scroll;
            dataGridView3.Scroll -= Grid_Scroll;
            var CalculateArgs = new CalculateEngineNoiseEventArgs();
            await Task.Run(() => CalculateEngineNoise(CalculateArgs));

            dataGridView4.Rows[0].Cells[1].Value = FormatConvert.ToString(CalculateArgs.FlowSoundParameters.MechanicalPower * 1E-6);
            dataGridView4.Rows[1].Cells[1].Value = FormatConvert.ToString(CalculateArgs.FlowSoundParameters.SoundPower * 1E-6);
            dataGridView4.Rows[2].Cells[1].Value = FormatConvert.ToString(CalculateArgs.FlowSoundParameters.SoundPowerRatio);
            dataGridView4.Rows[3].Cells[1].Value = FormatConvert.ToString(CalculateArgs.FlowSoundParameters.SoundMaximalPowerConeHalfAngle);
            dataGridView4.Rows[4].Cells[1].Value = FormatConvert.ToString(CalculateArgs.FlowSoundParameters.UndisturbedSupersonicFlowLength);
            dataGridView4.Rows[5].Cells[1].Value = FormatConvert.ToString(CalculateArgs.FlowSoundParameters.DistanceToPointOfMaximalSoundLevel);
            dataGridView4.Rows[6].Cells[1].Value = FormatConvert.ToString(CalculateArgs.FlowSoundParameters.SupersonicFlowLength);
            dataGridView4.Rows[7].Cells[1].Value = FormatConvert.ToString(CalculateArgs.FlowSoundParameters._98ProzentSoundPowerRadiatingFlowLength);
            dataGridView4.Rows[8].Cells[1].Value = FormatConvert.ToString(CalculateArgs.FlowSoundParameters.DistanceToPointOfFlowDestruction);
            EngineFrequencyGrid.Rows.Clear();
            EngineFrequencyGrid.Rows.Add(CalculateArgs.FrequencyCharacteristik.Keys.Count);
            int i = 0;

            foreach (var FrequencyCharacteristik in CalculateArgs.FrequencyCharacteristik)
            {
                EngineFrequencyGrid.Rows[i].Cells[0].Value = FormatConvert.ToString(FrequencyCharacteristik.Key);
                EngineFrequencyGrid.Rows[i].Cells[1].Value = FormatConvert.ToString(FrequencyCharacteristik.Value);
                i++;
            }
            EngineFrequencyGraphPane.CurveList.Clear();
            EngineFrequencyGraphPane.AddCurve(
                "",
                CalculateArgs.FrequencyCharacteristik.Select(x => x.Key).ToArray(),
                CalculateArgs.FrequencyCharacteristik.Select(x => x.Value).ToArray(),
                Color.Black,
                SymbolType.None);
            EngineFrequencyGraphPane.AxisChange();
            zedGraphControl3.Invalidate();
            RadiationPatternGrid.Rows.Clear();
            RadiationPatternGrid.Rows.Add(CalculateArgs.RadiationPattern.Keys.Count);
            i = 0;
            foreach (var RadiationPattern in CalculateArgs.RadiationPattern)
            {
                RadiationPatternGrid.Rows[i].Cells[0].Value = FormatConvert.ToString(RadiationPattern.Key);
                RadiationPatternGrid.Rows[i].Cells[1].Value = FormatConvert.ToString(RadiationPattern.Value);
                i++;
            }
            RadiationPatternGraphPane.CurveList.Clear();
            RadiationPatternGraphPane.AddCurve(
                "",
                CalculateArgs.RadiationPattern.Select(x => x.Key).ToArray(),
                CalculateArgs.RadiationPattern.Select(x => x.Value).ToArray(),
                Color.Black,
                SymbolType.None);
            RadiationPatternGraphPane.AxisChange();
            zedGraphControl4.Invalidate();
            EngineAcousticsLoadGrid.Rows.Clear();
            EngineAcousticsLoadGrid.Rows.Add(CalculateArgs.EngineAcousticsLoadAtFrequency.Keys.Count);
            i = 0;
            foreach (var EngineAcousticsLoad in CalculateArgs.EngineAcousticsLoadAtFrequency)
            {
                EngineAcousticsLoadGrid.Rows[i].Cells[0].Value = FormatConvert.ToString(EngineAcousticsLoad.Key);
                EngineAcousticsLoadGrid.Rows[i].Cells[1].Value = FormatConvert.ToString(EngineAcousticsLoad.Value);
                i++;
            }
            textBox32.Text    = FormatConvert.ToString(CalculateArgs.EngineAcousticsLoadSummary);
            pictureBox1.Image = CalculateArgs.EngineSoundContour.Contour;
            Contour           = new DoubleInterpolation(CalculateArgs.EngineSoundContour.X, CalculateArgs.EngineSoundContour.Y, CalculateArgs.EngineSoundContour.SoundLevels);
            dataGridView2.Columns.Clear();
            dataGridView3.Columns.Clear();
            for (int j = 0; j < CalculateArgs.EngineSoundContour.Y.Length; j++)
            {
                dataGridView2.Columns.Add("", "");
                dataGridView3.Columns.Add("", "");
            }
            foreach (var column in dataGridView2.Columns.Cast <DataGridViewColumn>())
            {
                column.SortMode = DataGridViewColumnSortMode.NotSortable;
            }
            foreach (var column in dataGridView3.Columns.Cast <DataGridViewColumn>())
            {
                column.SortMode = DataGridViewColumnSortMode.NotSortable;
            }
            dataGridView2.Rows.Add();
            for (int j = 0; j < CalculateArgs.EngineSoundContour.Y.Length; j++)
            {
                dataGridView2.Rows[0].Cells[j].Value = FormatConvert.ToString(CalculateArgs.EngineSoundContour.Y[j]);
            }
            dataGridView1.Rows.Clear();
            dataGridView1.Rows.Add(CalculateArgs.EngineSoundContour.X.Length);
            for (i = 0; i < CalculateArgs.EngineSoundContour.X.Length; i++)
            {
                dataGridView1.Rows[i].Cells[0].Value = FormatConvert.ToString(CalculateArgs.EngineSoundContour.X[i]);
                dataGridView3.Rows.Add();
                for (int j = 0; j < CalculateArgs.EngineSoundContour.Y.Length; j++)
                {
                    dataGridView3.Rows[i].Cells[j].Value = FormatConvert.ToString(CalculateArgs.EngineSoundContour.SoundLevels[i, j]);
                }
            }
            dataGridView1.Scroll += Grid_Scroll;
            dataGridView2.Scroll += Grid_Scroll;
            dataGridView3.Scroll += Grid_Scroll;
        }
Example #2
0
        public void ModifyEngineSoundContour(
            double MinSoundLevel,
            double MaxSoundLevel,
            ref EngineSoundContour EngineSoundContour) // см. метод с аналогичной сигнатурой в IModel
        {
            int ImageWidth  = EngineSoundContour.Contour.Width;
            int ImageHeight = EngineSoundContour.Contour.Height;

            double[] X = EngineSoundContour.X;
            double[] Y = EngineSoundContour.Y;
            double[,] SoundLevels = EngineSoundContour.SoundLevels;
            var Contour = new Bitmap(ImageWidth, ImageHeight);

            using (var g = Graphics.FromImage(Contour))
            {
                int    gNx = 300, gNy = 300;
                double mux          = X.Max() / ImageWidth;
                double muy          = Y.Max() / ImageHeight;
                int    dx           = ImageWidth / gNx;
                int    dy           = ImageHeight / gNy;
                double Max          = SoundLevels[0, 0];
                double Min          = Max;
                var    Interpolator = new DoubleInterpolation(X, Y, SoundLevels);
                for (int i = 0; i < SoundLevels.GetLength(0); i++)
                {
                    for (int j = 0; j < SoundLevels.GetLength(1); j++)
                    {
                        if (SoundLevels[i, j] > Max)
                        {
                            Max = SoundLevels[i, j];
                        }
                        else if (SoundLevels[i, j] < Min)
                        {
                            Min = SoundLevels[i, j];
                        }
                    }
                }
                var Intervals = new double[] { 0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0 };
                var R         = new Interpolation(Intervals, new double[] { 0, 0, 0, 0, 0, 0, 124, 203, 255, 255, 255, 255 });
                var G         = new Interpolation(Intervals, new double[] { 0, 124, 203, 255, 255, 255, 255, 255, 255, 203, 124, 0 });
                var B         = new Interpolation(Intervals, new double[] { 255, 255, 255, 255, 203, 124, 0, 0, 0, 0, 0, 0 });
                Func <double, Color> GetColor = x =>
                {
                    x = (x - MinSoundLevel) / (MaxSoundLevel - MinSoundLevel);
                    return(Color.FromArgb(
                               (int)R.Interpolate(x * 11),
                               (int)G.Interpolate(x * 11),
                               (int)B.Interpolate(x * 11)));
                };
                for (int i = 0; i < gNx; i++)
                {
                    ProgressChanged((int)(i * 100.0 / gNx));
                    int x = i * ImageWidth / gNx;
                    for (int j = 0; j < gNy; j++)
                    {
                        int y     = j * ImageHeight / gNy;
                        var color = GetColor(Interpolator.Interpolate(x * mux, y * muy));
                        using (var Brush = new SolidBrush(color))
                        {
                            g.FillRectangle(Brush, x, y, i * dx, i * dy);
                        }
                    }
                }
            }
            ProgressChanged(100);
            EngineSoundContour = new EngineSoundContour(X, Y, SoundLevels, Contour);
        }