private void InitializeArgs()
 {
     Impeller = new ImpellerData();
     ImpellerArgs.DataContext = Impeller.InnerImpeller;
     shapeChoice.SelectedIndex = 1;
     IsParamModifiedByUser = true;
 }
Exemple #2
0
		private ImpellerData ImpellerParser(string impellerDataStringOrXmlPath, ImpellerDataType dataType)
		{
			ImpellerData impeller = new ImpellerData();
			switch (dataType)
			{
				case ImpellerDataType.String:
					if (impellerDataStringOrXmlPath == null
						|| impellerDataStringOrXmlPath.Length <= 0)
					{
						return null;
					}
					string impellerArgsString = Regex.Match(impellerDataStringOrXmlPath, @"(?<=\[Impeller\]\r\n)(?>[^\[\]]+)").Value;
					string sectionsString = Regex.Match(impellerDataStringOrXmlPath, @"(?<=\[Sections\]\r\n)(?>[^\[\]]+)").Value;
					string resultString = Regex.Match(impellerDataStringOrXmlPath, @"(?<=\[Result\]\r\n)(?>[^\[\]]+)").Value;
					string temp = "";

					if (impellerArgsString.Length <= 0
						&& sectionsString.Length <= 0
						&& resultString.Length <= 0)
					{
						return null;
					}

					if (impellerArgsString.Length > 0)
					{
						try
						{
							temp = Regex.Match(impellerArgsString, @"(?<=Height=)[-\w\.]+").Value.Trim();
							if (temp.Length > 0)
							{
								impeller.InnerImpeller.Height =
									Convert.ToDouble(temp);
							}
						}
						catch { impeller.ErrorArgs.Add("Height"); }
						try
						{
							temp = Regex.Match(impellerArgsString, @"(?<=Density=)[-\w\.]+").Value.Trim();
							if (temp.Length > 0)
							{
								impeller.InnerImpeller.Density =
									Convert.ToDouble(temp);
							}
						}
						catch { impeller.ErrorArgs.Add("Density"); }
						try
						{
							temp = Regex.Match(impellerArgsString, @"(?<=E=)[-\w\.]+").Value.Trim();
							if (temp.Length > 0)
							{
								impeller.InnerImpeller.E =
									Convert.ToDouble(temp);
							}
						}
						catch { impeller.ErrorArgs.Add("E"); }
						try
						{
							temp = Regex.Match(impellerArgsString, @"(?<=From Freq=)[-\w\.]+").Value.Trim();
							if (temp.Length > 0)
							{
								impeller.State.CheckFromOmega =
									Convert.ToDouble(temp) * 2 * Math.PI;
							}
						}
						catch { impeller.ErrorArgs.Add("From Freq"); }
						try
						{
							temp = Regex.Match(impellerArgsString, @"(?<=To Freq=)[-\w\.]+").Value.Trim();
							if (temp.Length > 0)
							{
								impeller.State.CheckToOmega =
									Convert.ToDouble(temp) * 2 * Math.PI;
							}
						}
						catch { impeller.ErrorArgs.Add("To Freq"); }
						try
						{
							temp = Regex.Match(impellerArgsString, @"(?<=Step=)[-\w\.]+").Value.Trim();
							if (temp.Length > 0)
							{
								impeller.State.ProhlStep =
									Convert.ToDouble(temp) * 2 * Math.PI;
							}
						}
						catch { impeller.ErrorArgs.Add("Step"); }
						try
						{
							temp = Regex.Match(impellerArgsString, @"(?<=Min Tolerance=)[-\w\.]+").Value.Trim();
							if (temp.Length > 0)
							{
								impeller.InnerImpeller.MinTolerance =
									Convert.ToDouble(temp);
							}
						}
						catch { impeller.ErrorArgs.Add("Min Tolerance"); }
						try
						{
							temp = Regex.Match(impellerArgsString, @"(?<=Min Step=)[-\w\.]+").Value.Trim();
							if (temp.Length > 0)
							{
								impeller.InnerImpeller.MinStepDiff =
									Convert.ToDouble(temp);
							}
						}
						catch { impeller.ErrorArgs.Add("Min Step"); }
					}

					if (sectionsString.Length > 0)
					{
						int index = 0;
						double position = 0.0;
						double inertiaMoment = 1.0;
						double area = 1.0;
						double mass = 1.0;
						MatchCollection sections = Regex.Matches(sectionsString, @"(?<Index>\d+):\s+(?<Position>[\w\.-]+),(?<InertiaMoment>[\w\.-]+),(?<Area>[\w\.-]+),(?<Mass>[\w\.-]+)");

						foreach (Match sec in sections)
						{
							try
							{
								index = Convert.ToInt32(sec.Groups["Index"].Value);
								position = Convert.ToDouble(sec.Groups["Position"].Value);
								inertiaMoment = Convert.ToDouble(sec.Groups["InertiaMoment"].Value);
								area = Convert.ToDouble(sec.Groups["Area"].Value);
								mass = Convert.ToDouble(sec.Groups["Mass"].Value);

								impeller.Sections.Add(new FullSection(position, inertiaMoment, area, mass));
							}
							catch
							{
								impeller.ErrorArgs.Add(index.ToString());
							}
						}
					}

					if (resultString.Length > 0)
					{
						impeller.InnerImpeller.Comment = resultString;
					}
					break;
				case ImpellerDataType.Xml:
					var loadResult = Config.LoadFromFile(impellerDataStringOrXmlPath);
					switch (loadResult)
					{
						case XmlConfig.OperateConfigFileResult.FileNotExist:
						case XmlConfig.OperateConfigFileResult.IOError:
						case XmlConfig.OperateConfigFileResult.InvalidPath:
							impeller = null;
							break;
						case XmlConfig.OperateConfigFileResult.Succeed:
							if (Config.ConfigXML.Element("Impeller") == null
								&& Config.ConfigXML.Element("Sections") == null
								&& Config.ConfigXML.Element("Result") == null)
							{
								return null;
							}

							if (Config.ConfigXML.Element("Impeller") != null)
							{
								try
								{
									impeller.InnerImpeller.Height
										= Convert.ToDouble(Config.GetVal("Impeller", "Height"));
								}
								catch { impeller.ErrorArgs.Add("Height"); }
								try
								{
									impeller.InnerImpeller.Density
										= Convert.ToDouble(Config.GetVal("Impeller", "Density"));
								}
								catch { impeller.ErrorArgs.Add("Density"); }
								try
								{
									impeller.InnerImpeller.E
										= Convert.ToDouble(Config.GetVal("Impeller", "E"));
								}
								catch { impeller.ErrorArgs.Add("E"); }
								try
								{
									impeller.State.CheckFromOmega
										= Convert.ToDouble(Config.GetVal("Impeller", "FromFreq")) * 2 * Math.PI;
								}
								catch { impeller.ErrorArgs.Add("FromFreq"); }
								try
								{
									impeller.State.CheckToOmega
										= Convert.ToDouble(Config.GetVal("Impeller", "ToFreq")) * 2 * Math.PI;
								}
								catch { impeller.ErrorArgs.Add("ToFreq"); }
								try
								{
									impeller.State.ProhlStep
										= Convert.ToDouble(Config.GetVal("Impeller", "Step")) * 2 * Math.PI;
								}
								catch { impeller.ErrorArgs.Add("Step"); }
								try
								{
									impeller.InnerImpeller.MinTolerance
										= Convert.ToDouble(Config.GetVal("Impeller", "MinTolerance"));
								}
								catch { impeller.ErrorArgs.Add("MinTolerance"); }
								try
								{
									impeller.InnerImpeller.MinStepDiff
										= Convert.ToDouble(Config.GetVal("Impeller", "MinStep"));
								}
								catch { impeller.ErrorArgs.Add("MinStep"); }
							}

							if (Config.ConfigXML.Element("Sections") != null)
							{
								int index = 0;
								Regex indexRegex = new Regex(@"(?<=Section)\d+", RegexOptions.Compiled);
								double position = 0.0;
								double inertiaMoment = 1.0;
								double area = 1.0;
								double mass = 1.0;

								var sections = Config.ConfigXML.Element("Sections").Elements();

								foreach (var sec in sections)
								{
									try
									{
										index = Convert.ToInt32(indexRegex.Match(sec.Name.ToString()).Value);
										position = Convert.ToDouble(sec.Attribute("Position").Value);
										inertiaMoment = Convert.ToDouble(sec.Attribute("InertiaMoment").Value);
										area = Convert.ToDouble(sec.Attribute("Area").Value);
										mass = Convert.ToDouble(sec.Attribute("Mass").Value);

										impeller.Sections.Add(new FullSection(position, inertiaMoment, area, mass));
									}
									catch
									{
										impeller.ErrorArgs.Add(index.ToString());
									}
								}
							}

							if (Config.ConfigXML.Element("Result") != null)
							{
								try
								{
									impeller.InnerImpeller.Comment
										= Config.ConfigXML.Element("Result").Value;
								}
								catch
								{
									impeller.ErrorArgs.Add("Result");
								}
							}
							break;
						default:
							return null;
					}
					break;
				default:
					return null;			
			}
			return impeller;
		}
