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) // } }