23#ifndef VCL_IO_MESH_PLY_SAVE_H
24#define VCL_IO_MESH_PLY_SAVE_H
26#include "detail/edge.h"
27#include "detail/extra.h"
28#include "detail/face.h"
29#include "detail/vertex.h"
31#include <vclib/io/mesh/settings.h>
35template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
39 const std::string& fileBasePath,
40 const SaveSettings& settings = SaveSettings(),
43 using namespace detail;
50 if (!settings.info.isEmpty())
51 meshInfo = settings.info.intersect(meshInfo);
54 settings.binary ? ply::BINARY_LITTLE_ENDIAN : ply::ASCII, meshInfo);
55 header.setNumberVertices(m.vertexNumber());
57 if constexpr (HasFaces<MeshType>) {
58 if (header.hasFaces()) {
59 header.setNumberFaces(m.faceNumber());
62 if constexpr (HasEdges<MeshType>) {
63 if (header.hasEdges()) {
64 header.setNumberEdges(m.edgeNumber());
67 writePlyTextures(header, m, fileBasePath, log, settings);
70 if (!header.isValid())
71 throw std::runtime_error(
"Ply Header not valid.");
73 fp << header.toString();
75 writePlyVertices(fp, header, m);
77 if constexpr (HasFaces<MeshType>) {
78 if (header.hasFaces()) {
79 writePlyFaces(fp, header, m);
83 if constexpr (HasEdges<MeshType>) {
84 if (header.hasEdges()) {
85 writePlyEdges(fp, header, m);
90template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
93 const std::string& filename,
94 const SaveSettings& settings = SaveSettings(),
97 std::ofstream fp = openOutputFileStream(filename,
"ply");
101 savePly(m, fp, basePath, settings, log);
static std::string pathWithoutFileName(const std::string &fullpath)
Get the path of a file.
Definition file_info.h:200
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