#define EPA2_2 //EPA2_0
|
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Runtime.InteropServices;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
|
namespace Hydro.HydraulicModel
|
{
|
|
class HydraulicCoreBase
|
{
|
|
const string DLLName = "Hydro.hydraulicCore.dll";//"epanet2.2.dll";//"epanet2.2.dll"
|
//{ These are codes used by the DLL functions }
|
|
|
|
|
|
|
|
#region 节点
|
// 获取节点参数值
|
[DllImport(DLLName)]
|
public static extern int ENgetnodevalue22(int projectID, int index, int paramcode, ref float value);
|
// 获取节点类型
|
[DllImport(DLLName)]
|
public static extern int ENgetnodetype22(int projectID, int index, ref int typecode);
|
// 获取节点编号
|
[DllImport(DLLName)]
|
public static extern int ENgetnodeindex22(int projectID, string nodeid, ref int nodeindex);
|
|
// 获取节点 id
|
[DllImport(DLLName)]
|
public static extern int ENgetnodeid22(int projectID, int index, StringBuilder id);
|
[DllImport(DLLName)]
|
public static extern int ENgetnodecomment22(int projectID, int index, StringBuilder id);
|
[DllImport(DLLName)]
|
public static extern int ENaddnode22(int projectID, string id, int nodeType, ref int index);
|
|
[DllImport(DLLName)]
|
public static extern int ENgetcoord22(int projectID, int index,ref double x,ref double y);
|
[DllImport(DLLName)]
|
public static extern int ENsetcoord22(int projectID, int index, double x, double y);
|
|
// 设置节点参数
|
[DllImport(DLLName)]
|
public static extern int ENsetnodevalue22(int projectID, int index, int paramcode, float value);
|
#endregion
|
|
#region 管段
|
|
// 设置管段参数
|
[DllImport(DLLName)]
|
public static extern int ENsetlinkvalue22(int projectID, int index, int paramcode, float value);
|
|
// 获取管段 id
|
[DllImport(DLLName)]
|
|
public static extern int ENgetlinkid22(int projectID, int index, StringBuilder id);
|
[DllImport(DLLName)]
|
|
public static extern int ENgetlinkcomment22(int projectID, int index, StringBuilder id);
|
// 获取管段 id
|
[DllImport(DLLName)]
|
|
public static extern int ENgetlinkindex22(int projectID, string id, ref int index);
|
// 获取管段节点
|
[DllImport(DLLName)]
|
public static extern int ENgetlinknodes22(int projectID, int index, ref int fromnode, ref int tonode);
|
|
|
// 获得管段参数
|
[DllImport(DLLName)]
|
public static extern int ENgetlinkvalue22(int projectID, int index, int paramcode, ref float value);
|
|
// 设置管段类型
|
[DllImport(DLLName)]
|
public static extern int ENgetlinktype22(int projectID, int index, ref int typecode);
|
// 增加管线
|
[DllImport(DLLName)]
|
public static extern int ENaddlink22(int projectID,string id, int linkType,string fromNode,string toNode,ref int index);
|
|
|
#endregion
|
|
#region 模式
|
// 获取模式id
|
[DllImport(DLLName)]
|
public static extern int ENgetpatternindex22(int projectID, string patternID, ref int patternindex);
|
|
|
// 增加新的时间模式
|
[DllImport(DLLName)]
|
public static extern int ENaddpattern22(int projectID, string patternID);
|
// 设置时间模式的值
|
[DllImport(DLLName)]
|
public static extern int ENsetpatternvalue22(int projectID, int index, int period, float value);
|
|
|
|
public static int ENsetpatternvalue_ex(int projectID, string patternID, int period, float value)
|
{
|
int err = 0;
|
int patternid = 0;
|
err=ENgetpatternindex22(projectID, patternID, ref patternid);
|
if (err > 0) return err;
|
if (patternid==0)
|
{
|
err=ENaddpattern22(projectID, patternID);
|
if (err > 0) return err;
|
err = ENgetpatternindex22(projectID, patternID, ref patternid);
|
if (err > 0) return err;
|
|
}
|
return ENsetpatternvalue22(projectID, patternid, period, value);
|
}
|
|
|
|
[DllImport(DLLName)]
|
public static extern int ENsetpattern22(int projectID, int index, float[] values, int n);
|
|
/// <summary>
|
/// 加强版添加模式,如果模式名称不存在,则自动新增模式;新增完后,自定绑定节点
|
/// </summary>
|
/// <param name="projectID"></param>
|
/// <param name="nodeID"></param>
|
/// <param name="patternID"></param>
|
/// <param name="values"></param>
|
/// <returns></returns>
|
public static int ENsetpatternvalue_ex(int projectID,string nodeID, string patternID, double[] values)
|
{
|
int err = 0;
|
int patternid = 0;
|
err = ENgetpatternindex22(projectID, patternID, ref patternid);
|
|
if (err > 0 || patternid == 0)
|
{
|
err = ENaddpattern22(projectID, patternID);
|
if (err > 0) return err;
|
err = ENgetpatternindex22(projectID, patternID, ref patternid);
|
if (err > 0) return err;
|
}
|
|
float[] v = values.Select(f => (float)f).ToArray();
|
err = ENsetpattern22(projectID, patternid, v, values.Length);
|
if (err > 0) return err;
|
int nodeindex = 0;
|
err = ENgetnodeindex22 (projectID,nodeID,ref nodeindex);
|
if (err > 0) return err;
|
err = ENsetnodevalue22(projectID, nodeindex, HydraulicCore.Const_class.Const_Node.EN_PATTERN, patternid);
|
return err;
|
}
|
|
|
[DllImport(DLLName)]
|
public static extern int ENsetcurve22(int projectID, int index, float[] Xvalues, float[] Yvalues, int n);
|
|
|
|
|
|
#endregion
|
|
#region 计算控制
|
|
//epanet 完全模拟函数
|
[DllImport(DLLName)]
|
public static extern int ENepanet22(int projectID, string f1, string f2, string f3, IntPtr vfunc);
|
// 关闭管网文件
|
[DllImport(DLLName)]
|
public static extern int ENclose22(int projectID);
|
// 关闭水力模拟系统,释放内存
|
[DllImport(DLLName)]
|
public static extern int ENcloseH22(int projectID);
|
// 关闭水质模拟系统,释放内存
|
[DllImport(DLLName)]
|
public static extern int ENcloseQ22(int projectID);
|
// 调用打开管网文件
|
[DllImport(DLLName)]
|
public static extern int ENopen22(int projectID, string f1, string f2, string f3);
|
// 调用打开水力分析系统
|
[DllImport(DLLName)]
|
public static extern int ENopenH22(int projectID);
|
// 调用打开水力分析系统
|
[DllImport(DLLName)]
|
public static extern int ENopenQ22(int projectID);
|
|
/// <summary>
|
/// 调用初始化水力计算系统
|
/// </summary>
|
/// <param name="saveflag">0-1标志,说明分析结果是否以均匀报告时段保存到EPANETH二进制输出文件。</param>
|
/// <returns>返回错误编号,0表示无错误</returns>
|
[DllImport(DLLName)]
|
public static extern int ENinitH22(int projectID, int saveflag);
|
|
// 调用运行水力计算
|
[DllImport(DLLName)]
|
public static extern int ENrunH22(int projectID, ref int t1);
|
// 水力计算步长
|
[DllImport(DLLName)]
|
public static extern int ENnextH22(int projectID, ref int tstep1);
|
// 调用初始化水质计算系统
|
[DllImport(DLLName)]
|
public static extern int ENinitQ22(int projectID, int saveflag);
|
// 调用运行水力计算
|
[DllImport(DLLName)]
|
public static extern int ENrunQ22(int projectID, ref int t1);
|
// 水力计算步长
|
[DllImport(DLLName)]
|
public static extern int ENnextQ22(int projectID, ref int tstep1);
|
|
|
|
// 全部水力模拟
|
[DllImport(DLLName)]
|
public static extern int ENsolveH22(int projectID);
|
// 全部水质模拟
|
[DllImport(DLLName)]
|
public static extern int ENsolveQ22(int projectID);
|
|
// 生成报告
|
[DllImport(DLLName)]
|
public static extern int ENsaveH22(int projectID);
|
#endregion
|
|
#region 报告
|
// 生成报告
|
[DllImport(DLLName)]
|
public static extern int ENreport22(int projectID);
|
// 重置报告
|
[DllImport(DLLName)]
|
public static extern int ENresetreport22(int projectID);
|
|
// 重置报告
|
[DllImport(DLLName)]
|
public static extern int ENsetreport22(int projectID, string x);
|
#endregion
|
|
#region 其他
|
|
|
// 获取管网元件数
|
[DllImport(DLLName)]
|
public static extern int ENgetcount22(int projectID, int countcode, ref int count);
|
|
// 获取错误信息
|
[DllImport(DLLName)]
|
public static extern int ENgeterror22(int projectID, int errcode, StringBuilder errmsg, int nchar);
|
|
// 输出文件信息
|
[DllImport(DLLName)]
|
public static extern int ENsaveinpfile22(int projectID, string filename);
|
|
|
|
// 获取简单控制状态的参数
|
[DllImport(DLLName)]
|
public static extern int ENgetcontrol22(int projectID, int cindex, ref int ctype, ref int index, ref
|
float setting, ref int nindex, ref float level);
|
|
|
|
// 设置选项
|
[DllImport(DLLName)]
|
public static extern int ENsetoption22(int projectID, int code, float v);
|
// 设置选项
|
[DllImport(DLLName)]
|
public static extern int ENsetstatusreport22(int projectID, int code);
|
// 设置选项
|
[DllImport(DLLName)]
|
public static extern int ENgetoption22(int projectID, int code,ref float v);
|
|
|
// 设置选项
|
[DllImport(DLLName)]
|
public static extern int ENgettimeparam22(int projectID, int code,ref int v);
|
// 设置水质类型
|
[DllImport(DLLName)]
|
public static extern int ENsetqualtype22(int projectID, int qualcode, string chemname,
|
string chemunits, string tracenode);
|
|
|
|
|
#endregion
|
|
//补充
|
[DllImport(DLLName)]
|
public static extern int ENsetinistatus22(int projectID, string id, string value);
|
|
//补充
|
[DllImport(DLLName)]
|
public static extern int ENsetprojectreport22(int projectID, int value);
|
|
////补充
|
//EN_Project p, int nodeIndex, int demandIndex,
|
// double* baseDemand
|
//补充
|
[DllImport(DLLName)]
|
public static extern int ENgetbasedemand22(int projectID, int nodeIndex, int demandIndex, out List<double> baseDemand);
|
//
|
|
//补充
|
[DllImport(DLLName)]
|
public static extern int ENgetdemandpattern22(int projectID, int nodeIndex, int demandIndex,
|
out List<int> patIndex);
|
|
//补充
|
[DllImport(DLLName)]
|
public static extern int ENgetTotalDemand22(int projectID, int p,out double value);
|
|
|
//int DLLEXPORT EN_getTotalDemand(EN_Project pr, int p, double *value)
|
//
|
}
|
|
|
|
|
}
|