HydroCouple  2.0.0
HydroCouple Interface Definitions
Loading...
Searching...
No Matches
hydrocouplespatial.h
Go to the documentation of this file.
1
22#ifndef HYDROCOUPLESPATIAL_H
23#define HYDROCOUPLESPATIAL_H
24
25#include "hydrocouple.h"
26
27
28namespace HydroCouple
29{
33 namespace Spatial
34 {
35 class IEdge;
36 class IRasterBand;
37 class IPolygon;
39
45 {
46
50 Cell,
51
55 Vertex,
56
60 Edge,
61
65 Face,
66 };
67
72 {
76 Node,
77
81 Edge,
82 };
83
88 enum class SpatialDataType
89 {
91 Scalar,
95 Vector,
97 Tensor,
98 };
99
104 {
106 Cartesian,
111 };
112
118 {
119
120 public:
124 virtual ~ISpatialReferenceSystem() = default;
125
131 [[nodiscard]] virtual int authSRID() const = 0;
132
136 [[nodiscard]] virtual const std::string &authName() const = 0;
137
141 [[nodiscard]] virtual const std::string &srText() const = 0;
142
146 [[nodiscard]] virtual HydroCouple::IUnit::DistanceUnits distanceUnits() const = 0;
147 };
148
153 {
154 public:
158 virtual ~IEnvelope() = default;
159
164 [[nodiscard]] virtual double minX() const = 0;
165
170 [[nodiscard]] virtual double maxX() const = 0;
171
176 [[nodiscard]] virtual double minY() const = 0;
177
182 [[nodiscard]] virtual double maxY() const = 0;
183
188 [[nodiscard]] virtual double minZ() const = 0;
189
194 [[nodiscard]] virtual double maxZ() const = 0;
195 };
196
201 {
202 public:
206 enum class GeometryType
207 {
208 Geometry = 0,
209 Point = 1,
210 LineString = 2,
211 Polygon = 3,
212 Triangle = 17,
213 MultiPoint = 4,
214 MultiLineString = 5,
215 MultiPolygon = 6,
217 CircularString = 8,
218 CompoundCurve = 9,
219 CurvePolygon = 10,
220 MultiCurve = 11,
221 MultiSurface = 12,
222 Curve = 13,
223 Surface = 14,
225 TIN = 16,
226
227 GeometryZ = 1000,
228 PointZ = 1001,
229 LineStringZ = 1002,
230 PolygonZ = 1003,
231 TriangleZ = 1017,
232 MultiPointZ = 1004,
233 MultiLineStringZ = 1005,
234 MultiPolygonZ = 1006,
235 GeometryCollectionZ = 1007,
236 CircularStringZ = 1008,
237 CompoundCurveZ = 1009,
238 CurvePolygonZ = 1010,
239 MultiCurveZ = 1011,
240 MultiSurfaceZ = 1012,
241 CurveZ = 1013,
242 SurfaceZ = 1014,
243 PolyhedralSurfaceZ = 1015,
244 TINZ = 1016,
245
246 GeometryM = 2000,
247 PointM = 2001,
248 LineStringM = 2002,
249 PolygonM = 2003,
250 TriangleM = 2017,
251 MultiPointM = 2004,
252 MultiLineStringM = 2005,
253 MultiPolygonM = 2006,
254 GeometryCollectionM = 2007,
255 CircularStringM = 2008,
256 CompoundCurveM = 2009,
257 CurvePolygonM = 2010,
258 MultiCurveM = 2011,
259 MultiSurfaceM = 2012,
260 CurveM = 2013,
261 SurfaceM = 2014,
262 PolyhedralSurfaceM = 2015,
263 TINM = 2016,
264
265 GeometryZM = 3000,
266 PointZM = 3001,
267 LineStringZM = 3002,
268 PolygonZM = 3003,
269 TriangleZM = 3017,
270 MultiPointZM = 3004,
271 MultiLineStringZM = 3005,
272 MultiPolygonZM = 3006,
274 CircularStringZM = 3008,
275 CompoundCurveZM = 3009,
276 CurvePolygonZM = 3010,
277 MultiCurveZM = 3011,
278 MultiSurfaceZM = 3012,
279 CurveZM = 3013,
280 SurfaceZM = 3014,
281 PolyhedralSurfaceZM = 3015,
282 TINZM = 3016,
283 };
284
288 virtual ~IGeometry() = default;
289
294 [[nodiscard]] virtual const std::string &id() const = 0;
295
300 [[nodiscard]] virtual unsigned int index() const = 0;
301
309 [[nodiscard]] virtual int dimension() const = 0;
310
316 [[nodiscard]] virtual int coordinateDimension() const = 0;
317
324 [[nodiscard]] virtual GeometryType geometryType() const = 0;
325
329 [[nodiscard]] virtual ISpatialReferenceSystem *spatialReferenceSystem() const = 0;
330
335 [[nodiscard]] virtual IEnvelope *envelope() const = 0;
336
341 [[nodiscard]] virtual std::string getWKT() const = 0;
342
346 [[nodiscard]] virtual std::vector<unsigned char> getWKB() const = 0;
347
352 [[nodiscard]] virtual bool isEmpty() const = 0;
353
361 [[nodiscard]] virtual bool isSimple() const = 0;
362
366 [[nodiscard]] virtual bool is3D() const = 0;
367
371 [[nodiscard]] virtual bool isMeasured() const = 0;
372
382 [[nodiscard]] virtual IGeometry *boundary() const = 0;
383
388
392 [[nodiscard]] virtual bool equals(const IGeometry &geom) const = 0;
393
397 [[nodiscard]] virtual bool disjoint(const IGeometry &geom) const = 0;
398
402 [[nodiscard]] virtual bool intersects(const IGeometry &geom) const = 0;
403
407 [[nodiscard]] virtual bool touches(const IGeometry &geom) const = 0;
408
412 [[nodiscard]] virtual bool crosses(const IGeometry &geom) const = 0;
413
417 [[nodiscard]] virtual bool within(const IGeometry &geom) const = 0;
418
422 [[nodiscard]] virtual bool contains(const IGeometry &geom) const = 0;
423
427 [[nodiscard]] virtual bool overlaps(const IGeometry &geom) const = 0;
428
438 [[nodiscard]] virtual bool relate(const IGeometry &geom) const = 0;
439
443 [[nodiscard]] virtual IGeometry *locateAlong(double value) const = 0;
444
448 [[nodiscard]] virtual IGeometry *locateBetween(double mStart, double mEnd) const = 0;
449
451
465 [[nodiscard]] virtual double distance(const IGeometry &geom) const = 0;
466
474 [[nodiscard]] virtual IGeometry *buffer(double bufferDistance) const = 0;
475
482 [[nodiscard]] virtual IGeometry *convexHull() const = 0;
483
487 [[nodiscard]] virtual IGeometry *intersection(const IGeometry &geom) const = 0;
488
492 [[nodiscard]] virtual IGeometry *unionG(const IGeometry &geom) const = 0;
493
497 [[nodiscard]] virtual IGeometry *difference(const IGeometry &geom) const = 0;
498
502 [[nodiscard]] virtual IGeometry *symmetricDifference(const IGeometry &geom) const = 0;
503
505 };
506
520 class IGeometryCollection : public virtual IGeometry
521 {
522
523 public:
527 virtual ~IGeometryCollection() = default;
528
533 [[nodiscard]] virtual int geometryCount() const = 0;
534
540 [[nodiscard]] virtual IGeometry *geometry(int index) const = 0;
541 };
542
553 class IPoint : public virtual IGeometry
554 {
555 public:
559 virtual ~IPoint() = default;
560
564 [[nodiscard]] virtual double x() const = 0;
565
569 [[nodiscard]] virtual double y() const = 0;
570
574 [[nodiscard]] virtual double z() const = 0;
575
579 [[nodiscard]] virtual double m() const = 0;
580 };
581
595 class IMultiPoint : public virtual IGeometryCollection
596 {
597
598 public:
602 virtual ~IMultiPoint() = default;
603
607 [[nodiscard]] virtual IPoint *point(int index) const = 0;
608 };
609
613 class IVertex : public virtual IPoint
614 {
615 public:
619 virtual ~IVertex() = default;
620
625 [[nodiscard]] virtual unsigned int index() const = 0;
626
632 [[nodiscard]] virtual IEdge *edge() const = 0;
633 };
634
658 class ICurve : public virtual IGeometry
659 {
660
661 public:
665 virtual ~ICurve() = default;
666
670 [[nodiscard]] virtual double length() const = 0;
671
675 [[nodiscard]] virtual IPoint *startPoint() const = 0;
676
680 [[nodiscard]] virtual IPoint *endPoint() const = 0;
681
685 [[nodiscard]] virtual bool isClosed() const = 0;
686
691 [[nodiscard]] virtual bool isRing() const = 0;
692 };
693
715 class IMultiCurve : public virtual IGeometryCollection
716 {
717 public:
718 virtual ~IMultiCurve() = default;
719
724 [[nodiscard]] virtual bool isClosed() const = 0;
725
730 [[nodiscard]] virtual double length() const = 0;
731 };
732
737 class ILineString : public virtual ICurve
738 {
739 public:
743 virtual ~ILineString() = default;
744
748 [[nodiscard]] virtual int pointCount() const = 0;
749
753 [[nodiscard]] virtual IPoint *point(int index) const = 0;
754 };
755
759 class IMultiLineString : public virtual IMultiCurve
760 {
761 public:
765 virtual ~IMultiLineString() = default;
766
768 [[nodiscard]] virtual ILineString *lineString(int index) const = 0;
769 };
770
774 class ILine : public virtual ILineString
775 {
776 public:
780 virtual ~ILine() = default;
781 };
782
786 class ILinearRing : public virtual ILineString
787 {
788 public:
792 virtual ~ILinearRing() = default;
793 };
794
801 class IEdge
802 {
803 public:
807 virtual ~IEdge() = default;
808
813 [[nodiscard]] virtual unsigned int index() const = 0;
814
819 [[nodiscard]] virtual IVertex *orig() const = 0;
820
825 [[nodiscard]] virtual IVertex *dest() const = 0;
826
832 [[nodiscard]] virtual IPolygon *left() const = 0;
833
839 [[nodiscard]] virtual IPolygon *right() const = 0;
840
845 [[nodiscard]] virtual IPolygon *face() const = 0;
846
852 [[nodiscard]] virtual IEdge *rot() const = 0;
853
859 [[nodiscard]] virtual IEdge *invRot() const = 0;
860
866 [[nodiscard]] virtual IEdge *sym() const = 0;
867
873 [[nodiscard]] virtual IEdge *origNext() const = 0;
874
880 [[nodiscard]] virtual IEdge *origPrev() const = 0;
881
887 [[nodiscard]] virtual IEdge *destNext() const = 0;
888
894 [[nodiscard]] virtual IEdge *destPrev() const = 0;
895
901 [[nodiscard]] virtual IEdge *leftNext() const = 0;
902
908 [[nodiscard]] virtual IEdge *leftPrev() const = 0;
909
915 [[nodiscard]] virtual IEdge *rightNext() const = 0;
916
922 [[nodiscard]] virtual IEdge *rightPrev() const = 0;
923 };
924
947 class ISurface : public virtual IGeometry
948 {
949 public:
953 virtual ~ISurface() = default;
954
959 [[nodiscard]] virtual double area() const = 0;
960
965 [[nodiscard]] virtual IPoint *centroid() const = 0;
966
970 [[nodiscard]] virtual IPoint *pointOnSurface() const = 0;
971
976 [[nodiscard]] virtual IMultiCurve *boundaryMultiCurve() const = 0;
977 };
978
983 class IMultiSurface : public virtual IGeometryCollection
984 {
985
986 public:
990 virtual ~IMultiSurface() = default;
991
996 [[nodiscard]] virtual double area() const = 0;
997
1002 [[nodiscard]] virtual IPoint *centroid() const = 0;
1003
1007 [[nodiscard]] virtual IPoint *pointOnSurface() const = 0;
1008 };
1009
1047 class IPolygon : public virtual ISurface
1048 {
1049 public:
1053 virtual ~IPolygon() = default;
1054
1058 [[nodiscard]] virtual ILineString *exteriorRing() const = 0;
1059
1063 [[nodiscard]] virtual int interiorRingCount() const = 0;
1064
1068 [[nodiscard]] virtual ILineString *interiorRing(int index) const = 0;
1069
1075 [[nodiscard]] virtual IEdge *edge() const = 0;
1076
1081 [[nodiscard]] virtual IPolyhedralSurface *polyhedralSurface() const = 0;
1082 };
1083
1087 class IMultiPolygon : public virtual IMultiSurface
1088 {
1089
1090 public:
1091 virtual ~IMultiPolygon() = default;
1092
1096 [[nodiscard]] virtual IPolygon *polygon(int index) const = 0;
1097 };
1098
1103 class ITriangle : public virtual IPolygon
1104 {
1105 public:
1109 virtual ~ITriangle() = default;
1110
1114 [[nodiscard]] virtual IVertex *vertex1() const = 0;
1115
1119 [[nodiscard]] virtual IVertex *vertex2() const = 0;
1120
1124 [[nodiscard]] virtual IVertex *vertex3() const = 0;
1125
1129 [[nodiscard]] virtual IVertex *vertex(int index) const = 0;
1130 };
1131
1135 class INetwork : public virtual IIdentity
1136 {
1137 public:
1141 virtual ~INetwork() = default;
1142
1147 [[nodiscard]] virtual int edgeCount() const = 0;
1148
1154 [[nodiscard]] virtual IEdge *edge(int index) const = 0;
1155
1160 [[nodiscard]] virtual int vertexCount() const = 0;
1161
1167 [[nodiscard]] virtual IVertex *vertex(int index) const = 0;
1168 };
1169
1204 class IPolyhedralSurface : public virtual ISurface
1205 {
1206 public:
1210 virtual ~IPolyhedralSurface() = default;
1211
1216 [[nodiscard]] virtual int patchCount() const = 0;
1217
1222 [[nodiscard]] virtual IPolygon *patch(int index) const = 0;
1223
1228 [[nodiscard]] virtual int vertexCount() const = 0;
1229
1235 [[nodiscard]] virtual IVertex *vertex(int index) const = 0;
1236
1241 [[nodiscard]] virtual IMultiPolygon *boundingPolygons(const IPolygon *polygon) const = 0;
1242
1247 [[nodiscard]] virtual bool isClosed() const = 0;
1248 };
1249
1254 class ITIN : public virtual IPolyhedralSurface
1255 {
1256 public:
1260 virtual ~ITIN() = default;
1261
1265 [[nodiscard]] virtual ITriangle *triangle(int index) const = 0;
1266 };
1267
1271 class IRaster : public virtual IIdentity
1272 {
1273
1274 public:
1279 {
1281 Unknown,
1283 Byte,
1285 UInt16,
1287 Int16,
1289 UInt32,
1291 Int32,
1293 Float32,
1295 Float64,
1297 CInt16,
1299 CInt32,
1301 CFloat32,
1303 CFloat64,
1305 ARGB32,
1308 };
1309
1313 virtual ~IRaster() = 0;
1314
1318 [[nodiscard]] virtual int xSize() const = 0;
1319
1323 [[nodiscard]] virtual int ySize() const = 0;
1324
1328 [[nodiscard]] virtual int rasterBandCount() const = 0;
1329
1333 virtual void addRasterBand(RasterDataType dataType) = 0;
1334
1338 [[nodiscard]] virtual ISpatialReferenceSystem *spatialReferenceSystem() const = 0;
1339
1348 virtual void geoTransformation(double *transformationMatrix) = 0;
1349
1353 [[nodiscard]] virtual IRasterBand *getRasterBand(int bandIndex) const = 0;
1354 };
1355
1359 class IRasterBand : public virtual IIdentity
1360 {
1361
1362 public:
1366 virtual ~IRasterBand() = default;
1367
1369 [[nodiscard]] virtual int xSize() const = 0;
1370
1372 [[nodiscard]] virtual int ySize() const = 0;
1373
1375 [[nodiscard]] virtual IRaster *raster() const = 0;
1376
1378 [[nodiscard]] virtual IRaster::RasterDataType dataType() const = 0;
1379
1388 virtual void read(int xOffset, int yOffset, int xSize, int ySize, void *image) const = 0;
1389
1398 virtual void write(int xOffset, int yOffset, int xSize, int ySize, const void *image) = 0;
1399
1403 [[nodiscard]] virtual double noData() const = 0;
1404 };
1405
1410 class IRegularGrid2D : public virtual IIdentity
1411 {
1412 public:
1416 virtual ~IRegularGrid2D() = default;
1417
1421 [[nodiscard]] virtual ISpatialReferenceSystem *spatialReferenceSystem() const = 0;
1422
1427 [[nodiscard]] virtual RegularGridType gridType() const = 0;
1428
1433 [[nodiscard]] virtual int numXNodes() const = 0;
1434
1439 [[nodiscard]] virtual int numYNodes() const = 0;
1440
1447 [[nodiscard]] virtual double xNodeLocation(int xNodeIndex, int yNodeIndex) const = 0;
1448
1455 [[nodiscard]] virtual double yNodeLocation(int xNodeIndex, int yNodeIndex) const = 0;
1456
1463 [[nodiscard]] virtual bool isActive(int xCellIndex, int yCellIndex) const = 0;
1464 };
1465
1470 class IRegularGrid3D : public virtual IIdentity
1471 {
1472 public:
1476 virtual ~IRegularGrid3D() = default;
1477
1481 [[nodiscard]] virtual ISpatialReferenceSystem *spatialReferenceSystem() const = 0;
1482
1487 [[nodiscard]] virtual RegularGridType gridType() const = 0;
1488
1493 [[nodiscard]] virtual int numXNodes() const = 0;
1494
1499 [[nodiscard]] virtual int numYNodes() const = 0;
1500
1505 [[nodiscard]] virtual int numZNodes() const = 0;
1506
1513 [[nodiscard]] virtual double xNodeLocation(int xNodeIndex, int yNodeIndex) const = 0;
1514
1521 [[nodiscard]] virtual double yNodeLocation(int xNodeIndex, int yNodeIndex) const = 0;
1522
1530 [[nodiscard]] virtual double zNodeLocation(int xNodeIndex, int yNodeIndex, int zNodeIndex) const = 0;
1531
1539 [[nodiscard]] virtual bool isActive(int xCellIndex, int yCellIndex, int zCellIndex) const = 0;
1540 };
1541
1547 {
1548
1549 public:
1554
1558 virtual ~IGeometryComponentDataItem() = default;
1559
1564 [[nodiscard]] virtual IGeometry::GeometryType geometryType() const = 0;
1565
1570 [[nodiscard]] virtual int geometryCount() const = 0;
1571
1577 [[nodiscard]] virtual IGeometry *geometry(int geometryIndex) const = 0;
1578
1583 [[nodiscard]] virtual HydroCouple::IDimension *geometryDimension() const = 0;
1584
1589 [[nodiscard]] virtual HydroCouple::Spatial::IEnvelope *envelope() const = 0;
1590
1597 virtual void getValue(
1598 hydrocouple_variant &data,
1599 int geometryDimensionIndex,
1600 std::span<const int>dimensionIndexes = {}) const = 0;
1601
1611 virtual void getValues(
1612 hydrocouple_variant *data,
1613 int geometryDimensionIndex,
1614 std::span<const int>dimensionIndexes = {},
1615 int geometryDimensionLength = 1,
1616 std::span<const int>dimensionLength = {}) const = 0;
1617
1624 virtual void setValue(
1625 const hydrocouple_variant &data,
1626 int geometryDimensionIndex,
1627 std::span<const int>dimensionIndexes = {}) = 0;
1628
1638 virtual void setValues(
1639 const hydrocouple_variant *data,
1640 int geometryDimensionIndex,
1641 std::span<const int>dimensionIndexes = {},
1642 int geometryDimensionLength = 1,
1643 std::span<const int>dimensionLengths = {}) = 0;
1644 };
1645
1651 {
1652
1653 public:
1658
1662 virtual ~INetworkComponentDataItem() = default;
1663
1668 [[nodiscard]] virtual INetwork *network() const = 0;
1669
1674 [[nodiscard]] virtual NetworkDataObjectType networkDataObjectType() const = 0;
1675
1680 [[nodiscard]] virtual SpatialDataType networkDataType() const = 0;
1681
1686 [[nodiscard]] virtual IDimension *edgeDimension() const = 0;
1687
1692 [[nodiscard]] virtual IDimension *vertexDimension() const = 0;
1693
1701 virtual void getValue(
1702 hydrocouple_variant &data,
1703 int edgeDimensionIndex,
1704 int vertexDimensionIndex,
1705 std::span<const int>dimensionIndexes = {}) const = 0;
1706
1718 virtual void getValues(
1719 hydrocouple_variant *data,
1720 int edgeDimensionIndex,
1721 int vertexDimensionIndex,
1722 std::span<const int>dimensionIndexes = {},
1723 int edgeDimensionIndexLength = 1,
1724 int vertexDimensionIndexLength = 1,
1725 std::span<const int>dimensionLengths = {}) const = 0;
1726
1734 virtual void setValue(
1735 const hydrocouple_variant &data,
1736 int edgeDimensionIndex,
1737 int vertexDimensionIndex,
1738 std::span<const int>dimensionIndexes = {}) = 0;
1739
1751 virtual void setValues(
1752 const hydrocouple_variant *data,
1753 int edgeDimensionIndex,
1754 int vertexDimensionIndex,
1755 std::span<const int>dimensionIndexes = {},
1756 int edgeDimensionIndexLength = 1,
1757 int vertexDimensionIndexLength = 1,
1758 std::span<const int>dimensionLengths = {}) = 0;
1759 };
1760
1766 {
1767
1768 public:
1773
1778
1783 [[nodiscard]] virtual MeshDataObjectType meshDataObjectType() const = 0;
1784
1789 [[nodiscard]] virtual SpatialDataType meshDataType() const = 0;
1790
1794 [[nodiscard]] virtual IPolyhedralSurface *polyhedralSurface() const = 0;
1795
1800 [[nodiscard]] virtual IDimension *patchDimension() const = 0;
1801
1806 [[nodiscard]] virtual IDimension *edgeDimension() const = 0;
1807
1812 [[nodiscard]] virtual IDimension *vertexDimension() const = 0;
1813
1822 virtual void getValue(
1823 hydrocouple_variant &data,
1824 int patchDimensionIndex,
1825 int edgeDimensionIndex,
1826 int vertexDimensionIndex,
1827 std::span<const int>dimensionIndexes = {}) const = 0;
1828
1846 virtual void getValues(
1847 hydrocouple_variant *data,
1848 int patchDimensionIndex,
1849 int edgeDimensionIndex,
1850 int vertexDimensionIndex,
1851 std::span<const int>dimensionIndexes = {},
1852 int patchDimensionIndexLength = 1,
1853 int edgeDimensionIndexLength = 1,
1854 int vertexDimensionIndexLength = 1,
1855 std::span<const int>dimensionLengths = {}) const = 0;
1856
1866 virtual void setValue(
1867 const hydrocouple_variant &data,
1868 int patchDimensionIndex,
1869 int edgeDimensionIndex,
1870 int vertexDimensionIndex,
1871 std::span<const int>dimensionIndexes = {}) = 0;
1872
1886 virtual void setValues(
1887 const hydrocouple_variant *data,
1888 int patchDimensionIndex,
1889 int edgeDimensionIndex,
1890 int vertexDimensionIndex,
1891 std::span<const int>dimensionIndexes = {},
1892 int patchDimensionIndexLength = 1,
1893 int edgeDimensionIndexLength = 1,
1894 int vertexDimensionIndexLength = 1,
1895 std::span<const int>dimensionLengths = {}) = 0;
1896 };
1897
1926
1932 {
1933
1934 public:
1939
1943 virtual ~IRasterComponentDataItem() = default;
1944
1948 [[nodiscard]] virtual IRaster *raster() const = 0;
1949
1953 [[nodiscard]] virtual IDimension *xDimension() const = 0;
1954
1958 [[nodiscard]] virtual IDimension *yDimension() const = 0;
1959
1963 [[nodiscard]] virtual IDimension *bandDimension() const = 0;
1964
1974 virtual void getValue(
1975 hydrocouple_variant &data,
1976 int xIndex,
1977 int yIndex,
1978 int bandIndex,
1979 std::span<const int>dimensionIndexes = {}) const = 0;
1980
1994 virtual void getValues(
1995 hydrocouple_variant *data,
1996 int xIndex,
1997 int yIndex,
1998 int bandIndex,
1999 std::span<const int>dimensionIndexes = {},
2000 int xIndexLength = 1,
2001 int yIndexLength = 1,
2002 int bandIndexLength = 1,
2003 std::span<const int>dimensionLengths = {}) const = 0;
2004
2014 virtual void setValue(
2015 const hydrocouple_variant &data,
2016 int xIndex,
2017 int yIndex,
2018 int band,
2019 std::span<const int>dimensionIndexes = {}) = 0;
2020
2034 virtual void setValues(
2035 const hydrocouple_variant *data,
2036 int xIndex,
2037 int yIndex,
2038 int bandIndex,
2039 std::span<const int>dimensionIndexes = {},
2040 int xIndexLength = 1,
2041 int yIndexLength = 1,
2042 int bandIndexLength = 1,
2043 std::span<const int>dimensionLengths = {}) = 0;
2044 };
2045
2051 {
2052
2053 public:
2058
2063
2068 [[nodiscard]] virtual IRegularGrid2D *grid() const = 0;
2069
2074 [[nodiscard]] virtual MeshDataObjectType meshDataObjectType() const = 0;
2075
2080 [[nodiscard]] virtual IDimension *xCellDimension() const = 0;
2081
2086 [[nodiscard]] virtual IDimension *yCellDimension() const = 0;
2087
2092 [[nodiscard]] virtual IDimension *cellEdgeDimension() const = 0;
2093
2098 [[nodiscard]] virtual IDimension *cellVertexDimension() const = 0;
2099
2110 virtual void getValue(
2111 hydrocouple_variant &data,
2112 int xCellIndex,
2113 int yCellIndex,
2114 int cellEdgeIndex,
2115 int cellVertexIndex,
2116 std::span<const int>dimensionIndexes = {}) const = 0;
2117
2133 virtual void getValues(
2134 hydrocouple_variant *data,
2135 int xCellIndex,
2136 int yCellIndex,
2137 int cellEdgeIndex,
2138 int cellVertexIndex,
2139 std::span<const int>dimensionIndexes = {},
2140 int xCellIndexLength = 1,
2141 int yCellIndexLength = 1,
2142 int cellEdgeIndexLength = 1,
2143 int cellVertexIndexLength = 1,
2144 std::span<const int>dimensionLengths = {}) const = 0;
2145
2156 virtual void setValue(
2157 const hydrocouple_variant &data,
2158 int xCellIndex,
2159 int yCellIndex,
2160 int cellEdgeIndex,
2161 int cellVertexIndex,
2162 std::span<const int>dimensionIndexes = {}) = 0;
2163
2179 virtual void setValues(
2180 const hydrocouple_variant *data,
2181 int xCellIndex,
2182 int yCellIndex,
2183 int cellEdgeIndex,
2184 int cellVertexIndex,
2185 std::span<const int>dimensionIndexes = {},
2186 int xCellIndexLength = 1,
2187 int yCellIndexLength = 1,
2188 int cellEdgeIndexLength = 1,
2189 int cellVertexIndexLength = 1,
2190 std::span<const int>dimensionLengths = {}) = 0;
2191 };
2192
2198 {
2199
2200 public:
2205
2210
2214 [[nodiscard]] virtual IRegularGrid3D *grid() const = 0;
2215
2220 [[nodiscard]] virtual MeshDataObjectType meshDataObjectType() const = 0;
2221
2225 [[nodiscard]] virtual IDimension *xCellDimension() const = 0;
2226
2230 [[nodiscard]] virtual IDimension *yCellDimension() const = 0;
2231
2235 [[nodiscard]] virtual IDimension *zCellDimension() const = 0;
2236
2241 [[nodiscard]] virtual IDimension *cellFaceDimension() const = 0;
2242
2247 [[nodiscard]] virtual IDimension *cellVertexDimension() const = 0;
2248
2260 virtual void getValue(
2261 hydrocouple_variant &data,
2262 int xCellIndex,
2263 int yCellIndex,
2264 int zCellIndex,
2265 int cellFaceIndex,
2266 int cellVertexIndex,
2267 std::span<const int>dimensionIndexes = {}) const = 0;
2268
2286 virtual void getValues(
2287 hydrocouple_variant *data,
2288 int xCellIndex,
2289 int yCellIndex,
2290 int zCellIndex,
2291 int cellFaceIndex,
2292 int cellVertexIndex,
2293 std::span<const int>dimensionIndexes = {},
2294 int xCellIndexLength = 1,
2295 int yCellIndexLength = 1,
2296 int zCellIndexLength = 1,
2297 int cellFaceIndexLength = 1,
2298 int cellVertexIndexLength = 1,
2299 std::span<const int>dimensionLengths = {}) const = 0;
2300
2312 virtual void setValue(
2313 const hydrocouple_variant &data,
2314 int xCellIndex,
2315 int yCellIndex,
2316 int zCellIndex,
2317 int cellFaceIndex,
2318 int cellVertexIndex,
2319 std::span<const int>dimensionIndexes = {}) = 0;
2320
2338 virtual void setValues(
2339 const hydrocouple_variant *data,
2340 int xCellIndex,
2341 int yCellIndex,
2342 int zCellIndex,
2343 int cellFaceIndex,
2344 int cellVertexIndex,
2345 std::span<const int>dimensionIndexes = {},
2346 int xCellIndexLength = 1,
2347 int yCellIndexLength = 1,
2348 int zCellIndexLength = 1,
2349 int cellFaceIndexLength = 1,
2350 int cellVertexIndexLength = 1,
2351 std::span<const int>dimensionLengths = {}) = 0;
2352 };
2353
2354 }
2355}
2356
2357#endif // HYDROCOUPLESPATIAL_H
IComponentDataItem is a fundamental unit of data for a component.
Definition hydrocouple.h:1347
virtual void setValues(const hydrocouple_variant *data, std::span< const int >dimensionIndexes, std::span< const int >dimensionLengths={})=0
Sets a multi-dimensional array of values for given dimension indexes and strides along each dimension...
virtual void getValue(hydrocouple_variant &data, std::span< const int >dimensionIndexes) const =0
Gets a multi-dimensional array of values for given dimension indexes and strides along each dimension...
virtual void setValue(const hydrocouple_variant &data, std::span< const int >dimensionIndexes)=0
Sets a multi-dimensional array of values for given dimension indexes.
virtual void getValues(hydrocouple_variant *data, std::span< const int >dimensionIndexes, std::span< const int >dimensionLengths={}) const =0
Gets a multi-dimensional array of values for given dimension indexes and strides along each dimension...
virtual int dimensionLength(std::span< const int >dimensionIndexes={}) const =0
dimensionLength returns the length of the dimension specified by the given dimension indexes....
IDimension provides the properties of the dimensions of a variable.
Definition hydrocouple.h:981
IIdentity interface class defines a method to get the Id of an HydroCouple entity.
Definition hydrocouple.h:261
DistanceUnits
HydroCouple::DistanceUnits are the types of units that can be used to measure distance.
Definition hydrocouple.h:1157
A Curve is a 1-dimensional geometric object usually stored as a sequence of IPoints,...
Definition hydrocouplespatial.h:659
virtual IPoint * endPoint() const =0
The end IPoint of this ICurve.
virtual IPoint * startPoint() const =0
The start IPoint of this ICurve.
virtual bool isClosed() const =0
virtual double length() const =0
The length of this ICurve in its associated ISpatialReferenceSystem.
virtual bool isRing() const =0
virtual ~ICurve()=default
ICurve destructor.
A directed edge from one vertex to another, adjacent to two faces. Based on Dani Lischinski's code fr...
Definition hydrocouplespatial.h:802
virtual IEdge * sym() const =0
The IEdge from the destination to the origin of this IEdge.
virtual IEdge * origNext() const =0
The next ccw edge around (from) the origin of this IEdge.
virtual ~IEdge()=default
IEdge destructor.
virtual IEdge * rot() const =0
The dual of this edge, directed from its right to its left.
virtual unsigned int index() const =0
unique index identifier
virtual IPolygon * left() const =0
The left face of this edge.
virtual IEdge * leftPrev() const =0
The ccw edge around the left face before this edge.
virtual IEdge * destPrev() const =0
The next cw edge around (into) the destination of this edge.
virtual IEdge * origPrev() const =0
The next cw edge around (from) the origin of this edge.
virtual IEdge * leftNext() const =0
The ccw edge around the left face following this edge.
virtual IEdge * rightPrev() const =0
The IEdge around the right face ccw before this IEdge.
virtual IPolygon * face() const =0
The target face of this edge, if dual. Otherwise null if not dual.
virtual IPolygon * right() const =0
The right face of this edge.
virtual IEdge * destNext() const =0
The next ccw edge around (into) the destination of this edge.
virtual IVertex * orig() const =0
The origin IVertex of this IEdge.
virtual IEdge * invRot() const =0
The dual of this IEdge, directed from its left to its right.
virtual IEdge * rightNext() const =0
The edge around the right face ccw following this edge.
virtual IVertex * dest() const =0
The destination IVertex of this IEdge.
IEnvelope represents the minimum bounding box of a geometry.
Definition hydrocouplespatial.h:153
virtual double maxZ() const =0
The maximum z-coordinate value for this IEnvelope.
virtual double minZ() const =0
The minimum z-coordinate value for this IEnvelope.
virtual double maxY() const =0
The maximum y-coordinate value for this IEnvelope.
virtual double minX() const =0
The minimum x-coordinate value for this IEnvelope.
virtual ~IEnvelope()=default
IEnvelope destructor.
virtual double minY() const =0
The minimum y-coordinate value for this IEnvelope.
virtual double maxX() const =0
The maximum x-coordinate value for this IEnvelope.
An IGeometryCollection is a geometric object that is a collection of some number of IGeometry objects...
Definition hydrocouplespatial.h:521
virtual int geometryCount() const =0
The number of geometries in this IGeometryCollection.
virtual ~IGeometryCollection()=default
IGeometryCollection destructor.
virtual IGeometry * geometry(int index) const =0
The IGeometry object associated with a specified index.
IGeometryComponentDataItem is an IComponentDataItem whose data is associated with a collection of IGe...
Definition hydrocouplespatial.h:1547
virtual void setValues(const hydrocouple_variant *data, int geometryDimensionIndex, std::span< const int >dimensionIndexes={}, int geometryDimensionLength=1, std::span< const int >dimensionLengths={})=0
Sets a multi-dimensional array of values for given geometry dimension index and size for a hyperslab.
virtual IGeometry::GeometryType geometryType() const =0
Gets the geometry type for this component data item.
virtual HydroCouple::IDimension * geometryDimension() const =0
virtual void getValue(hydrocouple_variant &data, int geometryDimensionIndex, std::span< const int >dimensionIndexes={}) const =0
Gets value for given geometry dimension index.
virtual void setValue(const hydrocouple_variant &data, int geometryDimensionIndex, std::span< const int >dimensionIndexes={})=0
Sets value for given geometry dimension index.
virtual HydroCouple::Spatial::IEnvelope * envelope() const =0
Gets the bounding envelope for all geometries in this component data item.
virtual void getValues(hydrocouple_variant *data, int geometryDimensionIndex, std::span< const int >dimensionIndexes={}, int geometryDimensionLength=1, std::span< const int >dimensionLength={}) const =0
Gets a multi-dimensional array of values for given geometry dimension index and size for a hyperslab.
virtual int geometryCount() const =0
Gets the number of geometries in this component data item.
virtual IGeometry * geometry(int geometryIndex) const =0
Gets the geometry at the specified index.
virtual ~IGeometryComponentDataItem()=default
IGeometryComponentDataItem destructor.
IGeometry is the root class of the geometry hierarchy.
Definition hydrocouplespatial.h:201
virtual ~IGeometry()=default
IGeometry destructor.
virtual IGeometry * intersection(const IGeometry &geom) const =0
virtual bool is3D() const =0
virtual bool touches(const IGeometry &geom) const =0
virtual double distance(const IGeometry &geom) const =0
Returns the shortest distance between any two Points in the two geometric objects as calculated in th...
virtual bool intersects(const IGeometry &geom) const =0
virtual bool equals(const IGeometry &geom) const =0
virtual bool overlaps(const IGeometry &geom) const =0
virtual std::vector< unsigned char > getWKB() const =0
Exports this geometric object to a specific Well-known byte Representation of Geometry.
virtual bool relate(const IGeometry &geom) const =0
virtual bool isEmpty() const =0
If true, then this geometric object represents the empty point set ∅ for the coordinate space.
virtual bool disjoint(const IGeometry &geom) const =0
virtual IGeometry * buffer(double bufferDistance) const =0
Returns a geometric object that represents all Points whose distance from this geometric object is le...
virtual ISpatialReferenceSystem * spatialReferenceSystem() const =0
Spatial reference system of geometric object.
virtual int dimension() const =0
The inherent dimension of this geometric object, which must be less than or equal to the coordinate d...
virtual bool isSimple() const =0
Returns true if this geometric object has no anomalous geometric points, such as self intersection or...
virtual IGeometry * unionG(const IGeometry &geom) const =0
GeometryType
The type of IGeometry.
Definition hydrocouplespatial.h:207
virtual IEnvelope * envelope() const =0
The minimum bounding box for this Geometry, returned as a IGeometry. Recalculated at the time of the ...
virtual IGeometry * difference(const IGeometry &geom) const =0
virtual bool crosses(const IGeometry &geom) const =0
virtual bool isMeasured() const =0
virtual IGeometry * symmetricDifference(const IGeometry &geom) const =0
virtual unsigned int index() const =0
index of the geometry if it is part of a collection.
virtual bool within(const IGeometry &geom) const =0
virtual IGeometry * boundary() const =0
Returns the closure of the combinatorial boundary of this geometric object (Reference [1],...
virtual const std::string & id() const =0
id of the geometry.
virtual bool contains(const IGeometry &geom) const =0
virtual IGeometry * convexHull() const =0
virtual std::string getWKT() const =0
Exports this geometric object to a specific Well-known Text Representation of Geometry.
virtual GeometryType geometryType() const =0
Gets the geometry type of this object.
virtual IGeometry * locateAlong(double value) const =0
virtual int coordinateDimension() const =0
Get the dimension of the coordinates in this object.
virtual IGeometry * locateBetween(double mStart, double mEnd) const =0
The ILine class is an ILineString with exactly 2 IPoints.
Definition hydrocouplespatial.h:775
virtual ~ILine()=default
ILine destructor.
An ILineString is a Curve with linear interpolation between Points. Each consecutive pair of Points d...
Definition hydrocouplespatial.h:738
virtual int pointCount() const =0
The number of IPoints in this ILineString.
virtual ~ILineString()=default
ILineString destructor.
virtual IPoint * point(int index) const =0
An ILinearRing is an ILineString that is both isClosed() and isSimple().
Definition hydrocouplespatial.h:787
virtual ~ILinearRing()=default
ILinearRing destructor.
An IMultiCurve is a 1-dimensional IGeometryCollection whose elements are ICurves.
Definition hydrocouplespatial.h:716
virtual bool isClosed() const =0
virtual double length() const =0
The Length of this IMultiCurve which is equal to the sum of the lengths of the element ICurves.
An IMultiLineString is an IMultiCurve whose elements are ILineStrings.
Definition hydrocouplespatial.h:760
virtual ~IMultiLineString()=default
IMultiLineString destructor.
virtual ILineString * lineString(int index) const =0
Returns the ILineString at index.
An IMultiPoint is a 0-dimensional IGeometryCollection.
Definition hydrocouplespatial.h:596
virtual IPoint * point(int index) const =0
virtual ~IMultiPoint()=default
IMultiPoint destructor.
An IMultiPolygon is an IMultiSurface whose elements are IPolygons.
Definition hydrocouplespatial.h:1088
virtual IPolygon * polygon(int index) const =0
A MultiSurface is a 2-dimensional GeometryCollection whose elements are Surfaces, all using coordinat...
Definition hydrocouplespatial.h:984
virtual IPoint * pointOnSurface() const =0
A Point guaranteed to be on this ISurface.
virtual ~IMultiSurface()=default
IMultiSurface destructor.
virtual double area() const =0
The area of this ISurface, as measured in the spatial reference system of this ISurface.
virtual IPoint * centroid() const =0
The mathematical centroid for this ISurface as an IPoint. The result is not guaranteed to be on this ...
INetworkComponentDataItem is an IComponentDataItem whose data is associated with an INetwork of edges...
Definition hydrocouplespatial.h:1651
virtual void getValues(hydrocouple_variant *data, int edgeDimensionIndex, int vertexDimensionIndex, std::span< const int >dimensionIndexes={}, int edgeDimensionIndexLength=1, int vertexDimensionIndexLength=1, std::span< const int >dimensionLengths={}) const =0
getValues for given edge dimension index and node dimension index and size for a hyperslab.
virtual void getValue(hydrocouple_variant &data, int edgeDimensionIndex, int vertexDimensionIndex, std::span< const int >dimensionIndexes={}) const =0
getValue for given edge dimension index and node dimension index.
virtual NetworkDataObjectType networkDataObjectType() const =0
Gets the type of network data object associated with the data.
virtual SpatialDataType networkDataType() const =0
Gets the type of network data stored.
virtual void setValue(const hydrocouple_variant &data, int edgeDimensionIndex, int vertexDimensionIndex, std::span< const int >dimensionIndexes={})=0
setValue for given edge dimension index and node dimension index and data.
virtual IDimension * vertexDimension() const =0
nodeDimension represents the dimension for the vertices.
virtual IDimension * edgeDimension() const =0
edgeDimension represents the dimension for the edges.
virtual ~INetworkComponentDataItem()=default
INetworkComponentDataItem destructor.
virtual INetwork * network() const =0
network associated with this INetworkComponentDataItem.
virtual void setValues(const hydrocouple_variant *data, int edgeDimensionIndex, int vertexDimensionIndex, std::span< const int >dimensionIndexes={}, int edgeDimensionIndexLength=1, int vertexDimensionIndexLength=1, std::span< const int >dimensionLengths={})=0
setValues for given edge dimension index and node dimension index and size for a hyperslab.
INetwork represents a graph structure of connected vertices and edges.
Definition hydrocouplespatial.h:1136
virtual int edgeCount() const =0
edgeCount represents the number of all the edges in the network.
virtual int vertexCount() const =0
Gets the number of vertices in the network.
virtual ~INetwork()=default
INetwork destructor.
virtual IVertex * vertex(int index) const =0
Gets the vertex at the specified index in the network.
virtual IEdge * edge(int index) const =0
Gets the edge at the specified index in the network.
An IPoint is a 0-dimensional geometric object and represents a single location in coordinate space.
Definition hydrocouplespatial.h:554
virtual double m() const =0
The m-coordinate value for this IPoint. Returns NIL otherwise.
virtual double y() const =0
The y-coordinate value for this IPoint.
virtual double x() const =0
The x-coordinate value for this IPoint.
virtual double z() const =0
The z-coordinate value for this IPoint. Returns NIL otherwise.
virtual ~IPoint()=default
IPoint destructor.
A IPolygon is a planar ISurface defined by 1 exterior boundary and 0 or more interior boundaries.
Definition hydrocouplespatial.h:1048
virtual IPolyhedralSurface * polyhedralSurface() const =0
Gets the polyhedral surface this polygon belongs to.
virtual int interiorRingCount() const =0
virtual ILineString * interiorRing(int index) const =0
virtual ~IPolygon()=default
IPolygon destructor.
virtual ILineString * exteriorRing() const =0
virtual IEdge * edge() const =0
An arbitrary adjacent edge for this IPolygon.
IPolyhedralSurfaceComponentDataItem is an IComponentDataItem whose data is associated with an IPolyhe...
Definition hydrocouplespatial.h:1766
virtual void getValues(hydrocouple_variant *data, int patchDimensionIndex, int edgeDimensionIndex, int vertexDimensionIndex, std::span< const int >dimensionIndexes={}, int patchDimensionIndexLength=1, int edgeDimensionIndexLength=1, int vertexDimensionIndexLength=1, std::span< const int >dimensionLengths={}) const =0
getValues for given cell dimension index, edge dimension index and node dimension index and size for ...
virtual void setValue(const hydrocouple_variant &data, int patchDimensionIndex, int edgeDimensionIndex, int vertexDimensionIndex, std::span< const int >dimensionIndexes={})=0
setValues for given cell dimension index, edge dimension index, and node dimension index.
virtual IPolyhedralSurface * polyhedralSurface() const =0
virtual IDimension * vertexDimension() const =0
vertexDimension represents the dimension for the nodes of the edges of patches associated with the IP...
virtual IDimension * patchDimension() const =0
patchDimension represents the dimension for the patches associated with the IPolyhedralSurface.
virtual void setValues(const hydrocouple_variant *data, int patchDimensionIndex, int edgeDimensionIndex, int vertexDimensionIndex, std::span< const int >dimensionIndexes={}, int patchDimensionIndexLength=1, int edgeDimensionIndexLength=1, int vertexDimensionIndexLength=1, std::span< const int >dimensionLengths={})=0
setValues for given cell dimension index, edge dimension index, and node dimension index and size for...
virtual IDimension * edgeDimension() const =0
edgeDimension represents the dimension for the edges of patches associated with the IPolyhedralSurfac...
virtual ~IPolyhedralSurfaceComponentDataItem()=default
IPolyhedralSurfaceComponentDataItem destructor.
virtual void getValue(hydrocouple_variant &data, int patchDimensionIndex, int edgeDimensionIndex, int vertexDimensionIndex, std::span< const int >dimensionIndexes={}) const =0
getValue for given cell dimension index, edge dimension index, and node dimension index.
virtual MeshDataObjectType meshDataObjectType() const =0
Gets the type of mesh data object associated with this component data item.
virtual SpatialDataType meshDataType() const =0
Gets the type of mesh data stored.
An IPolyhedralSurface is a contiguous collection of polygons, which share common boundary segments.
Definition hydrocouplespatial.h:1205
virtual int vertexCount() const =0
Gets the number of vertices shared by the patches.
virtual IPolygon * patch(int index) const =0
virtual ~IPolyhedralSurface()=default
IPolyhedralSurface destructor.
virtual int patchCount() const =0
The number of polygons in this surface.
virtual IMultiPolygon * boundingPolygons(const IPolygon *polygon) const =0
virtual IVertex * vertex(int index) const =0
vertex of the network with the specified index.
IRasterBand is a single raster band for an IRaster.
Definition hydrocouplespatial.h:1360
virtual IRaster::RasterDataType dataType() const =0
Raster data type.
virtual IRaster * raster() const =0
Parent IRaster of this IRasterBand.
virtual int ySize() const =0
Number of pixels in y direction.
virtual void read(int xOffset, int yOffset, int xSize, int ySize, void *image) const =0
Reads data into the image block.
virtual int xSize() const =0
Number of pixels in the x direction.
virtual double noData() const =0
virtual ~IRasterBand()=default
IRasterBand destructor.
virtual void write(int xOffset, int yOffset, int xSize, int ySize, const void *image)=0
Writes image into the raster band.
IRasterComponentDataItem is an IComponentDataItem whose data is associated with an IRaster of pixel b...
Definition hydrocouplespatial.h:1932
virtual void setValues(const hydrocouple_variant *data, int xIndex, int yIndex, int bandIndex, std::span< const int >dimensionIndexes={}, int xIndexLength=1, int yIndexLength=1, int bandIndexLength=1, std::span< const int >dimensionLengths={})=0
Sets a multi-dimensional array of values for given dimension for a hyperslab.
virtual ~IRasterComponentDataItem()=default
IRasterComponentDataItem destructor.
virtual void getValue(hydrocouple_variant &data, int xIndex, int yIndex, int bandIndex, std::span< const int >dimensionIndexes={}) const =0
getValue for given x dimension index, y dimension index, and band dimension index.
virtual IDimension * yDimension() const =0
IDimension for yDirection.
virtual IDimension * xDimension() const =0
IDimension for xDirection.
virtual IRaster * raster() const =0
IRaster associated with this IRasterComponentDataItem.
virtual IDimension * bandDimension() const =0
IDimension for IRasterBands.
virtual void getValues(hydrocouple_variant *data, int xIndex, int yIndex, int bandIndex, std::span< const int >dimensionIndexes={}, int xIndexLength=1, int yIndexLength=1, int bandIndexLength=1, std::span< const int >dimensionLengths={}) const =0
Gets a multi-dimensional array of values for given dimension for a hyperslab.
virtual void setValue(const hydrocouple_variant &data, int xIndex, int yIndex, int band, std::span< const int >dimensionIndexes={})=0
setValue for given x dimension index, y dimension index, and band dimension index.
A Raster spatial feature.
Definition hydrocouplespatial.h:1272
virtual void geoTransformation(double *transformationMatrix)=0
Fetches the affine transformation coefficients. It is an array of size 6.
virtual int rasterBandCount() const =0
Number of raster bands.
virtual ~IRaster()=0
IRaster destructor.
virtual int xSize() const =0
Number of pixels in the x direction.
virtual ISpatialReferenceSystem * spatialReferenceSystem() const =0
The ISpatialReferenceSystem represents the spatial reference system of this raster.
virtual void addRasterBand(RasterDataType dataType)=0
Adds a new IRasterBand.
RasterDataType
The data type associated with a raster.
Definition hydrocouplespatial.h:1279
@ Float32
Thirty two bit floating point.
@ ARGB32_Premultiplied
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32_Premultiplied.
@ Unknown
Unknown or unspecified type.
@ UInt16
Sixteen bit unsigned integer.
@ ARGB32
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32.
@ Int32
Thirty two bit signed integer.
@ Float64
Sixty four bit floating point.
@ UInt32
Thirty two bit unsigned integer.
virtual int ySize() const =0
Number of pixels in y direction.
virtual IRasterBand * getRasterBand(int bandIndex) const =0
Gets the IRasterBand for the band with index bandIndex.
IRegularGrid2DComponentDataItem is an IComponentDataItem whose data is associated with an IRegularGri...
Definition hydrocouplespatial.h:2051
virtual IDimension * cellEdgeDimension() const =0
cellEdgeDimension. Edge indices start from the bottom and go in a counter clockwise order.
virtual void setValue(const hydrocouple_variant &data, int xCellIndex, int yCellIndex, int cellEdgeIndex, int cellVertexIndex, std::span< const int >dimensionIndexes={})=0
setValue for given x cell index, y cell index, edge index, and node index.
virtual ~IRegularGrid2DComponentDataItem()=default
IRegularGrid2DComponentDataItem destructor.
virtual IDimension * yCellDimension() const =0
Number of Y cells IDimension.
virtual IRegularGrid2D * grid() const =0
IRegularGrid2D grid associated with this IRegularGrid2DComponentItem.
virtual void getValues(hydrocouple_variant *data, int xCellIndex, int yCellIndex, int cellEdgeIndex, int cellVertexIndex, std::span< const int >dimensionIndexes={}, int xCellIndexLength=1, int yCellIndexLength=1, int cellEdgeIndexLength=1, int cellVertexIndexLength=1, std::span< const int >dimensionLengths={}) const =0
getValues for given x cell index, y cell index, edge index, and node index and size for a hyperslab.
virtual IDimension * cellVertexDimension() const =0
cellVertexDimension. Vertex indices start from the bottom left and go in a counter clockwise order.
virtual void setValues(const hydrocouple_variant *data, int xCellIndex, int yCellIndex, int cellEdgeIndex, int cellVertexIndex, std::span< const int >dimensionIndexes={}, int xCellIndexLength=1, int yCellIndexLength=1, int cellEdgeIndexLength=1, int cellVertexIndexLength=1, std::span< const int >dimensionLengths={})=0
setValues for given x cell index, y cell index, edge index, and node index and size for a hyperslab.
virtual void getValue(hydrocouple_variant &data, int xCellIndex, int yCellIndex, int cellEdgeIndex, int cellVertexIndex, std::span< const int >dimensionIndexes={}) const =0
getValue for given x cell index, y cell index, edge index, and node index.
virtual MeshDataObjectType meshDataObjectType() const =0
Gets the type of mesh data object stored in the grid.
virtual IDimension * xCellDimension() const =0
Number of X cells IDimension.
IRegularGrid2D represents a two-dimensional structured grid of nodes and cells.
Definition hydrocouplespatial.h:1411
virtual ISpatialReferenceSystem * spatialReferenceSystem() const =0
The ISpatialReferenceSystem represents the spatial reference system of this geometric object.
virtual ~IRegularGrid2D()=default
IRegularGrid2D destructor.
virtual RegularGridType gridType() const =0
Gets the type of regular grid.
virtual double xNodeLocation(int xNodeIndex, int yNodeIndex) const =0
xNodeLocation provides the x location coordinate for the x-node and y-node indexes.
virtual int numYNodes() const =0
numYNodes represents the number of nodes in the y direction.
virtual bool isActive(int xCellIndex, int yCellIndex) const =0
isActive is a bool indicating whether a cell is active.
virtual double yNodeLocation(int xNodeIndex, int yNodeIndex) const =0
yNodeLocation provides the y location coordinate for the x-node and y-node indexes.
virtual int numXNodes() const =0
numXNodes represents the number of nodes in the x direction.
IRegularGrid3DComponentDataItem is an IComponentDataItem whose data is associated with an IRegularGri...
Definition hydrocouplespatial.h:2198
virtual IRegularGrid3D * grid() const =0
IRegularGrid3D grid associated with this IRegularGrid3DComponentItem.
virtual IDimension * zCellDimension() const =0
Number of Z cells IDimension.
virtual IDimension * cellFaceDimension() const =0
cellFaceDimension 0 = Top , 1 = Bottom, 2 = left , 3 = Right, Up = 4, Down = 5
virtual ~IRegularGrid3DComponentDataItem()=default
IRegularGrid3DComponentDataItem destructor.
virtual IDimension * yCellDimension() const =0
Number of Y cells IDimension.
virtual IDimension * xCellDimension() const =0
Number of X cells IDimension.
virtual MeshDataObjectType meshDataObjectType() const =0
Gets the type of mesh data object stored in the grid.
virtual void setValues(const hydrocouple_variant *data, int xCellIndex, int yCellIndex, int zCellIndex, int cellFaceIndex, int cellVertexIndex, std::span< const int >dimensionIndexes={}, int xCellIndexLength=1, int yCellIndexLength=1, int zCellIndexLength=1, int cellFaceIndexLength=1, int cellVertexIndexLength=1, std::span< const int >dimensionLengths={})=0
setValues for given x cell index, y cell index, z cell index, face index, and node index and size for...
virtual void setValue(const hydrocouple_variant &data, int xCellIndex, int yCellIndex, int zCellIndex, int cellFaceIndex, int cellVertexIndex, std::span< const int >dimensionIndexes={})=0
setValue for given x cell index, y cell index, z cell index, face index, and node index.
virtual IDimension * cellVertexDimension() const =0
cellVertexDimension Node indices start from the bottom left and go in a counter clockwise order.
virtual void getValue(hydrocouple_variant &data, int xCellIndex, int yCellIndex, int zCellIndex, int cellFaceIndex, int cellVertexIndex, std::span< const int >dimensionIndexes={}) const =0
getValue for given x cell index, y cell index, z cell index, face index, and node index.
virtual void getValues(hydrocouple_variant *data, int xCellIndex, int yCellIndex, int zCellIndex, int cellFaceIndex, int cellVertexIndex, std::span< const int >dimensionIndexes={}, int xCellIndexLength=1, int yCellIndexLength=1, int zCellIndexLength=1, int cellFaceIndexLength=1, int cellVertexIndexLength=1, std::span< const int >dimensionLengths={}) const =0
getValues for given x cell index, y cell index, z cell index, face index, and node index and size for...
IRegularGrid3D represents a three-dimensional structured grid of nodes and cells.
Definition hydrocouplespatial.h:1471
virtual double yNodeLocation(int xNodeIndex, int yNodeIndex) const =0
yNodeLocation provides the y location coordinate for the x-node and y-node indexes.
virtual ISpatialReferenceSystem * spatialReferenceSystem() const =0
The ISpatialReferenceSystem represents the spatial reference system of this grid.
virtual int numZNodes() const =0
numZNodes represents the number of nodes in the z direction.
virtual int numXNodes() const =0
numXNodes represents the number of nodes in the x direction.
virtual double zNodeLocation(int xNodeIndex, int yNodeIndex, int zNodeIndex) const =0
zNodeLocation provides the z location coordinate for the x-node, y-node, and z-node indexes.
virtual bool isActive(int xCellIndex, int yCellIndex, int zCellIndex) const =0
isActive is a bool indicating whether a cell is active.
virtual double xNodeLocation(int xNodeIndex, int yNodeIndex) const =0
xNodeLocation provides the x location coordinate for the x-node and y-node indexes.
virtual RegularGridType gridType() const =0
Gets the type of regular grid.
virtual ~IRegularGrid3D()=default
IRegularGrid3D destructor.
virtual int numYNodes() const =0
numYNodes represents the number of nodes in the y direction.
ISpatialReferenceSystem describes the coordinate reference system for spatial geometric objects.
Definition hydrocouplespatial.h:118
virtual ~ISpatialReferenceSystem()=default
ISpatialReferenceSystem destructor.
virtual int authSRID() const =0
Returns the Spatial Reference System ID (SRID) for a geometric object. This will normally be a foreig...
virtual const std::string & srText() const =0
virtual HydroCouple::IUnit::DistanceUnits distanceUnits() const =0
The measurement distance units for the Spatial Reference System.
virtual const std::string & authName() const =0
The Authority Specific Spatial Reference System Identifier.
A ISurface is a 2-dimensional IGeometry object.
Definition hydrocouplespatial.h:948
virtual double area() const =0
The area of this ISurface, as measured in the spatial reference system of this ISurface.
virtual IMultiCurve * boundaryMultiCurve() const =0
Gets the boundary of this surface as a multi-curve.
virtual IPoint * centroid() const =0
The mathematical centroid for this ISurface as a Point. The result is not guaranteed to be on this IS...
virtual IPoint * pointOnSurface() const =0
A Point guaranteed to be on this Surface.
virtual ~ISurface()=default
ISurface destructor.
ITINComponentDataItem is an IPolyhedralSurfaceComponentDataItem whose surface consists exclusively of...
Definition hydrocouplespatial.h:1904
virtual ~ITINComponentDataItem()=default
ITINComponentDataItem destructor.
An ITIN is a triangulated irregular network IPolyhedralSurface consisting only of ITriangle patches.
Definition hydrocouplespatial.h:1255
virtual ~ITIN()=default
ITIN destructor.
virtual ITriangle * triangle(int index) const =0
An ITriangle is a IPolygon with 3 distinct, non-collinear vertices and no interior boundary.
Definition hydrocouplespatial.h:1104
virtual IVertex * vertex3() const =0
The third vertex of this ITriangle.
virtual IVertex * vertex1() const =0
The first vertex of this ITriangle.
virtual IVertex * vertex(int index) const =0
The vertex of this ITriangle at the specified index.
virtual IVertex * vertex2() const =0
The second vertex of this ITriangle.
virtual ~ITriangle()=default
ITriangle destructor.
The IVertex class is an IPoint of a topologically aware IGeometry.
Definition hydrocouplespatial.h:614
virtual ~IVertex()=default
IVertex destructor.
virtual IEdge * edge() const =0
An arbitrary outgoing IEdge from this vertex.
virtual unsigned int index() const =0
unique index identifier
Core interface definitions for the HydroCouple component-based modeling framework.
SpatialDataType
SpatialDataType describes the type of spatial data (applicable to meshes, networks,...
Definition hydrocouplespatial.h:89
@ MultiScalar
Multiple scalar values.
RegularGridType
The types of regular grids.
Definition hydrocouplespatial.h:104
MeshDataObjectType
The MeshDataObjectType enum describes the part of the geometry of the mesh that data corresponds to.
Definition hydrocouplespatial.h:45
@ Cell
The data corresponds to mesh cell.
@ Face
The data corresponds to the faces of the mesh.
@ Vertex
The data corresponds to the vertex of mesh edge vertex.
@ Edge
The data corresponds to the edges of the mesh.
NetworkDataObjectType
The types of data available in a network.
Definition hydrocouplespatial.h:72
@ Node
The data corresponds to the nodes of the network.
HydroCouple namespace contains the core interface specifications for the HydroCouple component-based ...
Definition hydrocouple.h:61
std::variant< std::monostate, bool, char, int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, float, double, long double, std::string, std::any > hydrocouple_variant
hydrocouple_variant is a variant type that can be used to store the core value types values of differ...
Definition hydrocouple.h:104
A 2D point with x and y coordinates.
Definition hydrocouplespatialwkb.h:38
A 2D point with x, y, and an associated measure (m) value.
Definition hydrocouplespatialwkb.h:57
A 3D point with x, y, and z coordinates.
Definition hydrocouplespatialwkb.h:47
A 3D point with x, y, z coordinates and an associated measure (m) value.
Definition hydrocouplespatialwkb.h:67