Meshes.jl provides efficient implementations of concepts from computational geometry and finite element analysis. It promotes rigorous mathematical definitions of spatial discretizations (a.k.a. meshes) that are adequate for describing general manifolds embedded in Rⁿ, including surfaces described with spherical coordinates, and geometries described with multiple coordinate reference systems. Our ambitious goal is to provide all the features of the CGAL project in pure Julia.
Unlike other existing efforts in the Julia ecosystem, this project is being carefully designed to facilitate the use of meshes across different scientific domains. We follow a strict set of good software engineering practices, and are quite pedantic in our test suite to make sure that all our implementations are free of bugs in both single and double floating point precision. Additionally, we guarantee type stability.
The design of this project was motivated by various issues encountered with past attempts to represent geometry, which have been originally designed for visualization purposes (e.g. GeometryTypes.jl, GeometryBasics.jl) or specifically for finite element analysis (e.g. JuAFEM.jl, MeshCore.jl). We hope to provide a smoother experience with mesh representations that are adequate for finite finite element analysis, advanced geospatial modeling and visualization, not just one domain.
Documentation
The project is being actively developed, and we didn’t have time to document it properly yet. The documentation in the master branch illustrates some of the current functionality: https://juliageometry.github.io/Meshes.jl/dev
Roadmap
I am finishing a pure Julia implementation of the FIST algorithm for triangulation of polygonal areas with holes, which are quite common in GIS applications. This is the same algorithm behind the widely used Mapbox’s earcut.hpp library. After this is done, I will start implementing other tesselation and meshing algorithms of 2D manifolds embedded in 3D. Please open an issue if you would like to see a specific algorithm implemented.
We support basic plotting features via Plots.jl recipes, but the plan is to migrate these recipes to Makie.jl when its recipe system becomes available. Help is appreciated, especially if you are familiar with the AbstractPlotting.jl internals. In the long-run, it would be ideal to see more synergy between the Makie.jl stack and Meshes.jl (cc: @sdanisch @jkrumbiegel).
Acknowledgements
I would like to thank all contributors of GeometryBasics.jl for some of the key ideas. Your names are in the copyright notice:
https://juliageometry.github.io/Meshes.jl/dev/about/license.html
Thanks to @serenity4 for very interesting design discussions, proposals and PRs, and for other folks who are also interested in this effort (cc: @ElOceanografo @goretkin @briochemc).
Thanks to @cormullion for helping with another awesome project logo made with Luxor.jl