Added EN_setnodeid and EN_setlinkid (Issue #306)
This commit is contained in:
@@ -250,7 +250,9 @@ Public Const EN_G_CURVE = 4 ' General\default curve
|
|||||||
Declare Function ENsetflowunits Lib "epanet2.dll" (ByVal code As Long) As Long
|
Declare Function ENsetflowunits Lib "epanet2.dll" (ByVal code As Long) As Long
|
||||||
Declare Function ENaddcontrol Lib "epanet2.dll" (Cindex As Long, ByVal Ctype As Long, ByVal Lindex As Long, ByVal setting As Single, ByVal Nindex As Long, ByVal Level As Single) As Long
|
Declare Function ENaddcontrol Lib "epanet2.dll" (Cindex As Long, ByVal Ctype As Long, ByVal Lindex As Long, ByVal setting As Single, ByVal Nindex As Long, ByVal Level As Single) As Long
|
||||||
Declare Function ENsetcontrol Lib "epanet2.dll" (ByVal Cindex As Long, ByVal Ctype As Long, ByVal Lindex As Long, ByVal setting As Single, ByVal Nindex As Long, ByVal Level As Single) As Long
|
Declare Function ENsetcontrol Lib "epanet2.dll" (ByVal Cindex As Long, ByVal Ctype As Long, ByVal Lindex As Long, ByVal setting As Single, ByVal Nindex As Long, ByVal Level As Single) As Long
|
||||||
|
Declare Function ENsetnodeid Lib "epanet2.dll" (ByVal index As Long, ByVal newid As String) As Long
|
||||||
Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal index As Long, ByVal code As Long, ByVal value As Single) As Long
|
Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal index As Long, ByVal code As Long, ByVal value As Single) As Long
|
||||||
|
Declare Function ENsetlinkid Lib "epanet2.dll" (ByVal index As Long, ByVal newid As String) As Long
|
||||||
Declare Function ENsetlinkvalue Lib "epanet2.dll" (ByVal index As Long, ByVal code As Long, ByVal value As Single) As Long
|
Declare Function ENsetlinkvalue Lib "epanet2.dll" (ByVal index As Long, ByVal code As Long, ByVal value As Single) As Long
|
||||||
Declare Function ENaddpattern Lib "epanet2.dll" (ByVal id As String) As Long
|
Declare Function ENaddpattern Lib "epanet2.dll" (ByVal id As String) As Long
|
||||||
Declare Function ENsetpattern Lib "epanet2.dll" (ByVal index As Long, F As Any, ByVal N As Long) As Long
|
Declare Function ENsetpattern Lib "epanet2.dll" (ByVal index As Long, F As Any, ByVal N As Long) As Long
|
||||||
|
|||||||
@@ -842,6 +842,14 @@ extern "C" {
|
|||||||
@return Error code.
|
@return Error code.
|
||||||
*/
|
*/
|
||||||
int DLLEXPORT ENsetcontrol(int cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level);
|
int DLLEXPORT ENsetcontrol(int cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief Change the ID name for a node.
|
||||||
|
@param index The index of a node. First node is index 1.
|
||||||
|
@param newid A string containing the node's new ID name.
|
||||||
|
@return Error code.
|
||||||
|
*/
|
||||||
|
int DLLEXPORT ENsetnodeid(int index, char *newid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief Set a property value for a node.
|
@brief Set a property value for a node.
|
||||||
@@ -852,6 +860,14 @@ extern "C" {
|
|||||||
@see EN_NodeProperty
|
@see EN_NodeProperty
|
||||||
*/
|
*/
|
||||||
int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v);
|
int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief Change the ID name for a link.
|
||||||
|
@param index The index of a link. First link is index 1.
|
||||||
|
@param newid A string containing the link's new ID name.
|
||||||
|
@return Error code.
|
||||||
|
*/
|
||||||
|
int DLLEXPORT ENsetlinkid(int index, char *newid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief Set a property value for a link.
|
@brief Set a property value for a link.
|
||||||
@@ -1297,7 +1313,9 @@ extern "C" {
|
|||||||
|
|
||||||
int DLLEXPORT EN_addcontrol(EN_ProjectHandle ph, int *cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level);
|
int DLLEXPORT EN_addcontrol(EN_ProjectHandle ph, int *cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level);
|
||||||
int DLLEXPORT EN_setcontrol(EN_ProjectHandle ph, int cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level);
|
int DLLEXPORT EN_setcontrol(EN_ProjectHandle ph, int cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level);
|
||||||
|
int DLLEXPORT EN_setnodeid(EN_ProjectHandle ph, int index, char *newid);
|
||||||
int DLLEXPORT EN_setnodevalue(EN_ProjectHandle ph, int index, int code, EN_API_FLOAT_TYPE v);
|
int DLLEXPORT EN_setnodevalue(EN_ProjectHandle ph, int index, int code, EN_API_FLOAT_TYPE v);
|
||||||
|
int DLLEXPORT EN_setlinkid(EN_ProjectHandle ph, int index, char *newid);
|
||||||
int DLLEXPORT EN_setlinkvalue(EN_ProjectHandle ph, int index, int code, EN_API_FLOAT_TYPE v);
|
int DLLEXPORT EN_setlinkvalue(EN_ProjectHandle ph, int index, int code, EN_API_FLOAT_TYPE v);
|
||||||
int DLLEXPORT EN_addpattern(EN_ProjectHandle ph, char *id);
|
int DLLEXPORT EN_addpattern(EN_ProjectHandle ph, char *id);
|
||||||
int DLLEXPORT EN_setpattern(EN_ProjectHandle ph, int index, EN_API_FLOAT_TYPE *f, int len);
|
int DLLEXPORT EN_setpattern(EN_ProjectHandle ph, int index, EN_API_FLOAT_TYPE *f, int len);
|
||||||
|
|||||||
@@ -227,7 +227,9 @@ Public Const EN_CUSTOM = 2 ' user-defined custom curve
|
|||||||
Declare Function ENgetversion Lib "epanet2.dll" (ByRef Value As Int32) As Int32
|
Declare Function ENgetversion Lib "epanet2.dll" (ByRef Value As Int32) As Int32
|
||||||
|
|
||||||
Declare Function ENsetcontrol Lib "epanet2.dll" (ByVal Cindex As Int32, ByVal CtlType As Int32, ByVal Lindex As Int32, ByVal Setting As Single, ByVal Nindex As Int32, ByVal Level As Single) As Int32
|
Declare Function ENsetcontrol Lib "epanet2.dll" (ByVal Cindex As Int32, ByVal CtlType As Int32, ByVal Lindex As Int32, ByVal Setting As Single, ByVal Nindex As Int32, ByVal Level As Single) As Int32
|
||||||
|
Declare Function ENsetnodeid Lib "epanet2.dll" (ByVal index As Int32, ByVal newid As String) As Int32
|
||||||
Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Code As Int32, ByVal Value As Single) As Int32
|
Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Code As Int32, ByVal Value As Single) As Int32
|
||||||
|
Declare Function ENsetlinkid Lib "epanet2.dll" (ByVal index As Int32, ByVal newid As String) As Int32
|
||||||
Declare Function ENsetlinkvalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Code As Int32, ByVal Value As Single) As Int32
|
Declare Function ENsetlinkvalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Code As Int32, ByVal Value As Single) As Int32
|
||||||
Declare Function ENsetpattern Lib "epanet2.dll" (ByVal Index as Int32, ByRef F as Single, ByVal N as Int32) as Int32
|
Declare Function ENsetpattern Lib "epanet2.dll" (ByVal Index as Int32, ByRef F as Single, ByVal N as Int32) as Int32
|
||||||
Declare Function ENsetpatternvalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Period As Int32, ByVal Value As Single) As Int32
|
Declare Function ENsetpatternvalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Period As Int32, ByVal Value As Single) As Int32
|
||||||
|
|||||||
64
src/epanet.c
64
src/epanet.c
@@ -437,10 +437,18 @@ int DLLEXPORT ENaddcontrol(int *cindex, int ctype, int lindex,
|
|||||||
level);
|
level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DLLEXPORT ENsetnodeid(int index, char *newid) {
|
||||||
|
return EN_setnodeid(_defaultModel, index, newid);
|
||||||
|
}
|
||||||
|
|
||||||
int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v) {
|
int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v) {
|
||||||
return EN_setnodevalue(_defaultModel, index, code, v);
|
return EN_setnodevalue(_defaultModel, index, code, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DLLEXPORT ENsetlinkid(int index, char *newid) {
|
||||||
|
return EN_setlinkid(_defaultModel, index, newid);
|
||||||
|
}
|
||||||
|
|
||||||
int DLLEXPORT ENsetlinkvalue(int index, int code, EN_API_FLOAT_TYPE v) {
|
int DLLEXPORT ENsetlinkvalue(int index, int code, EN_API_FLOAT_TYPE v) {
|
||||||
return EN_setlinkvalue(_defaultModel, index, code, v);
|
return EN_setlinkvalue(_defaultModel, index, code, v);
|
||||||
}
|
}
|
||||||
@@ -2892,6 +2900,34 @@ int DLLEXPORT EN_setcontrol(EN_ProjectHandle ph, int cindex, int ctype, int lind
|
|||||||
return set_error(p->error_handle, 0);
|
return set_error(p->error_handle, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DLLEXPORT EN_setnodeid(EN_ProjectHandle ph, int index, char *newid)
|
||||||
|
{
|
||||||
|
EN_Project *p = (EN_Project*)ph;
|
||||||
|
EN_Network *net = &p->network;
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
// Check for valid arguments
|
||||||
|
if (index <= 0 || index > net->Nnodes)
|
||||||
|
{
|
||||||
|
return set_error(p->error_handle, 203);
|
||||||
|
}
|
||||||
|
n = strlen(newid);
|
||||||
|
if (n < 1 || n > MAXID) return set_error(p->error_handle, 209);
|
||||||
|
if (strcspn(newid, " ;") < n) return set_error(p->error_handle, 209);
|
||||||
|
|
||||||
|
// Check if another node with same name exists
|
||||||
|
if (ENHashTableFind(net->NodeHashTable, newid) > 0)
|
||||||
|
{
|
||||||
|
return set_error(p->error_handle, 215);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the existing node ID with the new value
|
||||||
|
ENHashTableDelete(net->NodeHashTable, net->Node[index].ID);
|
||||||
|
strncpy(net->Node[index].ID, newid, MAXID);
|
||||||
|
ENHashTableInsert(net->NodeHashTable, net->Node[index].ID, index);
|
||||||
|
return set_error(p->error_handle, 0);
|
||||||
|
}
|
||||||
|
|
||||||
int DLLEXPORT EN_setnodevalue(EN_ProjectHandle ph, int index, int code, EN_API_FLOAT_TYPE v)
|
int DLLEXPORT EN_setnodevalue(EN_ProjectHandle ph, int index, int code, EN_API_FLOAT_TYPE v)
|
||||||
/*----------------------------------------------------------------
|
/*----------------------------------------------------------------
|
||||||
** Input: index = node index
|
** Input: index = node index
|
||||||
@@ -3158,6 +3194,34 @@ int DLLEXPORT EN_setnodevalue(EN_ProjectHandle ph, int index, int code, EN_API_F
|
|||||||
return set_error(p->error_handle, 0);
|
return set_error(p->error_handle, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DLLEXPORT EN_setlinkid(EN_ProjectHandle ph, int index, char *newid)
|
||||||
|
{
|
||||||
|
EN_Project *p = (EN_Project*)ph;
|
||||||
|
EN_Network *net = &p->network;
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
// Check for valid arguments
|
||||||
|
if (index <= 0 || index > net->Nlinks)
|
||||||
|
{
|
||||||
|
return set_error(p->error_handle, 204);
|
||||||
|
}
|
||||||
|
n = strlen(newid);
|
||||||
|
if (n < 1 || n > MAXID) return set_error(p->error_handle, 211);
|
||||||
|
if (strcspn(newid, " ;") < n) return set_error(p->error_handle, 211);
|
||||||
|
|
||||||
|
// Check if another link with same name exists
|
||||||
|
if (ENHashTableFind(net->LinkHashTable, newid) > 0)
|
||||||
|
{
|
||||||
|
return set_error(p->error_handle, 215);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the existing link ID with the new value
|
||||||
|
ENHashTableDelete(net->LinkHashTable, net->Link[index].ID);
|
||||||
|
strncpy(net->Link[index].ID, newid, MAXID);
|
||||||
|
ENHashTableInsert(net->LinkHashTable, net->Link[index].ID, index);
|
||||||
|
return set_error(p->error_handle, 0);
|
||||||
|
}
|
||||||
|
|
||||||
int DLLEXPORT EN_setlinkvalue(EN_ProjectHandle ph, int index, int code,
|
int DLLEXPORT EN_setlinkvalue(EN_ProjectHandle ph, int index, int code,
|
||||||
EN_API_FLOAT_TYPE v)
|
EN_API_FLOAT_TYPE v)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user