Major improvements
+ A new efficient mesh deletion algorithm has been introduced, allowing for the deletion of a mesh based on a polygon with two options:
+ Delete faces inside the polygon that are not intersected by the polygon segments.
+ Delete faces inside the polygon that are intersected by the polygon segments.
+ Minimum edge size in meters is now taken into account when refining a mesh based on a polygon or samples, both in spherical and Cartesian coordinates.
+ Mesh refinement based on the Courant criteria now considers the max_courant_time.
+ Improved the generation of rotated curvilinear grids within a polygon.
+ Performance has been enhanced by utilizing 32-bit integers for unsigned indexes.
+ The refinement of a polygon perimeter has been improved.
+ The polygon class has been refactored.
+ The generation of curvilinear grids has been improved by introducing Eigen.
+ Input and parameter range checks are now in place. When invalid values are specified, exceptions are thrown and errors are registered.
API changes
+ Improve performance of search algorithms `mkernel_mesh2d_get_edge` and `mkernel_mesh2d_get_node_index` by introducing a bounding box defining the search area.
+ Small, non-contiguous regions of an unstructured mesh can be removed using the `mkernel_mesh2d_remove_disconnected_regions` function.
+ Quadrangular unstructured meshes can now be connected using the `mkernel_mesh2d_connect_meshes` API function.
+ Snapping a polygon to a land boundary is now possible with the `mkernel_polygon_snap_to_landboundary` function.
+ Snapping a spline to a land boundary is now available through the `mkernel_splines_snap_to_landboundary` function.
+ `mkernel_curvilinear_make_uniform` is now divided in 3 apis for separating responsibilities
+ `mkernel_curvilinear_make_rectangular_mesh`: for making a curvilinear mesh based on origin, rows and columns
+ `mkernel_curvilinear_make_rectangular_mesh_from_polygon`: for making an curvilinear mesh inside a polygon with defined block sizes
+ `mkernel_curvilinear_make_rectangular_mesh_on_extension`: for making an curvilinear mesh on a defined area using defined block sizes
+ `mkernel_mesh2d_make_uniform` is now divided in 3 apis for separating responsibilities
+ `mkernel_mesh2d_make_rectangular_mesh`: for making an unstructured mesh based on origin, rows and columns
+ `mkernel_mesh2d_make_rectangular_mesh_from_polygon`: for making an unstructured mesh inside a polygon with defined block sizes
+ `mkernel_mesh2d_make_rectangular_mesh_on_extension`: for making an unstructured mesh on a defined area using defined block sizes
+ Triangular mesh generation functions have been renamed as follows:
+ `mkernel_mesh2d_make_mesh_from_polygon` -> `mkernel_mesh2d_make_triangular_mesh_from_polygon`
+ `mkernel_mesh2d_make_mesh_from_samples` -> `mkernel_mesh2d_make_triangular_mesh_from_samples`
+ The `mkernel_mesh2d_delete` function now supports only two options: InsideNotIntersected = 0 and InsideAndIntersected = 1. This algorithm supersedes the previous mesh deletion algorithms.
+ edge_faces and face_edge have been added to the meshkernelapi::Mesh2D structure to allow the reconstruction of the faces
Bug fixes
+ Account for boundary edges in `mkernel_mesh2d_get_orthogonality`, `mkernel_mesh2d_get_smoothness`
+ The translation of large polygons in spherical coordinate generates erroneous results when used to inquire if a point is in polygon