using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace HStation.RevitDev.RevitDataExport
{
class EpanetBase2_2
{
const string DLLName = "Yw.Hydraulic.Core.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);
///
/// 加强版添加模式,如果模式名称不存在,则自动新增模式;新增完后,自定绑定节点
///
///
///
///
///
///
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, Epanet2.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);
///
/// 调用初始化水力计算系统
///
/// 0-1标志,说明分析结果是否以均匀报告时段保存到EPANETH二进制输出文件。
/// 返回错误编号,0表示无错误
[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 ENgetErrorMsg22(int projectID, 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 baseDemand);
//
//补充
[DllImport(DLLName)]
public static extern int ENgetdemandpattern22(int projectID, int nodeIndex, int demandIndex,
out List patIndex);
//补充
[DllImport(DLLName)]
public static extern int ENgetTotalDemand22(int projectID, int p, out double value);
public const int MAXID = 31;
//int DLLEXPORT EN_getTotalDemand(EN_Project pr, int p, double *value)
//
}
}