Exemple #3
0
		private void pasteResultBtn_Click(object sender, RoutedEventArgs e)
		{
			string resultString = "";
			var impellerData = new ImpellerData();
			try
			{
				resultString = Clipboard.GetText();
			}
			catch
			{
				ShowStatusMsg("异常:获取剪切板失败");
				return;
			}
			if (resultString != null && resultString.Length > 0)
			{
				impellerData = ImpellerParser(resultString, ImpellerDataType.String);
				if (impellerData != null)
				{
					resultCanvas.Children.Clear();
					resultBox.Text = impellerData.InnerImpeller.Comment;
					ShowStatusMsg("粘贴成功!");
				}
				else
				{
					ShowStatusMsg("无法识别的数据格式");
					return;
				}
			}
		}
Exemple #4
0
		private void pasteSectionsDataBtn_Click(object sender, RoutedEventArgs e)
		{
			string sectionsString = "";
			var impellerData = new ImpellerData();
			try
			{
				sectionsString = Clipboard.GetText();
			}
			catch
			{
				ShowStatusMsg("异常:获取剪切板失败");
				return;
			}
			if (sectionsString != null && sectionsString.Length > 0)
			{
				impellerData = ImpellerParser(sectionsString, ImpellerDataType.String);
				if (impellerData != null)
				{
					Impeller.Sections = impellerData.Sections;
					resultCanvas.Children.Clear();
					resultBox.Text = "";
					UpdateArgsBindings();
					UpdateUI();
					ShowStatusMsg("粘贴成功!");
					if (impellerData.ErrorArgs.Count > 0)
					{
						string errorArgsMsg = "粘贴成功,但是以下截面的参数有误,未能导入:";
						foreach (var error in impellerData.ErrorArgs)
						{
							errorArgsMsg += "\r\n第" + error + "个截面";
						}
						ShowStatusMsg(" 已忽略的异常截面: " + impellerData.ErrorArgs.Count + "个");
						MessageBox.Show(errorArgsMsg);
					}
				}
				else
				{
					ShowStatusMsg("无法识别的数据格式");
					return;
				}
			}
		}
