private void RemoveButton_Click(object sender, RoutedEventArgs e) { int n = CWDataGrid.SelectedItems.Count; if (n > 0) { for (int i = 0; i < n; i++) { CW scw = CWDataGrid.SelectedItems[i] as CW; int k = scw.No; int ii = 0; foreach (CW cw in _cw_list) { if (cw.No == k) { _cw_list.RemoveAt(ii); break; } ii++; } } } _cw_no = 1; for (int i = 0; i < _cw_list.Count; i++) { _cw_list[i].No = _cw_no; _cw_no++; } CWDataGrid.Items.Refresh(); }
private void WriteInputFile(string inpfile) { System.IO.StreamWriter writer; writer = System.IO.File.CreateText(_inpfile); // Domain string dom = ""; dom += "DOMAIN\t1\t1\r\n"; writer.Write(dom); dom = ""; int cyl_num = int.Parse(NumCyl_Val.Text); int n = 0; string stroke_type = ""; if (Stroke_Type_Val.Text == "2" || Stroke_Type_Val.Text == "2-stroke") { n = cyl_num; stroke_type = "2"; } else if (Stroke_Type_Val.Text == "4" || Stroke_Type_Val.Text == "4-stroke") { n = cyl_num / 2; stroke_type = "4"; } bool flag = false; for (int i = 0; i < n; i++) { if (i % 8 == 7) { dom += "\t" + (i + 1).ToString() + "\r\n"; flag = false; } else { dom += "\t" + (i + 1).ToString(); flag = true; } } writer.Write(dom); if (flag) { writer.Write("\r\n"); } // Parameter string param = ""; param += "PARAMETERS\t"; param += "1\t"; double rpm = double.Parse(RPM_Val.Text); if (CrankRot_Val.Text == "CCW") { rpm = -rpm; } param += rpm.ToString() + "\t"; param += "1\t"; param += Stroke_Type_Val.Text + "\r\n"; writer.Write(param); // Pressure string press = ""; press += "PRESSURE\t"; press += "1\t"; press += Press_Val.Text + "\r\n"; // ############################################################################## // MB string mb = ""; List <double> total_mb_pos = new List <double>(); for (int i = 0; i < n + 1; i++) { mb += "MB\t"; mb += (i + 1).ToString() + "\t"; mb += (double.Parse(MB_Val.Text) * i).ToString() + "\r\n"; total_mb_pos.Add(double.Parse(MB_Val.Text) * i); } double del_mb = total_mb_pos[1]; // Web string web = ""; double fweb_pos = double.Parse(fWebPos_Val.Text); double web_dis = double.Parse(WebDis_Val.Text); List <double> total_web_pos = new List <double>(); int m = n * 2; for (int i = 0; i < m; i++) { total_web_pos.Add(del_mb * System.Math.Truncate(i * 0.5) + fweb_pos + web_dis * (i % 2)); } for (int i = 0; i < m; i++) { web += "WEB\t"; web += (i + 1).ToString() + "\t"; web += total_web_pos[i].ToString() + "\t"; web += WebMass_Val.Text + "\t"; web += Stroke_Val.Text + "\t"; web += WebCOG_Val.Text + "\r\n"; } // CW string cw = ""; for (int i = 0; i < _cw_list.Count; i++) { CW cw_obj = _cw_list[i] as CW; cw += "CW\t"; cw += (i + 1).ToString() + "\t"; cw += cw_obj.Position.ToString() + "\t"; cw += cw_obj.Mass.ToString() + "\t"; cw += cw_obj.COG.ToString() + "\t"; cw += cw_obj.COG.ToString() + "\r\n"; } // Piston string piston = ""; double pmss = 0; double pbore = 0; if (Pmass_Val.Text != "") { pmss = double.Parse(Pmass_Val.Text); } if (Pbore_Val.Text != "") { pbore = double.Parse(Pbore_Val.Text); } for (int i = 0; i < cyl_num; i++) { piston += "PISTON\t"; piston += (i + 1).ToString() + "\t"; piston += pmss.ToString() + "\t"; piston += pbore.ToString() + "\r\n"; } // Conrod string conrod = ""; double conmass = 0; double coniner = 0; double conlen = 0; double concog = 0; if (ConMass_Val.Text != "") { conmass = double.Parse(ConMass_Val.Text); } if (ConIner_Val.Text != "") { coniner = double.Parse(ConIner_Val.Text); } if (ConLen_Val.Text != "") { conlen = double.Parse(ConLen_Val.Text); } if (ConCOG_Val.Text != "") { concog = double.Parse(ConCOG_Val.Text); } for (int i = 0; i < cyl_num; i++) { conrod += "CONROD\t"; conrod += (i + 1).ToString() + "\t"; conrod += conmass.ToString() + "\t"; conrod += coniner.ToString() + "\t"; conrod += conlen.ToString() + "\t"; conrod += concog.ToString() + "\r\n"; } // Cylinder string cyl = ""; double bank_ang = double.Parse(BankAng_Val.Text); double fcyl_pos = double.Parse(fCylPos_Val.Text); double cyl_dis = double.Parse(CylDis_Val.Text); List <double> total_cyl_pos = new List <double>(); List <double> fo_ang = new List <double>(); List <double> total_bank_ang = new List <double>(); double new_bank_ang = 0; for (int i = 0; i < cyl_num; i++) { fo_ang.Add(0); if (i % 2 == 0) { new_bank_ang = bank_ang; } else if (i % 2 == 1) { new_bank_ang = -bank_ang; } total_bank_ang.Add(new_bank_ang); } string[] str_ord = Order_Val.Text.Split('/'); string[] str_th = str_ord[0].Split('-'); string[] str_fo = str_ord[1].Split('-'); List <double> total_throw_ang = new List <double>(); string idx = ""; for (int i = 0; i < str_fo.Length; i++) { idx = (System.Math.Truncate(i * 0.5)).ToString(); total_throw_ang.Add(double.Parse(str_th[int.Parse(idx)])); } if (stroke_type == "2") { double step = 360 / n; if (CrankRot_Val.Text == "CCW") { step = -step; } int cidx = 0; for (int i = 0; i < str_fo.Length; i++) { cidx = int.Parse(str_fo[i]) - 1; fo_ang[cidx] = step * i; } } else if (stroke_type == "4") { double ang = 0; double bang = 0; double thang = 0; int cidx = 0; double rev = 0; for (int i = 0; i < str_fo.Length; i++) { cidx = int.Parse(str_fo[i]) - 1; bang = total_bank_ang[cidx]; thang = total_throw_ang[cidx]; if (i >= n) { rev = 720; } else { rev = 360; } if (thang != 0) { ang = rev - thang + bang; } else { ang = thang + bang; } if (CrankRot_Val.Text == "CCW") { if (ang > 0) { ang -= 720; } if (ang <= -720) { ang += 720; } } else { if (ang < 0) { ang += 720; } if (ang >= 720) { ang -= 720; } } fo_ang[cidx] = ang; } } if (stroke_type == "2") { for (int i = 0; i < cyl_num; i++) { total_cyl_pos.Add(fcyl_pos + cyl_dis * i); } } else if (stroke_type == "4") { double j = 0; for (int i = 0; i < cyl_num; i++) { j = System.Math.Truncate(i * 0.5); if (i % 2 == 0) { total_cyl_pos.Add(del_mb * j + fcyl_pos); } else { total_cyl_pos.Add(del_mb * j + fcyl_pos + cyl_dis); } } } for (int i = 0; i < cyl_num; i++) { cyl += "CYLINDER\t"; cyl += (i + 1).ToString() + "\t"; if (i % 2 == 0) { cyl += bank_ang.ToString() + "\t"; } else { cyl += (-bank_ang).ToString() + "\t"; } cyl += fo_ang[i].ToString() + "\t"; // firing angle cyl += total_cyl_pos[i].ToString() + "\t"; // axpos cyl += CrankMass_Val.Text + "\t"; cyl += (i + 1).ToString() + "\t"; cyl += (i + 1).ToString() + "\t"; cyl += "1\r\n"; } // Throw string th = ""; double cw_tol = 10; for (int i = 0; i < n; i++) { th += "THROW\t"; th += (i + 1).ToString() + "\t"; th += str_th[i] + "\t"; th += (i + 1).ToString() + "\t"; // MB1 th += (i + 2).ToString() + "\t"; // MB2 th += (2 * i + 1).ToString() + "\t"; // WEB1 th += (2 * i + 2).ToString() + "\t"; // WEB2 List <double> web12 = new List <double>(); web12.Add(total_web_pos[2 * i]); web12.Add(total_web_pos[2 * i + 1]); double search_cw = 0; for (int j = 0; j < 2; j++) { int cw_id = 0; for (int k = 0; k < _cw_list.Count; k++) { search_cw = System.Math.Abs(web12[j] - _cw_list[k].Position); if (search_cw <= cw_tol) { cw_id = k + 1; break; } } if (j == 0) { th += cw_id.ToString() + "\t"; // CW1 } else if (j == 1) { th += cw_id.ToString() + "\r\n"; // CW2 } } if (stroke_type == "2") { th += "\t" + (i + 1).ToString() + "\r\n"; // cyl1 } else if (stroke_type == "4") { th += "\t" + (2 * i + 1).ToString() + "\t"; // cyl1 th += (2 * i + 2).ToString() + "\r\n"; // cyl2 } } // write order writer.Write(th); writer.Write(cyl); writer.Write(piston); writer.Write(conrod); writer.Write(mb); writer.Write(web); writer.Write(cw); writer.Write(press); writer.Close(); }