Visual Computing Library  devel
Loading...
Searching...
No Matches
load_meshes.h
1/*****************************************************************************
2 * VCLib *
3 * Visual Computing Library *
4 * *
5 * Copyright(C) 2021-2025 *
6 * Visual Computing Lab *
7 * ISTI - Italian National Research Council *
8 * *
9 * All rights reserved. *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the Mozilla Public License Version 2.0 as published *
13 * by the Mozilla Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * Mozilla Public License Version 2.0 *
20 * (https://www.mozilla.org/en-US/MPL/2.0/) for more details. *
21 ****************************************************************************/
22
23#ifndef VCL_IO_MESH_LOAD_MESHES_H
24#define VCL_IO_MESH_LOAD_MESHES_H
25
26#ifdef VCLIB_WITH_TINYGLTF
27#include "gltf/load.h"
28#endif
29
30#include "capability.h"
31
32namespace vcl {
33
45inline std::set<FileFormat> loadMeshesFileFormats()
46{
47 std::set<FileFormat> ff;
48
49#ifdef VCLIB_WITH_TINYGLTF
50 ff.insert(gltfFileFormat());
51#endif
52
53 return ff;
54}
55
78template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
80 std::vector<MeshType>& meshes,
81 const std::string& filename,
82 std::vector<MeshInfo>& loadedInfo,
83 const LoadSettings& settings,
84 LogType& log = nullLogger)
85{
87
88 loadedInfo.clear();
89
90#ifdef VCLIB_WITH_TINYGLTF
91 if (ff == gltfFileFormat()) {
92 loadGltf(meshes, filename, loadedInfo, settings, log);
93 }
94 else {
95 throw UnknownFileFormatException(ff.extensions().front());
96 }
97#endif
98}
99
122template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
124 std::vector<MeshType>& meshes,
125 const std::string& filename,
126 std::vector<MeshInfo>& loadedInfo,
127 LogType& log = nullLogger,
128 const LoadSettings& settings = LoadSettings())
129{
130 loadMeshes(meshes, filename, loadedInfo, settings, log);
131}
132
153template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
155 std::vector<MeshType>& meshes,
156 const std::string& filename,
157 const LoadSettings& settings,
158 LogType& log = nullLogger)
159{
160 std::vector<MeshInfo> loadedInfo;
161 loadMeshes(meshes, filename, loadedInfo, settings, log);
162}
163
184template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
186 std::vector<MeshType>& meshes,
187 const std::string& filename,
188 LogType& log = nullLogger,
189 const LoadSettings& settings = LoadSettings())
190{
191 std::vector<MeshInfo> loadedInfo;
192 loadMeshes(meshes, filename, loadedInfo, settings, log);
193}
194
216template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
217std::vector<MeshType> loadMeshes(
218 const std::string& filename,
219 std::vector<MeshInfo>& loadedInfo,
220 const LoadSettings& settings,
221 LogType& log = nullLogger)
222{
223 std::vector<MeshType> v;
224 loadMeshes(v, filename, loadedInfo, settings, log);
225 return v;
226}
227
249template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
250std::vector<MeshType> loadMeshes(
251 const std::string& filename,
252 std::vector<MeshInfo>& loadedInfo,
253 LogType& log = nullLogger,
254 const LoadSettings& settings = LoadSettings())
255{
256 std::vector<MeshType> v;
257 loadMeshes(v, filename, loadedInfo, settings, log);
258 return v;
259}
260
280template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
281std::vector<MeshType> loadMeshes(
282 const std::string& filename,
283 const LoadSettings& settings,
284 LogType& log = nullLogger)
285{
286 std::vector<MeshType> v;
287 std::vector<MeshInfo> loadedInfo;
288 loadMeshes(v, filename, loadedInfo, settings, log);
289 return v;
290}
291
311template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
312std::vector<MeshType> loadMeshes(
313 const std::string& filename,
314 LogType& log = nullLogger,
315 const LoadSettings& settings = LoadSettings())
316{
317 std::vector<MeshType> v;
318 std::vector<MeshInfo> loadedInfo;
319 loadMeshes(v, filename, loadedInfo, settings, log);
320 return v;
321}
322
323} // namespace vcl
324
325#endif // VCL_IO_MESH_LOAD_MESHES_H
A class representing a box in N-dimensional space.
Definition box.h:46
The FileFormat class represents a file format.
Definition file_format.h:40
static FileFormat fileFormat(const std::string &filename)
Get the file format of a file from its filename.
Definition file_info.h:280
Exception thrown when the file format is unknown.
Definition exceptions.h:37
NullLogger nullLogger
The nullLogger object is an object of type NullLogger that is used as default argument in the functio...
Definition null_logger.h:123
std::set< FileFormat > loadMeshesFileFormats()
Returns the set of mesh formats supported for loading multiple Meshes from file.
Definition load_meshes.h:45
void loadMeshes(std::vector< MeshType > &meshes, const std::string &filename, std::vector< MeshInfo > &loadedInfo, const LoadSettings &settings, LogType &log=nullLogger)
Loads a list of meshes from a file with the given filename and stores it in the given vector....
Definition load_meshes.h:79
The LoadSettings structure contains the settings that can be used to load a mesh from a stream/file.
Definition settings.h:35