diff --git a/include/epanet2.bas b/include/epanet2.bas index 497ca1c..d782c6d 100644 --- a/include/epanet2.bas +++ b/include/epanet2.bas @@ -229,6 +229,7 @@ Public Const EN_G_CURVE = 4 ' General\default curve Declare Function ENgetcurve Lib "epanet2.dll" (ByVal curveIndex As Long, ByVal CurveID As String, nValues As Long, xValues As Any, yValues As Any) As Long Declare Function ENgetheadcurveindex Lib "epanet2.dll" (ByVal pumpIndex As Long, curveIndex As Long) As Long Declare Function ENgetpumptype Lib "epanet2.dll" (ByVal index As Long, PumpType As Long) As Long + Declare Function ENgetcurvetype Lib "epanet2.dll" (ByVal curveindex As Long, CurveType As Long) As Long Declare Function ENgetversion Lib "epanet2.dll" (value As Long) As Long diff --git a/include/epanet2.h b/include/epanet2.h index feb8a37..e070f37 100644 --- a/include/epanet2.h +++ b/include/epanet2.h @@ -763,10 +763,19 @@ extern "C" { @param linkIndex The index of the pump element @param[out] outType The integer-typed pump curve type signifier (output parameter) @return Error code - @see EN_CurveType + @see EN_PumpType */ int DLLEXPORT ENgetpumptype(int linkIndex, int *outType); - + + /** + @brief Get the type of a curve + @param curveIndex The index of the curve element + @param[out] outType The integer-typed curve curve type signifier (output parameter) + @return Error code + @see EN_CurveType + */ + int DLLEXPORT ENgetcurvetype(int curveIndex, int *outType); + /** @brief Get the version number. This number is to be interpreted with implied decimals, i.e., "20100" == "2(.)01(.)00" @param[out] version The version of EPANET @@ -1189,6 +1198,7 @@ extern "C" { int DLLEXPORT EN_getheadcurveindex(EN_Project *p, int pumpIndex, int *curveIndex); int DLLEXPORT EN_setheadcurveindex(EN_Project *p, int pumpIndex, int curveIndex); int DLLEXPORT EN_getpumptype(EN_Project *p, int linkIndex, int *outType); + int DLLEXPORT EN_getcurvetype(EN_Project *p, int curveIndex, int *outType); int DLLEXPORT EN_getversion(int *version); int DLLEXPORT EN_setcontrol(EN_Project *p, int cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level); int DLLEXPORT EN_setnodevalue(EN_Project *p, int index, int code, EN_API_FLOAT_TYPE v); diff --git a/src/epanet.c b/src/epanet.c index aec91b9..03d1300 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -435,6 +435,10 @@ int DLLEXPORT ENgetpumptype(int index, int *type) { return EN_getpumptype(_defaultModel, index, type); } +int DLLEXPORT ENgetcurvetype(int curveindex, int *type) { + return EN_getcurvetype(_defaultModel, curveindex, type); +} + int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands) { return EN_getnumdemands(_defaultModel, nodeIndex, numDemands); } @@ -3349,7 +3353,8 @@ int DLLEXPORT EN_setheadcurveindex(EN_Project *p, int index, int curveindex) { pump->Q0 /= Ucf[FLOW]; pump->Qmax /= Ucf[FLOW]; pump->Hmax /= Ucf[HEAD]; - + + p->network.Curve[curveindex].Type = P_CURVE; return (0); } @@ -3370,6 +3375,18 @@ int DLLEXPORT EN_getpumptype(EN_Project *p, int index, int *type) { return (0); } +int DLLEXPORT EN_getcurvetype(EN_Project *p, int curveindex, int *type) { + + EN_Network *net = &p->network; + + if (!p->Openflag) + return (102); + if (curveindex < 1 || curveindex > net->Ncurves) + return (206); + *type = net->Curve[curveindex].Type; + return (0); +} + /* ---------------------------------------------------------------- Functions for opening files diff --git a/win_build/WinSDK/epanet2.def b/win_build/WinSDK/epanet2.def index 09acdb7..e6a674a 100644 --- a/win_build/WinSDK/epanet2.def +++ b/win_build/WinSDK/epanet2.def @@ -92,4 +92,5 @@ EXPORTS ENaddlink = _ENaddlink@16 ENdeletelink = _ENdeletelink@4 ENdeletenode = _ENdeletenode@4 - ENsetlinktype = _ENsetlinktype@8 \ No newline at end of file + ENsetlinktype = _ENsetlinktype@8 + ENgetcurvetype = _ENgetcurvetype@8 \ No newline at end of file