VAGSuite.ctrlCompressorMap.pictureBox1_Paint C# (CSharp) Method

pictureBox1_Paint() private method

private pictureBox1_Paint ( object sender, PaintEventArgs e ) : void
sender object
e PaintEventArgs
return void
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            float prev_x_location = 0;
            float prev_y_location = 0;
            Pen p = new Pen(Color.LimeGreen, 3);
            float prev_x_locationLow = 0;
            float prev_y_locationLow = 0;
            Pen pLow = new Pen(Color.CornflowerBlue, 3);
            float prev_x_locationHigh = 0;
            float prev_y_locationHigh = 0;
            Pen pHigh = new Pen(Color.IndianRed, 3);

            //if (_compressor == CompressorMap.None) return;
            try
            {
                switch (_compressor)
                {
                    case CompressorMap.GT17:
                        // set coordinates
                        x_offset = 42 * CalculateXCorrection();
                        y_offset = 539 * CalculateYCorrection();
                        x_multiplier = 10.67 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 166 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.T25_55:
                        // set coordinates
                        x_offset = 64 * CalculateXCorrection();
                        y_offset = 865 * CalculateYCorrection();
                        x_multiplier = 20 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 396 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.T25_60:
                        x_offset = 60 * CalculateXCorrection();
                        y_offset = 867 * CalculateYCorrection();
                        x_multiplier = 17.28 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 398 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.GT2871R:
                        x_offset = 50 * CalculateXCorrection();
                        y_offset = 595 * CalculateYCorrection();
                        x_multiplier = 9.56 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 276.5 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.GT28RS:
                        // set coordinates
                        x_offset = 55 * CalculateXCorrection();
                        y_offset = 460 * CalculateYCorrection();
                        x_multiplier = 8 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 211 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.GT30R:
                        // set coordinates
                        x_offset = 50 * CalculateXCorrection();
                        y_offset = 463 * CalculateYCorrection();
                        x_multiplier = 6.4 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 158 * CalculateYCorrection(); // per bar
                        break;
                    // 100 cfm = 6.91 lbs/m
                    case CompressorMap.TD04:
                        x_offset = 66 * CalculateXCorrection();
                        y_offset = 576 * CalculateYCorrection();
                        x_multiplier = 10.45 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 234.5 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.TD0416T:
                        x_offset = 64 * CalculateXCorrection();
                        y_offset = 573 * CalculateYCorrection();
                        //408 = 600 cfm = 41.46 lbs/m
                        x_multiplier = 8.27 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 233 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.TD0418T:
                        x_offset = 65 * CalculateXCorrection();
                        y_offset = 576 * CalculateYCorrection();
                        //408 = 600 cfm = 41.46 lbs/m
                        x_multiplier = 8.27 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 234 * CalculateYCorrection(); // per bar
                        /*                        x_offset = 126 * CalculateXCorrection();
                                                y_offset = 940 * CalculateYCorrection();
                                                // 648 - 126 = 0.3 m3/s = 635 cfm = 44 lbs/m
                                                // 940 - 256 = 2 bar
                                                x_multiplier = 11.86 * CalculateXCorrection(); // per lbs/m
                                                y_multiplier = 342 * CalculateYCorrection(); // per bar*/
                        break;
                    case CompressorMap.TD0419T:
                        x_offset = 65 * CalculateXCorrection();
                        y_offset = 576 * CalculateYCorrection();
                        //408 = 600 cfm = 41.46 lbs/m
                        x_multiplier = 8.27 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 234 * CalculateYCorrection(); // per bar
                        /*x_offset = 228 * CalculateXCorrection();
                        y_offset = 1627 * CalculateYCorrection();
                        // 1102 - 228 = 0.3 m3/s = 635 cfm = 44 lbs/m
                        // 1627 - 468 = 2 bar
                        x_multiplier = 19.86 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 579.5 * CalculateYCorrection(); // per bar*/
                        break;
                    case CompressorMap.TD0620G:
                        x_offset = 58 * CalculateXCorrection();
                        y_offset = 577 * CalculateYCorrection();
                        //408 = 600 cfm = 41.46 lbs/m
                        x_multiplier = 8.30 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 235 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.GT3071R86:
                        x_offset = 42 * CalculateXCorrection();
                        y_offset = 556 * CalculateYCorrection();
                        x_multiplier = 6.67 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 171 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.GT40R:
                        x_offset = 54 * CalculateXCorrection();
                        y_offset = 482 * CalculateYCorrection();
                        x_multiplier = 5.31 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 171 * CalculateYCorrection(); // per bar
                        break;
                    case CompressorMap.HX40W:
                        x_offset = 35 * CalculateXCorrection();
                        y_offset = 762 * CalculateYCorrection();
                        x_multiplier = 5.03 * CalculateXCorrection(); // per lbs/m
                        y_multiplier = 167 * CalculateYCorrection(); // per bar
                        break;
                        break;
                }
                PointF[] pnts = new PointF[16];
                PointF[] pntsLow = new PointF[16];
                PointF[] pntsHigh = new PointF[16];

                for (int i = 0; i < 16; i++)
                {
                    double rpm = Convert.ToDouble(rpm_points[i]);
                    double mReq = boost_request[i];
                    double displacement = 140;
                    double liters = 2;
                    switch (toolStripComboBox2.SelectedIndex)
                    {
                        case 0:
                            displacement = 122;
                            liters = 2;
                            break;
                        case 1:
                            displacement = 140;
                            liters = 2.3;
                            break;
                    }
                    double EVF = (displacement / 1728) * (rpm / 2);

                    double efficiency = GetEngineEfficiency((int)rpm);

                    try
                    {
                        double temp_eff = ConvertToDouble(toolStripTextBox2.Text);
                        if (temp_eff != 0)
                        {
                            efficiency = temp_eff / 100;
                        }
                    }
                    catch (Exception E)
                    {
                        Console.WriteLine(E.Message);
                    }

                    double suckgrammin = rpm * efficiency * liters * 0.5 * 1.2041;
                    double suckpoundsmin = suckgrammin / 453.59237;
                    double mReqgrammin = rpm * mReq * 2 / 1000;
                    double mReqpoundsmin = mReqgrammin / 453.59237;
                    double intakeLoss = CalculateIntakeLoss((int)rpm);
                    double pAtmNom = 14.7;
                    double pAtmLow = 12.5;
                    double pAtmHigh = 15.4;
                    double MassFactor = mReqpoundsmin / suckpoundsmin;
                    double volAtmNom = MassFactor * pAtmNom / (pAtmNom - intakeLoss);
                    double volAtmLow = MassFactor * pAtmNom / (pAtmLow - intakeLoss);
                    double volAtmHigh = MassFactor * pAtmNom / (pAtmHigh - intakeLoss);
                    double pressureRatioAtmNom = ((pAtmNom - intakeLoss) * volAtmNom) / pAtmNom;
                    double pressureRatioAtmLow = ((pAtmLow - intakeLoss) * volAtmLow) / pAtmLow;
                    double pressureRatioAtmHigh = ((pAtmHigh - intakeLoss) * volAtmHigh) / pAtmHigh;
                    Console.WriteLine("Rpm: " + rpm.ToString() + " mReq: " + mReq.ToString() + " suckpoundsmin: " + suckpoundsmin.ToString() + " mReqpoundsmin: " + mReqpoundsmin.ToString());
                    double temperature = 20;

                    try
                    {
                        temperature = ConvertToDouble(toolStripTextBox1.Text);
                    }
                    catch (Exception E)
                    {
                        Console.WriteLine(E.Message);
                    }
                    //temperature = ConvertToFahrenheit(temperature);

                    pressureRatioAtmNom *= (273 - 50 + temperature) / (273 - 50);
                    pressureRatioAtmLow *= (273 - 50 + temperature) / (273 - 50);
                    pressureRatioAtmHigh *= (273 - 50 + temperature) / (273 - 50);
                    pressureRatioAtmNom -= 1;
                    pressureRatioAtmLow -= 1;
                    pressureRatioAtmHigh -= 1;

                    // ATM
                    float x_location = (float)(x_offset + mReqpoundsmin * x_multiplier);
                    float y_location = (float)(y_offset - pressureRatioAtmNom * y_multiplier);
                    pnts[i].X = x_location;
                    pnts[i].Y = y_location;
                    if (i > 0)
                    {
                        // draw line
                        e.Graphics.DrawLine(p, new PointF(prev_x_location, prev_y_location), new PointF(x_location, y_location));
                    }
                    e.Graphics.FillEllipse(Brushes.Green, x_location - 4, y_location - 4, 8, 8);
                    prev_x_location = x_location;
                    prev_y_location = y_location;
                    // HIGH ALTITUDE
                    x_location = (float)(x_offset + mReqpoundsmin * x_multiplier);
                    y_location = (float)(y_offset - pressureRatioAtmLow * y_multiplier);
                    pntsLow[i].X = x_location;
                    pntsLow[i].Y = y_location;
                    if (i > 0)
                    {
                        // draw line
                        e.Graphics.DrawLine(pLow, new PointF(prev_x_locationLow, prev_y_locationLow), new PointF(x_location, y_location));
                    }
                    e.Graphics.FillEllipse(Brushes.Blue, x_location - 4, y_location - 4, 8, 8);
                    prev_x_locationLow = x_location;
                    prev_y_locationLow = y_location;
                    // High pressure
                    x_location = (float)(x_offset + mReqpoundsmin * x_multiplier);
                    y_location = (float)(y_offset - pressureRatioAtmHigh * y_multiplier);
                    pntsHigh[i].X = x_location;
                    pntsHigh[i].Y = y_location;
                    if (i > 0)
                    {
                        // draw line
                        e.Graphics.DrawLine(pHigh, new PointF(prev_x_locationHigh, prev_y_locationHigh), new PointF(x_location, y_location));
                    }
                    e.Graphics.FillEllipse(Brushes.Red, x_location - 4, y_location - 4, 8, 8);
                    prev_x_locationHigh = x_location;
                    prev_y_locationHigh = y_location;

                    /*
                    int rpm = rpm_points[i];
                    double boost_req = boost_request[i];
                    //to plot the point in the compressor map, first we need to calculate the flow of the engine
                    double displacement = 140;
                    switch (current_engineType)
                    {
                        case EngineType.Liter2:
                            displacement = 122;
                            break;
                        case EngineType.Liter23:
                            displacement = 140;
                            break;
                    }
                    double EVF = (displacement / 1728) * (rpm / 2);

                    double efficiency = GetEngineEfficiency(rpm);

                    try
                    {
                        double temp_eff = ConvertToDouble(toolStripTextBox2.Text);
                        if(temp_eff != 0)
                        {
                            efficiency = temp_eff / 100;
                        }
                    }
                    catch (Exception E)
                    {
                        Console.WriteLine(E.Message);
                    }
                    double temperature = 20;

                    try
                    {
                        temperature = ConvertToDouble(toolStripTextBox1.Text);
                    }
                    catch (Exception E)
                    {
                        Console.WriteLine(E.Message);
                    }
                    temperature = ConvertToFahrenheit(temperature);
                    temperature = 460 + temperature; // to rankin
                    double airflowlbsm = (((14.5 + (boost_req * 14.5)) * EVF * 29) / (10.73 * temperature)) * efficiency;
                    // now we have airflow and pressure, we can draw after we calculate the points
                    float x_location = (float)(x_offset + airflowlbsm * x_multiplier);
                    float y_location = (float)(y_offset - boost_req * y_multiplier);
                    pnts[i].X = x_location;
                    pnts[i].Y = y_location;

                    if (i > 0)
                    {
                        // draw line
                        e.Graphics.DrawLine(p, new PointF(prev_x_location, prev_y_location), new PointF(x_location, y_location));
                    }
                    e.Graphics.FillEllipse(Brushes.OrangeRed, x_location-4, y_location-4, 8, 8);
                    prev_x_location = x_location;
                    prev_y_location = y_location;*/
                }
            //                e.Graphics.DrawPolygon(p, pnts);
                e.Graphics.Save();
                p.Dispose();
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }
        }