14#include <lagrange/io/load_mesh.h>
16#include <lagrange/Mesh.h>
17#include <lagrange/MeshTrait.h>
18#include <lagrange/combine_mesh_list.h>
19#include <lagrange/create_mesh.h>
20#include <lagrange/fs/file_utils.h>
21#include <lagrange/io/legacy/load_mesh_ext.h>
22#include <lagrange/io/legacy/load_mesh_ply.h>
23#include <lagrange/legacy/inline.h>
26#include <lagrange/utils/warnoff.h>
27#include <igl/read_triangle_mesh.h>
28#include <lagrange/utils/warnon.h>
31#include <tiny_obj_loader.h>
37template <
typename MeshType>
38std::unique_ptr<MeshType> load_mesh_basic(
const fs::path& filename)
40 static_assert(MeshTrait<MeshType>::is_mesh(),
"Input type is not Mesh");
41 typename MeshType::VertexArray vertices;
42 typename MeshType::FacetArray facets;
44 igl::read_triangle_mesh(filename.string(), vertices, facets);
48extern template std::unique_ptr<lagrange::TriangleMesh3D> load_mesh_basic(
const fs::path&);
49extern template std::unique_ptr<lagrange::TriangleMesh3Df> load_mesh_basic(
const fs::path&);
51template <
typename MeshType>
52std::vector<std::unique_ptr<MeshType>> load_obj_meshes(
const fs::path& filename)
54 static_assert(MeshTrait<MeshType>::is_mesh(),
"Input type is not Mesh");
56 if (!std::is_same<tinyobj::real_t, double>::value) {
57 logger().warn(
"Tinyobjloader compiled to use float, loss of precision may occur.");
60 return load_mesh_ext<MeshType>(filename).meshes;
62extern template std::vector<std::unique_ptr<lagrange::TriangleMesh3D>> load_obj_meshes(
64extern template std::vector<std::unique_ptr<lagrange::TriangleMesh3Df>> load_obj_meshes(
67template <
typename MeshType>
68std::unique_ptr<MeshType> load_obj_mesh(
const fs::path& filename)
70 static_assert(MeshTrait<MeshType>::is_mesh(),
"Input type is not Mesh");
72 auto res = load_obj_meshes<MeshType>(filename);
75 }
else if (res.size() == 1) {
76 return std::move(res[0]);
78 logger().debug(
"Combining {} meshes into one.", res.size());
79 return combine_mesh_list(res,
true);
82extern template std::unique_ptr<lagrange::TriangleMesh3D> load_obj_mesh(
const fs::path&);
83extern template std::unique_ptr<lagrange::TriangleMesh3Df> load_obj_mesh(
const fs::path&);
87 std::enable_if_t<lagrange::MeshTraitHelper::is_mesh<MeshType>::value>* >
88std::unique_ptr<MeshType> load_mesh(
const fs::path& filename)
90 static_assert(MeshTrait<MeshType>::is_mesh(),
"Input type is not Mesh");
92 if (filename.extension() ==
".obj") {
93 return load_obj_mesh<MeshType>(filename);
94 }
else if (filename.extension() ==
".ply") {
95 return load_mesh_ply<MeshType>(filename);
97 return load_mesh_basic<MeshType>(filename);
100extern template std::unique_ptr<lagrange::TriangleMesh3D> load_mesh(
const fs::path&);
101extern template std::unique_ptr<lagrange::TriangleMesh3Df> load_mesh(
const fs::path&);
LA_CORE_API spdlog::logger & logger()
Retrieves the current logger.
Definition Logger.cpp:40
Mesh input/output.
Definition detect_file_format.h:18
auto create_mesh(const Eigen::MatrixBase< DerivedV > &vertices, const Eigen::MatrixBase< DerivedF > &facets)
This function create a new mesh given the vertex and facet arrays by copying data into the Mesh objec...
Definition create_mesh.h:39