From ea037cf996bdb9dd4ac56a0d5af25dea0f00d089 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 16 Feb 2025 15:08:33 -0500 Subject: [PATCH] feat(meshIO): added basic mesh reading implimentation also added basic unit sphere mesh file which can be rescaled --- src/meshIO/meson.build | 19 +++++++++++++++ src/meshIO/private/meshIO.cpp | 37 ++++++++++++++++++++++++++++++ src/meshIO/public/meshIO.h | 42 ++++++++++++++++++++++++++++++++++ src/meson.build | 3 ++- src/resources/mesh/sphere.msh | Bin 0 -> 34259 bytes src/resources/mesh/sphere.vtk | Bin 48318 -> 0 bytes 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/meshIO/meson.build create mode 100644 src/meshIO/private/meshIO.cpp create mode 100644 src/meshIO/public/meshIO.h create mode 100644 src/resources/mesh/sphere.msh delete mode 100644 src/resources/mesh/sphere.vtk diff --git a/src/meshIO/meson.build b/src/meshIO/meson.build new file mode 100644 index 0000000..1ea870a --- /dev/null +++ b/src/meshIO/meson.build @@ -0,0 +1,19 @@ +# Define the library +meshIO_sources = files( + 'private/meshIO.cpp', +) + +meshIO_headers = files( + 'public/meshIO.h' +) + +# Define the libmeshIO library so it can be linked against by other parts of the build system +libmeshIO = static_library('meshIO', + meshIO_sources, + include_directories: include_directories('public'), + cpp_args: ['-fvisibility=default'], + dependencies: [mfem_dep], + install : true) + +# Make headers accessible +install_headers(meshIO_headers, subdir : '4DSSE/meshIO') \ No newline at end of file diff --git a/src/meshIO/private/meshIO.cpp b/src/meshIO/private/meshIO.cpp new file mode 100644 index 0000000..8674af3 --- /dev/null +++ b/src/meshIO/private/meshIO.cpp @@ -0,0 +1,37 @@ +#include "mfem.hpp" +#include +#include +#include + +#include "meshIO.h" + + +MeshIO::MeshIO(const std::string &mesh_file) +{ + mesh_file_ = mesh_file; + std::ifstream mesh_stream(mesh_file); + if (!mesh_stream) + { + throw std::runtime_error("Mesh file not found: " + mesh_file); + loaded_ = false; + } + else + { + mesh_ = mfem::Mesh(mesh_stream, 1, 2); + loaded_ = true; + } +} + +MeshIO::~MeshIO() +{ +} + +bool MeshIO::IsLoaded() const +{ + return loaded_; +} + +mfem::Mesh& MeshIO::GetMesh() +{ + return mesh_; +} \ No newline at end of file diff --git a/src/meshIO/public/meshIO.h b/src/meshIO/public/meshIO.h new file mode 100644 index 0000000..5975801 --- /dev/null +++ b/src/meshIO/public/meshIO.h @@ -0,0 +1,42 @@ +#ifndef MESHIO_H +#define MESHIO_H + +#include "mfem.hpp" +#include + +/** + * @brief Class for handling mesh input/output operations. + */ +class MeshIO +{ +private: + bool loaded_; ///< Flag to indicate if the mesh is loaded + std::string mesh_file_; ///< Filename of the mesh file + mfem::Mesh mesh_; ///< The mesh object + +public: + /** + * @brief Constructor that initializes the MeshIO object with a mesh file. + * @param mesh_file The name of the mesh file. + */ + MeshIO(const std::string &mesh_file); + + /** + * @brief Destructor for the MeshIO class. + */ + ~MeshIO(); + + /** + * @brief Get the mesh object. + * @return Reference to the mesh object. + */ + mfem::Mesh& GetMesh(); + + /** + * @brief Check if the mesh is loaded. + * @return True if the mesh is loaded, false otherwise. + */ + bool IsLoaded() const; +}; + +#endif // MESHIO_H \ No newline at end of file diff --git a/src/meson.build b/src/meson.build index db87771..9ae232d 100644 --- a/src/meson.build +++ b/src/meson.build @@ -4,4 +4,5 @@ subdir('resources') # Build the main source code subdir('dobj') subdir('const') -subdir('opatIO') \ No newline at end of file +subdir('opatIO') +subdir('meshIO') \ No newline at end of file diff --git a/src/resources/mesh/sphere.msh b/src/resources/mesh/sphere.msh new file mode 100644 index 0000000000000000000000000000000000000000..416c655ee2b9cd106d956e1d466e6f27ab12367b GIT binary patch literal 34259 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 L2e1GBue<&aH!g3X literal 0 HcmV?d00001 diff --git a/src/resources/mesh/sphere.vtk b/src/resources/mesh/sphere.vtk deleted file mode 100644 index 904ec6a37b8c1fba7f68d381fda422ba0582f424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48318 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 KhyU`Q`~L#|j6#b5