ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ViewParameters.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 <Logging.h>
11 #include <json/json.h>
12 
13 #include <Eigen/Dense>
14 
15 namespace cloudViewer {
16 namespace visualization {
17 using namespace cloudViewer;
18 
21  v(0) = field_of_view_;
22  v(1) = zoom_;
23  v.block<3, 1>(2, 0) = lookat_;
24  v.block<3, 1>(5, 0) = up_;
25  v.block<3, 1>(8, 0) = front_;
26  v.block<3, 1>(11, 0) = boundingbox_min_;
27  v.block<3, 1>(14, 0) = boundingbox_max_;
28  return v;
29 }
30 
32  field_of_view_ = v(0);
33  zoom_ = v(1);
34  lookat_ = v.block<3, 1>(2, 0);
35  up_ = v.block<3, 1>(5, 0);
36  front_ = v.block<3, 1>(8, 0);
37  boundingbox_min_ = v.block<3, 1>(11, 0);
38  boundingbox_max_ = v.block<3, 1>(14, 0);
39 }
40 
41 bool ViewParameters::ConvertToJsonValue(Json::Value &value) const {
42  value["field_of_view"] = field_of_view_;
43  value["zoom"] = zoom_;
44  if (!EigenVector3dToJsonArray(lookat_, value["lookat"])) {
45  return false;
46  }
47  if (!EigenVector3dToJsonArray(up_, value["up"])) {
48  return false;
49  }
50  if (!EigenVector3dToJsonArray(front_, value["front"])) {
51  return false;
52  }
53  if (!EigenVector3dToJsonArray(boundingbox_min_, value["boundingbox_min"])) {
54  return false;
55  }
56  if (!EigenVector3dToJsonArray(boundingbox_max_, value["boundingbox_max"])) {
57  return false;
58  }
59  return true;
60 }
61 
62 bool ViewParameters::ConvertFromJsonValue(const Json::Value &value) {
63  if (!value.isObject()) {
65  "ViewParameters read JSON failed: unsupported json format.");
66  return false;
67  }
68  field_of_view_ = value.get("field_of_view", 60.0).asDouble();
69  zoom_ = value.get("zoom", 0.7).asDouble();
70  if (!EigenVector3dFromJsonArray(lookat_, value["lookat"])) {
71  utility::LogWarning("ViewParameters read JSON failed: wrong format.");
72  return false;
73  }
74  if (!EigenVector3dFromJsonArray(up_, value["up"])) {
75  utility::LogWarning("ViewParameters read JSON failed: wrong format.");
76  return false;
77  }
78  if (!EigenVector3dFromJsonArray(front_, value["front"])) {
79  utility::LogWarning("ViewParameters read JSON failed: wrong format.");
80  return false;
81  }
83  value["boundingbox_min"])) {
84  utility::LogWarning("ViewParameters read JSON failed: wrong format.");
85  return false;
86  }
88  value["boundingbox_max"])) {
89  utility::LogWarning("ViewParameters read JSON failed: wrong format.");
90  return false;
91  }
92  return true;
93 }
94 
95 } // namespace visualization
96 } // namespace cloudViewer
static bool EigenVector3dFromJsonArray(Eigen::Vector3d &vec, const Json::Value &value)
static bool EigenVector3dToJsonArray(const Eigen::Vector3d &vec, Json::Value &value)
void ConvertFromVector17d(const Vector17d &v)
bool ConvertToJsonValue(Json::Value &value) const override
Eigen::Matrix< double, 17, 1 > Vector17d
bool ConvertFromJsonValue(const Json::Value &value) override
#define LogWarning(...)
Definition: Logging.h:72
Generic file read and write utility for python interface.