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/material.h"
30#include "detail/vertex.h"
32#include <vclib/io/mesh/settings.h>
36template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
40 const std::string& fileBasePath,
41 const SaveSettings& settings = SaveSettings(),
44 using namespace detail;
51 if (!settings.info.isEmpty())
52 meshInfo = settings.info.intersect(meshInfo);
55 settings.binary ? ply::BINARY_LITTLE_ENDIAN : ply::ASCII, meshInfo);
56 header.setVertexCount(m.vertexCount());
58 if constexpr (HasFaces<MeshType>) {
59 if (header.hasFaces()) {
60 header.setFaceCount(m.faceCount());
63 if constexpr (HasEdges<MeshType>) {
64 if (header.hasEdges()) {
65 header.setEdgeCount(m.edgeCount());
68 if constexpr (HasMaterials<MeshType>) {
69 if (header.hasMaterials()) {
70 header.setMaterialCount(m.materialCount());
78 if (settings.meshlabCompatibility) {
79 addTexturesToHeader(header, m);
83 if (!header.isValid())
84 throw std::runtime_error(
"Ply Header not valid.");
86 fp << header.toString(settings);
88 writePlyVertices(fp, header, m);
90 if constexpr (HasFaces<MeshType>) {
91 if (header.hasFaces()) {
92 writePlyFaces(fp, header, m);
96 if constexpr (HasEdges<MeshType>) {
97 if (header.hasEdges()) {
98 writePlyEdges(fp, header, m);
102 if constexpr (HasMaterials<MeshType>) {
103 if (header.hasMaterials()) {
104 writePlyMaterials(fp, header, m);
106 if (settings.saveTextureImages) {
107 saveTextureImages(m, fileBasePath,
BitSet8::ALL(), log);
112template<MeshConcept MeshType, LoggerConcept LogType = NullLogger>
115 const std::string& filename,
116 const SaveSettings& settings = SaveSettings(),
119 std::ofstream fp = openOutputFileStream(filename,
"ply");
123 savePly(m, fp, basePath, settings, log);
static constexpr BitSet< T > ALL()
Returns a BitSet with all the bits set to true.
Definition bit_set.h:366
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