SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
linkoffsetdisplay.h
Go to the documentation of this file.
1#ifndef LINKOFFSETDISPLAY_H
2#define LINKOFFSETDISPLAY_H
3
17#include <openswmm/engine/openswmm_engine.h>
18#include <openswmm/engine/openswmm_links.h>
19#include <openswmm/engine/openswmm_model.h>
20#include <openswmm/engine/openswmm_nodes.h>
21
22#include <cstring>
23
25
27{
28 char buf[32] = {};
29 if (!e || swmm_options_get(e, "LINK_OFFSETS", buf, sizeof(buf)) != SWMM_OK)
30 return false;
31 return std::strncmp(buf, "ELEV", 4) == 0 || std::strncmp(buf, "elev", 4) == 0;
32}
33
34// Invert of the node the offset is measured from (0 when unresolved).
35inline double endInvert(SWMM_Engine e, int idx, bool upstream)
36{
37 int n = -1;
38 if (upstream) swmm_link_get_from_node(e, idx, &n);
39 else swmm_link_get_to_node(e, idx, &n);
40 double inv = 0.0;
41 if (n >= 0) swmm_node_get_invert_elev(e, n, &inv);
42 return inv;
43}
44
45inline int getDisplay(SWMM_Engine e, int idx, double *v, bool upstream,
46 int (*rawGet)(SWMM_Engine, int, double *))
47{
48 const int rc = rawGet(e, idx, v);
49 if (rc == SWMM_OK && v && elevationMode(e))
50 *v += endInvert(e, idx, upstream);
51 return rc;
52}
53
54// Legacy GetOffsetDepth clamps a below-invert elevation to depth 0.
55inline int setDisplay(SWMM_Engine e, int idx, double v, bool upstream,
56 int (*rawSet)(SWMM_Engine, int, double))
57{
58 if (elevationMode(e))
59 {
60 v -= endInvert(e, idx, upstream);
61 if (v < 0.0) v = 0.0;
62 }
63 return rawSet(e, idx, v);
64}
65
66inline int getOffsetUp(SWMM_Engine e, int i, double *v)
67{ return getDisplay(e, i, v, true, &swmm_link_get_offset_up); }
68inline int setOffsetUp(SWMM_Engine e, int i, double v)
69{ return setDisplay(e, i, v, true, &swmm_link_set_offset_up); }
70
71inline int getOffsetDn(SWMM_Engine e, int i, double *v)
72{ return getDisplay(e, i, v, false, &swmm_link_get_offset_dn); }
73inline int setOffsetDn(SWMM_Engine e, int i, double v)
74{ return setDisplay(e, i, v, false, &swmm_link_set_offset_dn); }
75
76// Weir / outlet crest is measured from the upstream node.
77inline int getCrestHeight(SWMM_Engine e, int i, double *v)
78{ return getDisplay(e, i, v, true, &swmm_link_get_crest_height); }
79inline int setCrestHeight(SWMM_Engine e, int i, double v)
80{ return setDisplay(e, i, v, true, &swmm_link_set_crest_height); }
81
82} // namespace linkoffsetdisplay
83
84#endif // LINKOFFSETDISPLAY_H
size_t i
Definition contourjob.cpp:27
int e
Definition inpmeshreader.cpp:41
std::size_t n
Definition mesh2dresultsexport.cpp:426
Definition linkoffsetdisplay.h:24
int getOffsetUp(SWMM_Engine e, int i, double *v)
Definition linkoffsetdisplay.h:66
int setDisplay(SWMM_Engine e, int idx, double v, bool upstream, int(*rawSet)(SWMM_Engine, int, double))
Definition linkoffsetdisplay.h:55
int setCrestHeight(SWMM_Engine e, int i, double v)
Definition linkoffsetdisplay.h:79
int getOffsetDn(SWMM_Engine e, int i, double *v)
Definition linkoffsetdisplay.h:71
int getCrestHeight(SWMM_Engine e, int i, double *v)
Definition linkoffsetdisplay.h:77
double endInvert(SWMM_Engine e, int idx, bool upstream)
Definition linkoffsetdisplay.h:35
int getDisplay(SWMM_Engine e, int idx, double *v, bool upstream, int(*rawGet)(SWMM_Engine, int, double *))
Definition linkoffsetdisplay.h:45
int setOffsetUp(SWMM_Engine e, int i, double v)
Definition linkoffsetdisplay.h:68
bool elevationMode(SWMM_Engine e)
Definition linkoffsetdisplay.h:26
int setOffsetDn(SWMM_Engine e, int i, double v)
Definition linkoffsetdisplay.h:73
void * SWMM_Engine
Definition objectdefaultsapplier.h:19
QVector< int > v
pool vertex indices
Definition pslgminsize.cpp:159