using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Xml;
|
using DPumpHydr.WinFrmUI.Volute;
|
using DPumpHydr.WinFrmUI.Volute.ViewModel;
|
using HydrEngineCSharp;
|
|
namespace DPumpHydr.WinFrmUI
|
{
|
public partial class VoluteXmlParasTranHelper
|
{
|
|
XmlDocument _xmlDoc;
|
|
public bool Read(
|
string filePath,
|
out DPumpHydr.WinFrmUI.Volute.ViewModel.HdrBaseInfo hdrBaseInfo,
|
out DPumpHydr.WinFrmUI.Volute.ViewModel.GeomBaseInfo geomBaseInfo,
|
out DPumpHydr.WinFrmUI.Volute.ViewModel.SectionBundleInfo sectionBundleInfo,
|
out DPumpHydr.WinFrmUI.Volute.ViewModel.OutflowParas outflowParas,
|
out double bodyThickness)
|
{
|
hdrBaseInfo = null;
|
geomBaseInfo = null;
|
sectionBundleInfo = null;
|
outflowParas = null;
|
bodyThickness = 0;
|
|
_xmlDoc = new System.Xml.XmlDocument();
|
_xmlDoc.Load(filePath);
|
System.Xml.XmlElement rootNode = _xmlDoc.DocumentElement;//根节点
|
if (rootNode == null)
|
return false;
|
var nodeVersionInfo = rootNode.SelectSingleNode("VersionInfo");
|
if (nodeVersionInfo == null)
|
return false;
|
|
|
#region hdrBaseInfo
|
XmlNode nodeHdrBaseInfo = rootNode.SelectSingleNode("HdrBaseInfo");
|
|
if (nodeHdrBaseInfo != null)
|
{
|
hdrBaseInfo = new HdrBaseInfo();
|
|
foreach (XmlNode xmlNode in nodeHdrBaseInfo.ChildNodes)
|
{
|
XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型
|
if (string.IsNullOrEmpty(xmlElement.InnerText))
|
continue;
|
if (xmlElement.Name == "ShapeType")
|
{
|
hdrBaseInfo.ShapeType = Convert.ToInt32(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Q")
|
{
|
hdrBaseInfo.Q = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "H")
|
{
|
hdrBaseInfo.H = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "n")
|
{
|
hdrBaseInfo.n = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "B2")
|
{
|
hdrBaseInfo.B2 = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "D2")
|
{
|
hdrBaseInfo.D2 = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "IsSXB")
|
{
|
hdrBaseInfo.IsSXB = Convert.ToBoolean(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "ns")
|
{
|
hdrBaseInfo.ns = Convert.ToDouble(xmlElement.InnerText);
|
}
|
}
|
}
|
|
#endregion
|
|
|
#region geomBaseInfo
|
XmlNode nodeGeomBaseInfo = rootNode.SelectSingleNode("GeomBaseInfo");
|
|
if (nodeGeomBaseInfo != null)
|
{
|
geomBaseInfo = new GeomBaseInfo();
|
|
foreach (XmlNode xmlNode in nodeGeomBaseInfo.ChildNodes)
|
{
|
XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型
|
if (string.IsNullOrEmpty(xmlElement.InnerText))
|
continue;
|
if (xmlElement.Name == "D3")
|
{
|
geomBaseInfo.D3 = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "B3")
|
{
|
geomBaseInfo.B3 = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "FAI0")
|
{
|
geomBaseInfo.FAI0 = Convert.ToDouble(xmlElement.InnerText);
|
}
|
|
}
|
}
|
|
#endregion
|
|
|
#region sectionBundleInfo
|
XmlNode nodeSectionInfo = rootNode.SelectSingleNode("SectionInfo");
|
|
if (nodeSectionInfo != null)
|
{
|
sectionBundleInfo = new SectionBundleInfo();
|
sectionBundleInfo.R_out = 1500.0;
|
sectionBundleInfo.BaseWidth = geomBaseInfo.B3;
|
sectionBundleInfo.BaseCircleRadius = geomBaseInfo.D3 / 2;
|
|
|
|
foreach (XmlNode xmlNode in nodeSectionInfo.ChildNodes)
|
{
|
XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型
|
if (string.IsNullOrEmpty(xmlElement.InnerText))
|
continue;
|
if (xmlElement.Name == "Item")
|
continue;
|
if (xmlElement.Name == "K3")
|
{
|
if (Convert.ToDouble(xmlElement.InnerText) > 0)
|
sectionBundleInfo.K3 = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "V3")
|
{
|
if (Convert.ToDouble(xmlElement.InnerText) > 0)
|
sectionBundleInfo.V3 = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "ShapeType")
|
{
|
sectionBundleInfo.ShapeType = (eSectionShapeType) Convert.ToInt32(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "R_out")
|
{
|
if(Convert.ToDouble(xmlElement.InnerText) > 100)
|
sectionBundleInfo.R_out = Convert.ToDouble(xmlElement.InnerText);
|
}
|
}
|
|
|
var node_items = nodeSectionInfo.SelectNodes("Item");
|
foreach (XmlNode node_item in node_items)
|
{
|
int Index = -1;
|
foreach (XmlNode xmlNode in node_item.ChildNodes)
|
{
|
XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型
|
if (xmlElement.Name == "Index")
|
{
|
Index = Convert.ToInt32(xmlElement.InnerText);
|
break;
|
}
|
}
|
if (Index < 0)
|
continue;
|
foreach (XmlNode xmlNode in node_item.ChildNodes)
|
{
|
XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型
|
if (string.IsNullOrEmpty(xmlElement.InnerText))
|
continue;
|
if (xmlElement.Name == "R_Left")
|
{
|
sectionBundleInfo.R_Left[Index] = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "R_Right")
|
{
|
sectionBundleInfo.R_Right[Index] = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "H")
|
{
|
sectionBundleInfo.H[Index] = Convert.ToDouble(xmlElement.InnerText);
|
}
|
|
if (xmlElement.Name == "GaMa_Left")
|
{
|
sectionBundleInfo.GaMa_Left[Index] = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "GaMa_Right")
|
{
|
sectionBundleInfo.GaMa_Right[Index] = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Area")
|
{
|
sectionBundleInfo.Area[Index] = Convert.ToDouble(xmlElement.InnerText);
|
}
|
}
|
}
|
}
|
|
#endregion
|
|
|
|
#region outflowParas
|
XmlNode nodeOutflowParas = rootNode.SelectSingleNode("OutflowParas");
|
|
if (nodeOutflowParas != null)
|
{
|
outflowParas = new OutflowParas();
|
|
foreach (XmlNode xmlNode in nodeOutflowParas.ChildNodes)
|
{
|
XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型
|
if (string.IsNullOrEmpty(xmlElement.InnerText))
|
continue;
|
if (xmlElement.Name == "ShapeStyle")
|
{
|
outflowParas.ShapeStyle = (DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowShapeStyle)Convert.ToInt32(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "LinkStyle")
|
{
|
outflowParas.LinkStyle = (DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowLinkStyle)Convert.ToInt32(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Dia")
|
{
|
outflowParas.Dia = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Offset")
|
{
|
outflowParas.Offset = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Heigh")
|
{
|
outflowParas.Heigh = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Septalradius")
|
{
|
outflowParas.Septalradius = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "H1")
|
{
|
outflowParas.H1 = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "H2")
|
{
|
outflowParas.H2 = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Tangent_Top_Right")
|
{
|
outflowParas.Tangent_Top_Right = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Tangent_Btm_Right")
|
{
|
outflowParas.Tangent_Btm_Right = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Tangent_Top_Left")
|
{
|
outflowParas.Tangent_Top_Left = Convert.ToDouble(xmlElement.InnerText);
|
}
|
if (xmlElement.Name == "Tangent_Btm_Left")
|
{
|
outflowParas.Tangent_Btm_Left = Convert.ToDouble(xmlElement.InnerText);
|
}
|
}
|
|
}
|
#endregion
|
|
|
|
XmlNode nodeBodyThickness = rootNode.SelectSingleNode("BodyThickness");
|
|
if (nodeBodyThickness != null)
|
{
|
foreach (XmlNode xmlNode in nodeBodyThickness.ChildNodes)
|
{
|
XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型
|
if (string.IsNullOrEmpty(xmlElement.InnerText))
|
continue;
|
if (xmlElement.Name == "Value")
|
{
|
bodyThickness = Convert.ToDouble(xmlElement.InnerText);
|
}
|
}
|
|
}
|
|
|
|
|
return true;
|
}
|
|
|
public bool Save(
|
string filePath,
|
DPumpHydr.WinFrmUI.Volute.ViewModel.HdrBaseInfo hdrBaseInfo,
|
DPumpHydr.WinFrmUI.Volute.ViewModel.GeomBaseInfo geomBaseInfo,
|
DPumpHydr.WinFrmUI.Volute.ViewModel.SectionBundleInfo sectionBundleInfo,
|
DPumpHydr.WinFrmUI.Volute.ViewModel.OutflowParas outflowParas,
|
double bodyThickness)
|
{
|
_xmlDoc = new XmlDocument();
|
|
XmlDeclaration xmlDeclaration = _xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
|
_xmlDoc.AppendChild(xmlDeclaration);
|
|
XmlElement rootNode = _xmlDoc.CreateElement("root");
|
_xmlDoc.AppendChild(rootNode);
|
|
#region 版本信息
|
|
//创建VersionInfo子节点
|
XmlNode VersionInfoNode = _xmlDoc.CreateElement("VersionInfo");
|
XmlAttribute VersionInfoNodeAttribute = _xmlDoc.CreateAttribute("Description");
|
VersionInfoNodeAttribute.Value = "XML_Version";
|
VersionInfoNode.InnerText = "V1.0";
|
VersionInfoNode.Attributes.Append(VersionInfoNodeAttribute);
|
rootNode.AppendChild(VersionInfoNode);
|
|
#endregion
|
|
#region hdrBaseInfo
|
|
//创建ProductSetting子节点
|
if (hdrBaseInfo != null)
|
{
|
var nodeHdrBaseInfo = _xmlDoc.CreateElement("HdrBaseInfo");
|
rootNode.AppendChild(nodeHdrBaseInfo);
|
|
|
nodeHdrBaseInfo.AppendChild(AddParasNode("ShapeType", hdrBaseInfo.ShapeType.ToString(), "形状类型:0 旋转型 1 双蜗壳型 2 环型 3准旋转型"));
|
|
nodeHdrBaseInfo.AppendChild(AddParasNode("Q", hdrBaseInfo.Q, "流量"));
|
nodeHdrBaseInfo.AppendChild(AddParasNode("H", hdrBaseInfo.H, "扬程"));
|
nodeHdrBaseInfo.AppendChild(AddParasNode("n", hdrBaseInfo.n, "转速"));
|
|
nodeHdrBaseInfo.AppendChild(AddParasNode("B2", hdrBaseInfo.B2, "叶轮宽度"));
|
nodeHdrBaseInfo.AppendChild(AddParasNode("D2", hdrBaseInfo.D2, "叶轮外径"));
|
|
nodeHdrBaseInfo.AppendChild(AddParasNode("IsSXB", hdrBaseInfo.IsSXB.ToString(), "是否是双吸泵"));
|
nodeHdrBaseInfo.AppendChild(AddParasNode("ns", hdrBaseInfo.ns, "比转速"));
|
}
|
|
#endregion
|
|
|
#region geomBaseInfo
|
|
//创建ProductSetting子节点
|
if (geomBaseInfo != null)
|
{
|
var nodeGeomBaseInfo = _xmlDoc.CreateElement("GeomBaseInfo");
|
rootNode.AppendChild(nodeGeomBaseInfo);
|
|
nodeGeomBaseInfo.AppendChild(AddParasNode("D3", geomBaseInfo.D3, "基圆直径"));
|
nodeGeomBaseInfo.AppendChild(AddParasNode("B3", geomBaseInfo.B3, "蜗壳入口宽度"));
|
nodeGeomBaseInfo.AppendChild(AddParasNode("FAI0", geomBaseInfo.FAI0, "割舌角"));
|
}
|
#endregion
|
|
|
#region sectionBundleInfo
|
|
//创建ProductSetting子节点
|
if (sectionBundleInfo != null)
|
{
|
var nodeSectionInfo = _xmlDoc.CreateElement("SectionInfo");
|
rootNode.AppendChild(nodeSectionInfo);
|
|
nodeSectionInfo.AppendChild(AddParasNode("K3", sectionBundleInfo.K3, "速度系数"));
|
nodeSectionInfo.AppendChild(AddParasNode("V3", sectionBundleInfo.V3, "平均速度"));
|
nodeSectionInfo.AppendChild(AddParasNode("ShapeType", (int)sectionBundleInfo.ShapeType, "类型"));
|
nodeSectionInfo.AppendChild(AddParasNode("R_out", sectionBundleInfo.R_out , "速度系数"));
|
|
for (int i = 1; i <= 8; i++)
|
{
|
var nodeItem = _xmlDoc.CreateElement("Item");
|
nodeSectionInfo.AppendChild(nodeItem);
|
nodeItem.AppendChild(AddParasNode("Index", i, "截面序号"));
|
|
nodeItem.AppendChild(AddParasNode("R_Left", sectionBundleInfo.R_Left[i], "左侧倒圆角半径"));
|
nodeItem.AppendChild(AddParasNode("R_Right", sectionBundleInfo.R_Right[i], "右侧倒圆角半径"));
|
nodeItem.AppendChild(AddParasNode("H", sectionBundleInfo.H[i], "截面高度"));
|
nodeItem.AppendChild(AddParasNode("GaMa_Left", sectionBundleInfo.GaMa_Left[i], "左侧倾斜角度"));
|
nodeItem.AppendChild(AddParasNode("GaMa_Right", sectionBundleInfo.GaMa_Right[i], "右侧倾斜角度"));
|
nodeItem.AppendChild(AddParasNode("Area", sectionBundleInfo.Area[i], "截面面积"));
|
}
|
}
|
#endregion
|
|
|
|
#region outflowParas
|
|
//创建ProductSetting子节点
|
if (outflowParas != null)
|
{
|
var nodeOutflowParas = _xmlDoc.CreateElement("OutflowParas");
|
rootNode.AppendChild(nodeOutflowParas);
|
|
nodeOutflowParas.AppendChild(AddParasNode("ShapeStyle", (int)outflowParas.ShapeStyle, "形状类型"));
|
nodeOutflowParas.AppendChild(AddParasNode("LinkStyle", (int)outflowParas.LinkStyle, "连接类型"));
|
nodeOutflowParas.AppendChild(AddParasNode("Dia", outflowParas.Dia, "出口直径"));
|
nodeOutflowParas.AppendChild(AddParasNode("Offset", outflowParas.Offset, "出口位置偏移"));
|
nodeOutflowParas.AppendChild(AddParasNode("Heigh", outflowParas.Heigh, "出口位置高度"));
|
nodeOutflowParas.AppendChild(AddParasNode("Septalradius", outflowParas.Septalradius, "割舌半径"));
|
nodeOutflowParas.AppendChild(AddParasNode("H1", outflowParas.H1, " "));
|
nodeOutflowParas.AppendChild(AddParasNode("H2", outflowParas.H2, " "));
|
nodeOutflowParas.AppendChild(AddParasNode("Tangent_Top_Right", outflowParas.Tangent_Top_Right, "切线缩放量"));
|
nodeOutflowParas.AppendChild(AddParasNode("Tangent_Btm_Right", outflowParas.Tangent_Btm_Right, "切线缩放量"));
|
nodeOutflowParas.AppendChild(AddParasNode("Tangent_Top_Left", outflowParas.Tangent_Top_Left, "切线缩放量"));
|
nodeOutflowParas.AppendChild(AddParasNode("Tangent_Btm_Left", outflowParas.Tangent_Btm_Left, "切线缩放量"));
|
}
|
#endregion
|
|
|
if (bodyThickness > 0)
|
{
|
var nodeBodyThickness = _xmlDoc.CreateElement("BodyThickness");
|
rootNode.AppendChild(nodeBodyThickness);
|
|
nodeBodyThickness.AppendChild(AddParasNode("Value", bodyThickness, "厚度"));
|
}
|
|
|
|
|
|
|
|
_xmlDoc.Save(filePath);
|
return true;
|
}
|
|
private XmlNode AddParasNode(string name, string value, string desp)
|
{
|
XmlNode node = _xmlDoc.CreateElement(name);
|
node.InnerText = value;
|
if (!string.IsNullOrEmpty(desp))
|
{
|
XmlAttribute desAttribute = _xmlDoc.CreateAttribute("Description");
|
desAttribute.Value = desp;
|
node.Attributes.Append(desAttribute);
|
}
|
|
return node;
|
}
|
private XmlNode AddParasNode(string name, double value, string desp)
|
{
|
XmlNode node = _xmlDoc.CreateElement(name);
|
node.InnerText = value.ToString();
|
if (!string.IsNullOrEmpty(desp))
|
{
|
XmlAttribute desAttribute = _xmlDoc.CreateAttribute("Description");
|
desAttribute.Value = desp;
|
node.Attributes.Append(desAttribute);
|
}
|
|
return node;
|
}
|
}
|
}
|