ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
DatabaseManagementWidget.h
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 #pragma once
9 
10 #include <QtCore>
11 #include <QtWidgets>
12 #include <unordered_map>
13 
14 #include "ImageViewerWidget.h"
15 #include "base/database.h"
16 
17 namespace colmap {
18 class Reconstruction;
19 }
20 
21 #include "util/option_manager.h"
22 
23 namespace cloudViewer {
24 
26 
28 // Matches
30 
31 class TwoViewInfoTab : public QWidget {
32 public:
34  TwoViewInfoTab(QWidget* parent,
35  OptionManager* options,
36  colmap::Database* database);
37 
38  void Clear();
39 
40 protected:
41  void InitializeTable(const QStringList& table_header);
42  void ShowMatches();
43  void FillTable();
44 
46  colmap::Database* database_;
47 
48  const colmap::Image* image_;
49  std::vector<std::pair<const colmap::Image*, colmap::FeatureMatches>>
51  std::vector<int> configs_;
52  std::vector<size_t> sorted_matches_idxs_;
53 
54  QTableWidget* table_widget_;
55  QLabel* info_label_;
57 };
58 
59 class MatchesTab : public TwoViewInfoTab {
60 public:
61  MatchesTab(QWidget* parent,
62  OptionManager* options,
63  colmap::Database* database);
64 
65  void Reload(const std::vector<colmap::Image>& images,
66  const colmap::image_t image_id);
67 };
68 
70 public:
71  TwoViewGeometriesTab(QWidget* parent,
72  OptionManager* options,
73  colmap::Database* database);
74 
75  void Reload(const std::vector<colmap::Image>& images,
76  const colmap::image_t image_id);
77 };
78 
79 class OverlappingImagesWidget : public QWidget {
80 public:
81  OverlappingImagesWidget(QWidget* parent,
82  OptionManager* options,
83  colmap::Database* database);
84 
85  void ShowMatches(const std::vector<colmap::Image>& images,
86  const colmap::image_t image_id);
87 
88 private:
89  void closeEvent(QCloseEvent* event);
90 
91  QWidget* parent_;
92 
93  OptionManager* options_;
94 
95  QTabWidget* tab_widget_;
96  MatchesTab* matches_tab_;
97  TwoViewGeometriesTab* two_view_geometries_tab_;
98 };
99 
101 // Images, Cameras
103 
104 class CameraTab : public QWidget {
105 public:
106  CameraTab(QWidget* parent, colmap::Database* database);
107 
108  void Reload();
109  void Clear();
110 
111 private:
112  void itemChanged(QTableWidgetItem* item);
113  void Add();
114  void SetModel();
115 
116  colmap::Database* database_;
117 
118  std::vector<colmap::Camera> cameras_;
119 
120  QTableWidget* table_widget_;
121  QLabel* info_label_;
122 };
123 
124 class ImageTab : public QWidget {
125 public:
126  ImageTab(QWidget* parent,
127  CameraTab* camera_tab,
128  OptionManager* options,
129  colmap::Database* database);
130 
131  void Reload();
132  void Clear();
133 
134 private:
135  void itemChanged(QTableWidgetItem* item);
136 
137  void ShowImage();
138  void ShowMatches();
139  void SetCamera();
140  void SplitCamera();
141 
142  CameraTab* camera_tab_;
143 
144  OptionManager* options_;
145  colmap::Database* database_;
146 
147  std::vector<colmap::Image> images_;
148 
149  QTableWidget* table_widget_;
150  QLabel* info_label_;
151 
152  OverlappingImagesWidget* overlapping_images_widget_;
153 
154  FeatureImageViewerWidget* image_viewer_widget_;
155 };
156 
157 class DatabaseManagementWidget : public QWidget {
158 public:
159  DatabaseManagementWidget(QWidget* parent, OptionManager* options);
160 
161 private:
162  void showEvent(QShowEvent* event);
163  void hideEvent(QHideEvent* event);
164 
165  void ClearMatches();
166  void ClearTwoViewGeometries();
167 
168  QWidget* parent_;
169 
170  OptionManager* options_;
171  colmap::Database database_;
172 
173  QTabWidget* tab_widget_;
174  ImageTab* image_tab_;
175  CameraTab* camera_tab_;
176 };
177 
178 } // namespace cloudViewer
MouseEvent event
CameraTab(QWidget *parent, colmap::Database *database)
DatabaseManagementWidget(QWidget *parent, OptionManager *options)
ImageTab(QWidget *parent, CameraTab *camera_tab, OptionManager *options, colmap::Database *database)
void Reload(const std::vector< colmap::Image > &images, const colmap::image_t image_id)
MatchesTab(QWidget *parent, OptionManager *options, colmap::Database *database)
void ShowMatches(const std::vector< colmap::Image > &images, const colmap::image_t image_id)
OverlappingImagesWidget(QWidget *parent, OptionManager *options, colmap::Database *database)
TwoViewGeometriesTab(QWidget *parent, OptionManager *options, colmap::Database *database)
void Reload(const std::vector< colmap::Image > &images, const colmap::image_t image_id)
TwoViewInfoTab(QWidget *parent, OptionManager *options, colmap::Database *database)
std::vector< std::pair< const colmap::Image *, colmap::FeatureMatches > > matches_
void InitializeTable(const QStringList &table_header)
FeatureImageViewerWidget * matches_viewer_widget_
std::vector< size_t > sorted_matches_idxs_
Generic file read and write utility for python interface.
colmap::OptionManager OptionManager