Exemple #5
0
		private void PasteDataStringHandler(string impellerString = null)
		{
			var impellerData = new ImpellerData();
			if (impellerString == null)
			{
				try
				{
					impellerString = Clipboard.GetText();
				}
				catch
				{
					ShowStatusMsg("异常:获取剪切板失败");
					return;
				}
			}

			if (impellerString != null && impellerString.Length > 0)
			{
				impellerData = ImpellerParser(impellerString, ImpellerDataType.String);
				if (impellerData != null)
				{
					Impeller.InnerImpeller = impellerData.InnerImpeller;
					Impeller.State = impellerData.State;
					Impeller.Sections = impellerData.Sections;
					resultBox.Text = impellerData.InnerImpeller.Comment;
					resultCanvas.Children.Clear();
					UpdateArgsBindings();
					UpdateUI();
					ShowStatusMsg("粘贴成功!");
					if (impellerData.ErrorArgs.Count > 0)
					{
						int errorSectionsCount = 0;
						int errorArgsCount = 0;
						string errorArgsMsg = "粘贴成功,但是以下参数/截面有误,未能导入:";
						foreach (var error in impellerData.ErrorArgs)
						{
							if (Regex.IsMatch(error, @"\d+"))
							{
								errorSectionsCount++;
								errorArgsMsg += "\r\n第" + error + "个截面";
							}
							else
							{
								errorArgsCount++;
								errorArgsMsg += "\r\n" + error;
							}
						}
						ShowStatusMsg(" 已忽略的异常参数: " + errorArgsCount + "个, 异常截面: "
							+ errorSectionsCount + "个");
						MessageBox.Show(errorArgsMsg);
					}
				}
				else
				{
					ShowStatusMsg("无法识别的数据格式");
					return;
				}
			}
		}
Exemple #6
0
		private FileOpResult ImportImpeller(string path, string mode)
		{
			string ext = "";
			var impellerData = new ImpellerData();
			try
			{
				ext = System.IO.Path.GetExtension(path).ToLower();
			}
			catch
			{
				return FileOpResult.Fail;
			}

			switch (ext)
			{
				case ".xml":
					impellerData = ImpellerParser(path, ImpellerDataType.Xml);
					break;
				case ".txt":
					string impellerString = "";
					try
					{
						impellerString = File.ReadAllText(path);
					}
					catch
					{
						impellerData = null;
					}					
					impellerData = ImpellerParser(impellerString, ImpellerDataType.String);
					break;
				default:
					return FileOpResult.UnknownFormat;
			}

			if (impellerData != null)
			{
				string errorArgsMsg = "";
				switch (mode)
				{
					case "full":
						Impeller.InnerImpeller = impellerData.InnerImpeller;
						Impeller.State = impellerData.State;
						Impeller.Sections = impellerData.Sections;
						resultBox.Text = impellerData.InnerImpeller.Comment;
						errorArgsMsg = "读取文件成功,但是以下参数/截面有误,未能导入:";
						break;
					case "sec":
						Impeller.Sections = impellerData.Sections;
						errorArgsMsg = "读取文件成功,但是以下截面有误,未能导入:";
						break;
					default:
						return FileOpResult.Fail;
				}
				Impeller.InnerImpeller.Comment = null;

				if (impellerData.ErrorArgs.Count > 0)
				{
					int errorSectionsCount = 0;
					int errorArgsCount = 0;
					foreach (var error in impellerData.ErrorArgs)
					{
						if (Regex.IsMatch(error, @"\d+"))
						{
							errorSectionsCount++;
							errorArgsMsg += "\r\n第" + error + "个截面";
						}
						else
						{
							errorArgsCount++;
							if (mode == "full") errorArgsMsg += "\r\n" + error;
						}
					}
					Impeller.InnerImpeller.Comment = errorArgsMsg;
				}
			}
			else
			{
				return FileOpResult.Fail;
			}

			return FileOpResult.Succeed;
		}