using DevExpress.XtraEditors;
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace IStation.WinFrmUI.Basic
{
public class ExportCurveHelper
{
public static void INPFile(string fileName, Model.FeatCurveExpressGroup curveInfo)
{
if (curveInfo == null)
return;
if (curveInfo.CurveQH == null)
return;
var dlg = new SaveFileDialog();
dlg.Title = "导出 inp 曲线文件";
dlg.FileName = $"{fileName}.crv";
dlg.Filter = "crv (*.crv)|*.crv";
if (dlg.ShowDialog() != DialogResult.OK)
return;
var filePath = dlg.FileName;
var qhCurveExpress = curveInfo.CurveQH;
var qeCurveExpress = curveInfo.CurveQE;
INPFile(filePath, fileName, qhCurveExpress, qeCurveExpress);
}
public static void INPFile(Model.PumpCurve pumpCurve)
{
if (pumpCurve == null)
return;
if (pumpCurve.CurveInfo?.CurveQH == null)
return;
var dlg = new SaveFileDialog();
dlg.Title = "导出 inp 曲线文件";
dlg.FileName = $"{pumpCurve.CurveCode}.crv";
dlg.Filter = "crv (*.crv)|*.crv";
if (dlg.ShowDialog() != DialogResult.OK)
return;
var filePath = dlg.FileName;
var qhCurveExpress = pumpCurve.CurveInfo.CurveQH;
var qeCurveExpress = pumpCurve.CurveInfo.CurveQE;
INPFile(filePath, pumpCurve.CurveCode, qhCurveExpress, qeCurveExpress);
}
public static void INPFile(string filePath, string curveCode, Model.CurveExpress qhCurveExpress, Model.CurveExpress qeCurveExpress)
{
if (qhCurveExpress == null)
return;
//均匀插值点,计算点坐标
var fitPointNumQH = 15;
double space = (qhCurveExpress.Max - qhCurveExpress.Min) / (fitPointNumQH - 1);
double Q = qhCurveExpress.Min;
var qhStr = new StringBuilder();
var qeStr = new StringBuilder();
for (var i = 0; i < fitPointNumQH; i++)
{
var H = Model.FitCurveHelper.GetFitPointY(qhCurveExpress, Q);
qhStr.AppendLine(Q + " " + H);
if (qeCurveExpress != null)
{
var E = Model.FitCurveHelper.GetFitPointY(qeCurveExpress, Q);
qeStr.AppendLine(Q + " " + E);
}
Q = Q + space;
if (Q > qhCurveExpress.Max * 0.9999)
Q = qhCurveExpress.Max * 0.9999;
}
var qhFilePath = filePath.Insert(filePath.LastIndexOf("."), "水泵");
if (File.Exists(qhFilePath))
File.Delete(qhFilePath);
WriteToFile(curveCode, qhFilePath, qhStr, "水泵");
if (qeStr.Length > 0)
{
var qeFilePath = filePath.Insert(filePath.LastIndexOf("."), "效率");
if (File.Exists(qeFilePath))
File.Delete(qeFilePath);
WriteToFile(curveCode, qeFilePath, qeStr, "效率");
}
XtraMessageBox.Show("导出成功!");
}
///
///
///
///
///
///
/// 均匀插值点,计算点坐标
public static void INPFile(string filePath, Model.CurveExpress qhCurveExpress, Model.CurveExpress qeCurveExpress,int fitPointNumQH=20)
{
if (qhCurveExpress == null)
return;
double space = (qhCurveExpress.Max - qhCurveExpress.Min) / (fitPointNumQH - 1);
double Q = qhCurveExpress.Min;
var qhStr = new StringBuilder();
var qeStr = new StringBuilder();
for (var i = 0; i < fitPointNumQH; i++)
{
var H = Model.FitCurveHelper.GetFitPointY(qhCurveExpress, Q);
qhStr.AppendLine(Q + " " + H);
if (qeCurveExpress != null)
{
var E = Model.FitCurveHelper.GetFitPointY(qeCurveExpress, Q);
qeStr.AppendLine(Q + " " + E);
}
Q = Q + space;
if (Q > qhCurveExpress.Max * 0.9999)
Q = qhCurveExpress.Max * 0.9999;
}
var qhFilePath = filePath.Insert(filePath.LastIndexOf("\\")+1, "水泵");
// var qhFilePath = filePath.Insert(0, "水泵");
if (File.Exists(qhFilePath))
File.Delete(qhFilePath);
WriteToFile(qhFilePath, qhStr, "水泵");
if (qeStr.Length > 0)
{
var qeFilePath = filePath.Insert(filePath.LastIndexOf("\\") + 1, "效率");
// var qeFilePath = filePath.Insert(0, "效率");
if (File.Exists(qeFilePath))
File.Delete(qeFilePath);
WriteToFile(qeFilePath, qeStr, "效率");
}
}
//写入文件
private static void WriteToFile(string filePath, StringBuilder curveStr, string fileType)
{
StreamWriter sw = new StreamWriter(new FileStream(filePath, FileMode.CreateNew), Encoding.GetEncoding("GB2312"));
StringBuilder strQhFile = new StringBuilder();
strQhFile.AppendLine("EPANETH曲线数据");
strQhFile.AppendLine(fileType);
var describe = $"{DateTime.Now}";
strQhFile.AppendLine(describe);
strQhFile.AppendLine(curveStr.ToString());
sw.Write(strQhFile);
sw.Close();
}
//写入文件
private static void WriteToFile(string description, string filePath, StringBuilder curveStr, string fileType)
{
StreamWriter sw = new StreamWriter(new FileStream(filePath, FileMode.CreateNew), Encoding.GetEncoding("GB2312"));
StringBuilder strQhFile = new StringBuilder();
strQhFile.AppendLine("EPANETH曲线数据");
strQhFile.AppendLine(fileType);
var describe = $"{description + "-" + DateTime.Now}";
strQhFile.AppendLine(describe);
strQhFile.AppendLine(curveStr.ToString());
sw.Write(strQhFile);
sw.Close();
}
}
}