ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ImageWarpingFieldIO.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 
9 
10 #include <FileSystem.h>
11 #include <IJsonConvertibleIO.h>
12 #include <Logging.h>
13 
14 #include <unordered_map>
15 
16 namespace cloudViewer {
17 
18 namespace {
19 using namespace io;
20 
21 bool ReadImageWarpingFieldFromJSON(
22  const std::string &filename,
23  pipelines::color_map::ImageWarpingField &warping_field) {
24  return ReadIJsonConvertible(filename, warping_field);
25 }
26 
27 bool WriteImageWarpingFieldToJSON(
28  const std::string &filename,
29  const pipelines::color_map::ImageWarpingField &warping_field) {
30  return WriteIJsonConvertibleToJSON(filename, warping_field);
31 }
32 
33 static const std::unordered_map<
34  std::string,
35  std::function<bool(const std::string &,
36  pipelines::color_map::ImageWarpingField &)>>
37  file_extension_to_warping_field_read_function{
38  {"json", ReadImageWarpingFieldFromJSON},
39  };
40 
41 static const std::unordered_map<
42  std::string,
43  std::function<bool(const std::string &,
44  const pipelines::color_map::ImageWarpingField &)>>
45  file_extension_to_warping_field_write_function{
46  {"json", WriteImageWarpingFieldToJSON},
47  };
48 
49 } // unnamed namespace
50 
51 namespace io {
52 using namespace cloudViewer;
53 
54 std::shared_ptr<pipelines::color_map::ImageWarpingField>
56  auto warping_field =
57  std::make_shared<pipelines::color_map::ImageWarpingField>();
58  ReadImageWarpingField(filename, *warping_field);
59  return warping_field;
60 }
61 
63  const std::string &filename,
65  std::string filename_ext =
67  if (filename_ext.empty()) {
69  "Read pipelines::color_map::ImageWarpingField failed: unknown "
70  "file "
71  "extension.");
72  return false;
73  }
74  auto map_itr =
75  file_extension_to_warping_field_read_function.find(filename_ext);
76  if (map_itr == file_extension_to_warping_field_read_function.end()) {
78  "Read pipelines::color_map::ImageWarpingField failed: unknown "
79  "file "
80  "extension.");
81  return false;
82  }
83  return map_itr->second(filename, warping_field);
84 }
85 
87  const std::string &filename,
88  const pipelines::color_map::ImageWarpingField &trajectory) {
89  std::string filename_ext =
91  if (filename_ext.empty()) {
93  "Write pipelines::color_map::ImageWarpingField failed: unknown "
94  "file "
95  "extension.");
96  return false;
97  }
98  auto map_itr =
99  file_extension_to_warping_field_write_function.find(filename_ext);
100  if (map_itr == file_extension_to_warping_field_write_function.end()) {
102  "Write pipelines::color_map::ImageWarpingField failed: unknown "
103  "file "
104  "extension.");
105  return false;
106  }
107  return map_itr->second(filename, trajectory);
108 }
109 
110 } // namespace io
111 } // namespace cloudViewer
std::string filename
#define LogWarning(...)
Definition: Logging.h:72
bool WriteImageWarpingField(const std::string &filename, const pipelines::color_map::ImageWarpingField &trajectory)
std::shared_ptr< pipelines::color_map::ImageWarpingField > CreateImageWarpingFieldFromFile(const std::string &filename)
bool WriteIJsonConvertibleToJSON(const std::string &filename, const cloudViewer::utility::IJsonConvertible &object)
bool ReadIJsonConvertible(const std::string &filename, cloudViewer::utility::IJsonConvertible &object)
bool ReadImageWarpingField(const std::string &filename, pipelines::color_map::ImageWarpingField &warping_field)
std::string GetFileExtensionInLowerCase(const std::string &filename)
Definition: FileSystem.cpp:281
Generic file read and write utility for python interface.