using System; using System.Runtime.InteropServices; namespace Deltares.MStab.IO.Classic { public static class ClassicGeometryFunctionDefinitions { public static bool ClassicGetGeoPoint(int handle, int aIndex, ref GeometryPoint aResult) { return GetExternalGeometryPoint(handle, aIndex, ref aResult); } public static bool ClassicGetGeoCurves(int handle, int aIndex, ref GeometryCurve aResult) { return GetExternalGeometryCurve(handle, aIndex, ref aResult); } public static bool ClassicGetGeoBoundaries(int handle, ref GeometryBoundaries aResult) { return GetExternalGeometryBoundaries(handle, ref aResult); } public static bool ClassicGetGeoPiezoLines(int handle, ref GeometryPiezoLines aResult) { return GetExternalGeometryPiezoLines(handle, ref aResult); } public static bool ClassicGetGeoLayers(int handle, ref GeometryLayers aResult) { return GetExternalGeometryLayers(handle, ref aResult); } public static bool ClassicGetGeoConstants(int handle, ref GeometryParam aResult) { return GetExternalGeometryConstants(handle, ref aResult); } //GEOMETRY SPECIFIC DLL FUNCTIONS [DllImport(GeometryConstants.dgsSerializer)] private static extern bool GetExternalGeometryPoint(int aHandle, int aIndex, ref GeometryPoint aResult); [DllImport(GeometryConstants.dgsSerializer)] private static extern bool GetExternalGeometryCurve(int aHandle, int aIndex, ref GeometryCurve aResult); [DllImport(GeometryConstants.dgsSerializer)] private static extern bool GetExternalGeometryBoundaries(int aHandle, ref GeometryBoundaries aResult); [DllImport(GeometryConstants.dgsSerializer)] private static extern bool GetExternalGeometryPiezoLines(int aHandle, ref GeometryPiezoLines aResult); [DllImport(GeometryConstants.dgsSerializer)] private static extern bool GetExternalGeometryLayers(int aHandle, ref GeometryLayers aResult); [DllImport(GeometryConstants.dgsSerializer)] private static extern bool GetExternalGeometryConstants(int aHandle, ref GeometryParam aResult); #region Nested type: GeoBoundary [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public struct GeoBoundary { public bool useProbabilisticDefaultBoundaries; public int distributionBoundaries; public double sTDVBoundaries; public int numberOfCurvesOnBoundary; [MarshalAs(UnmanagedType.ByValArray, SizeConst = GeometryConstants.maxCurvesPerBoundary)] public int[] curvesIndices; }; #endregion #region Nested type: GeoLayer [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public struct GeoLayer { public int layerNumber; public string materialOfLayer; public int p1AtTop; public int p1AtBottom; public int boundaryTopLayer; public int boundaryBottomLayer; }; #endregion #region Nested type: GeometryBoundaries [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public class GeometryBoundaries { private int dummy; //Reserved. The structure size of a class in delphi differs from c# public int numberOfBoundaries; [MarshalAs(UnmanagedType.ByValArray, SizeConst = GeometryConstants.maxBoundaries)] public GeoBoundary[] boundaries; }; #endregion #region Nested type: GeometryConstants public static class GeometryConstants { public const String dgsSerializer = "DGSMStabSerializer.dll"; public const int maxBoundaries = 500; public const int maxCurves = 15000; public const int maxCurvesPerBoundary = 1000; public const int maxLayers = 500; public const int maxPlLineBoundaries = 90; public const int maxPoints = 15000; public const int maxPointsPerCurve = 2; } #endregion #region Nested type: GeometryCurve [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public struct GeometryCurve { [MarshalAs(UnmanagedType.ByValArray, SizeConst = GeometryConstants.maxPointsPerCurve)] public int[] pointIndices; }; #endregion #region Nested type: GeometryLayers [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public class GeometryLayers { private int dummy; //Reserved. The structure size of a class in delphi differs from c# public int numberOfLayers; [MarshalAs(UnmanagedType.ByValArray, SizeConst = GeometryConstants.maxLayers)] public GeoLayer[] layers; }; #endregion #region Nested type: GeometryParam [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public class GeometryParam { private int dummy; //Reserved. The structure size of a class in delphi differs from c# public int phreaticLine; public GeoWorldCoordinate worldCoordinates; }; #endregion #region Nested type: GeometryPiezoLines [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public class GeometryPiezoLines { private int dummy; //Reserved. The structure size of a class in delphi differs from c# public int numberOfLines; [MarshalAs(UnmanagedType.ByValArray, SizeConst = GeometryConstants.maxPlLineBoundaries)] public GeoPiezoLine[] piezoLine; }; #endregion #region Nested type: GeometryPoint [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public struct GeometryPoint { //private int dummy; //Reserved. The structure size of a class in delphi differs from c# public double x; public double y; public double z; public int pointType; }; #endregion #region Nested type: GeoPiezoLine [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public struct GeoPiezoLine { public int pLLineNumber; [MarshalAs(UnmanagedType.ByValArray, SizeConst = GeometryConstants.maxCurves)] public int[] curveIndices; }; #endregion #region Nested type: GeoWorldCoordinate [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public struct GeoWorldCoordinate { public double xW1; public double yW1; public double xW2; public double yW2; }; #endregion #region Nested type: WorldCoordinates [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 8)] public struct WorldCoordinates { public double xW1; public double yW1; public double xW2; public double yW2; }; #endregion } }