ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
MergeMesh.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include "CloudViewer.h"
9 
10 void PrintHelp() {
11  using namespace cloudViewer;
12  // clang-format off
13  utility::LogInfo("Usage:");
14  utility::LogInfo(" > MergeMesh source_directory target_file [option]");
15  utility::LogInfo(" Merge mesh files under <source_directory>.");
16  utility::LogInfo("");
17  utility::LogInfo("Options (listed in the order of execution priority):");
18  utility::LogInfo(" --help, -h : Print help information.");
19  utility::LogInfo(" --verbose n : Set verbose level (0-4).");
20  utility::LogInfo(" --purge : Clear duplicated and unreferenced vertices and");
21  utility::LogInfo(" triangles.");
22  // clang-format on
23 }
24 
25 int main(int argc, char** argv) {
26  using namespace cloudViewer;
27  using namespace cloudViewer::utility::filesystem;
28 
30  if (argc <= 2 || utility::ProgramOptionExists(argc, argv, "--help")) {
31  PrintHelp();
32  return 0;
33  }
34  int verbose = utility::GetProgramOptionAsInt(argc, argv, "--verbose", 2);
36 
37  std::string directory(argv[1]);
38  std::vector<std::string> filenames;
39  ListFilesInDirectory(directory, filenames);
40 
41  ccPointCloud* merged_baseVertex = new ccPointCloud("vertices");
42  assert(merged_baseVertex);
43  merged_baseVertex->setEnabled(false);
44  merged_baseVertex->setLocked(false);
45  auto merged_mesh_ptr = std::make_shared<ccMesh>(merged_baseVertex);
46  merged_mesh_ptr->addChild(merged_baseVertex);
47  for (const auto& filename : filenames) {
48  ccPointCloud* baseVertices = new ccPointCloud("vertices");
49  assert(baseVertices);
50  baseVertices->setEnabled(false);
51  // DGM: no need to lock it as it is only used by one mesh!
52  baseVertices->setLocked(false);
53  auto mesh_ptr = std::make_shared<ccMesh>(baseVertices);
54  mesh_ptr->addChild(baseVertices);
56  // do some cleaning
57  {
58  baseVertices->shrinkToFit();
61  if (normals) {
62  normals->shrink_to_fit();
63  }
64  }
65 
66  *merged_mesh_ptr += *mesh_ptr;
67  }
68  }
69 
70  if (utility::ProgramOptionExists(argc, argv, "--purge")) {
71  merged_mesh_ptr->shrinkToFit();
72  }
73  cloudViewer::io::WriteTriangleMesh(argv[2], *merged_mesh_ptr);
74 
75  return 1;
76 }
std::string filename
int main(int argc, char **argv)
Definition: MergeMesh.cpp:25
void PrintHelp()
Definition: MergeMesh.cpp:10
Array of compressed 3D normals (single index)
virtual bool addChild(ccHObject *child, int dependencyFlags=DP_PARENT_OF_OTHER, int insertIndex=-1)
Adds a child.
NormsIndexesTableType * getTriNormsTable() const override
Returns per-triangle normals shared array.
Definition: ecvMesh.h:344
void shrinkToFit()
Removes unused capacity.
Definition: ecvMesh.h:302
virtual void setLocked(bool state)
Sets the "enabled" property.
Definition: ecvObject.h:117
virtual void setEnabled(bool state)
Sets the "enabled" property.
Definition: ecvObject.h:102
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
void shrinkToFit()
Removes unused capacity.
ccMesh * mesh_ptr
double normals[3]
#define LogInfo(...)
Definition: Logging.h:81
bool WriteTriangleMesh(const std::string &filename, const ccMesh &mesh, bool write_ascii, bool compressed, bool write_vertex_normals, bool write_vertex_colors, bool write_triangle_uvs, bool print_progress)
bool ReadTriangleMesh(const std::string &filename, ccMesh &mesh, ReadTriangleMeshOptions params)
bool ListFilesInDirectory(const std::string &directory, std::vector< std::string > &filenames)
Definition: FileSystem.cpp:561
int GetProgramOptionAsInt(int argc, char **argv, const std::string &option, const int default_value=0)
Definition: Console.cpp:31
void SetVerbosityLevel(VerbosityLevel level)
Definition: Logging.cpp:89
bool ProgramOptionExists(int argc, char **argv, const std::string &option)
Definition: Console.cpp:100
Generic file read and write utility for python interface.