private void InitializeArgs() { Impeller = new ImpellerData(); ImpellerArgs.DataContext = Impeller.InnerImpeller; shapeChoice.SelectedIndex = 1; IsParamModifiedByUser = true; }
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; }
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; } } }
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; } } }
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; } } }
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; }