From c1c80da667e367a5f6d5e603479b3d15c5e91808 Mon Sep 17 00:00:00 2001 From: Elad Salomons Date: Wed, 26 Sep 2018 11:15:37 +0300 Subject: [PATCH] Add APIs to get\set demand categories names --- include/epanet2.bas | 3 ++ include/epanet2.h | 26 ++++++++++++++-- src/epanet.c | 58 ++++++++++++++++++++++++++++++++++++ win_build/WinSDK/epanet2.def | 4 ++- 4 files changed, 88 insertions(+), 3 deletions(-) diff --git a/include/epanet2.bas b/include/epanet2.bas index da0f66e..1fbc228 100644 --- a/include/epanet2.bas +++ b/include/epanet2.bas @@ -226,6 +226,9 @@ Public Const EN_G_CURVE = 4 ' General\default curve Declare Function ENgetbasedemand Lib "epanet2.dll" (ByVal index As Long, ByVal DemandIndex As Long, value As Single) As Long Declare Function ENgetdemandpattern Lib "epanet2.dll" (ByVal index As Long, ByVal DemandIndex As Long, PatIndex As Long) As Long + Declare Function ENgetdemandname Lib "epanet2.dll" (ByVal index As Long, ByVal DemandIndex As Long, ByVal demandName As String) As Long + Declare Function ENsetdemandname Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal DemandIndex As Long, ByVal demandName As String) As Long + Declare Function ENgetlinkindex Lib "epanet2.dll" (ByVal id As String, index As Long) As Long Declare Function ENgetlinkid Lib "epanet2.dll" (ByVal index As Long, ByVal id As String) As Long Declare Function ENgetlinktype Lib "epanet2.dll" (ByVal index As Long, code As Long) As Long diff --git a/include/epanet2.h b/include/epanet2.h index c7ccf1e..4d088fa 100644 --- a/include/epanet2.h +++ b/include/epanet2.h @@ -936,6 +936,26 @@ extern "C" { @see EN_QualityType */ int DLLEXPORT ENgetqualinfo(int *qualcode, char *chemname, char *chemunits, int *tracenode); + + /** + @brief Sets the node's demand name for a category. + @param nodeIndex The index of a node. + @param demandIdx The index of a demand category. + @param demandName The demand name for the selected category. + @return Error code. + @see ENgetdemandname + */ + int DLLEXPORT ENsetdemandname(int nodeIndex, int demandIdx, char *demandName); + + /** + @brief Retrieves the node's demand name for a category. + @param nodeIndex The index of a node. + @param demandIdx The index of a demand category. + @param demandName The demand name for the selected category. + @return Error code. + @see ENsetdemandname + */ + int DLLEXPORT ENgetdemandname(int nodeIndex, int demandIdx, char *demandName); /** @brief Sets the node's base demand for a category. @@ -1287,12 +1307,14 @@ extern "C" { int DLLEXPORT EN_getdemandmodel(EN_ProjectHandle ph, int *type, EN_API_FLOAT_TYPE *pmin, EN_API_FLOAT_TYPE *preq, EN_API_FLOAT_TYPE *pexp); - int DLLEXPORT EN_setdemandmodel(EN_ProjectHandle ph, int type, EN_API_FLOAT_TYPE pmin, + int DLLEXPORT EN_setdemandmodel(EN_ProjectHandle ph, int type, EN_API_FLOAT_TYPE pmin, EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp); + int DLLEXPORT EN_setdemandname(EN_ProjectHandle ph, int nodeIndex, int demandIdx, char *demandName); + int DLLEXPORT EN_getdemandname(EN_ProjectHandle ph, int nodeIndex, int demandIdx, char *demandName); int DLLEXPORT EN_getqualinfo(EN_ProjectHandle ph, int *qualcode, char *chemname, char *chemunits, int *tracenode); int DLLEXPORT EN_setbasedemand(EN_ProjectHandle ph, int nodeIndex, int demandIdx, EN_API_FLOAT_TYPE baseDemand); - int DLLEXPORT EN_setdemandpattern(EN_ProjectHandle ph, int nodeIndex, int demandIdx, int patIndex); + int DLLEXPORT EN_setdemandpattern(EN_ProjectHandle ph, int nodeIndex, int demandIdx, int patIndex); int DLLEXPORT EN_getcurveindex(EN_ProjectHandle ph, char *id, int *index); int DLLEXPORT EN_getcurveid(EN_ProjectHandle ph, int index, char *id); int DLLEXPORT EN_getcurvelen(EN_ProjectHandle ph, int index, int *len); diff --git a/src/epanet.c b/src/epanet.c index 2776daf..a445069 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -530,6 +530,15 @@ int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value) { return EN_getaveragepatternvalue(_defaultModel, index, value); } +int DLLEXPORT ENgetdemandname(int nodeIndex, int demandIdx, + char *demandName) { + return EN_getdemandname(_defaultModel, nodeIndex, demandIdx, demandName); +} + +int DLLEXPORT ENsetdemandname(int nodeIndex, int demandIdx, + char *demandName) { + return EN_setdemandname(_defaultModel, nodeIndex, demandIdx, demandName); +} int DLLEXPORT ENgetrule(int index, int *nPremises, int *nTrueActions, int *nFalseActions, EN_API_FLOAT_TYPE *priority) { @@ -4762,6 +4771,55 @@ int DLLEXPORT EN_setbasedemand(EN_ProjectHandle ph, int nodeIndex, int demandIdx return set_error(pr->error_handle, 0); } +int DLLEXPORT EN_getdemandname(EN_ProjectHandle ph, int nodeIndex, int demandIdx, char *demandName) { + Pdemand d; + int n = 1; + + EN_Project *p = (EN_Project*)ph; + + strcpy(demandName, ""); + /* Check for valid arguments */ + if (!p->Openflag) + return set_error(p->error_handle, 102); + if (nodeIndex <= 0 || nodeIndex > p->network.Njuncs) + return set_error(p->error_handle, 203); + for (d = p->network.Node[nodeIndex].D; n < demandIdx && d->next != NULL; d = d->next) { + n++; + } + if (n != demandIdx) { + return set_error(p->error_handle, 253); + } + strcpy(demandName, d->Name); + return set_error(p->error_handle, 0); +} + +int DLLEXPORT EN_setdemandname(EN_ProjectHandle ph, int nodeIndex, int demandIdx, char *demandName) { + + EN_Project *pr = (EN_Project*)ph; + + EN_Network *net = &pr->network; + Snode *Node = net->Node; + + const int Nnodes = net->Nnodes; + const int Njuncs = net->Njuncs; + + double *Ucf = pr->Ucf; + + Pdemand d; + int n = 1; + /* Check for valid arguments */ + if (!pr->Openflag) + return set_error(pr->error_handle, 102); + if (nodeIndex <= 0 || nodeIndex > Njuncs) + return set_error(pr->error_handle, 203); + for (d = Node[nodeIndex].D; n < demandIdx && d->next != NULL; d = d->next) + n++; + if (n != demandIdx) + return set_error(pr->error_handle, 253); + strncpy(d->Name, demandName, MAXMSG); + return set_error(pr->error_handle, 0); +} + int DLLEXPORT EN_setdemandpattern(EN_ProjectHandle ph, int nodeIndex, int demandIdx, int patIndex) { EN_Project *pr = (EN_Project*)ph; diff --git a/win_build/WinSDK/epanet2.def b/win_build/WinSDK/epanet2.def index 398b2f1..fd4d4a9 100644 --- a/win_build/WinSDK/epanet2.def +++ b/win_build/WinSDK/epanet2.def @@ -99,4 +99,6 @@ EXPORTS ENgetdemandmodel = _ENgetdemandmodel@16 ENsetdemandmodel = _ENsetdemandmodel@16 ENgetcurvetype = _ENgetcurvetype@8 - ENinit = _ENinit@16 \ No newline at end of file + ENinit = _ENinit@16 + ENgetdemandname = _ENgetdemandname@12 + ENsetdemandname = _ENsetdemandname@12 \ No newline at end of file