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);
}
}