ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
qM3C2.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 "qM3C2.h"
9 
10 // LOCAL
11 #include "qM3C2Commands.h"
12 #include "qM3C2Dialog.h"
13 #include "qM3C2DisclaimerDialog.h"
14 #include "qM3C2Process.h"
15 #include "qM3C2Tools.h"
16 
17 // CV_DB_LIB
18 #include <ecvPointCloud.h>
19 
20 // Qt
21 #include <QMainWindow>
22 
23 qM3C2Plugin::qM3C2Plugin(QObject* parent)
24  : QObject(parent),
25  ccStdPluginInterface(":/CC/plugin/qM3C2Plugin/info.json"),
26  m_action(nullptr) {}
27 
28 void qM3C2Plugin::onNewSelection(const ccHObject::Container& selectedEntities) {
29  if (m_action) {
30  m_action->setEnabled(selectedEntities.size() == 2 &&
31  selectedEntities[0]->isA(CV_TYPES::POINT_CLOUD) &&
32  selectedEntities[1]->isA(CV_TYPES::POINT_CLOUD));
33  }
34 
35  m_selectedEntities = selectedEntities;
36 }
37 
38 QList<QAction*> qM3C2Plugin::getActions() {
39  if (!m_action) {
40  m_action = new QAction(getName(), this);
41  m_action->setToolTip(getDescription());
42  m_action->setIcon(getIcon());
43  connect(m_action, &QAction::triggered, this, &qM3C2Plugin::doAction);
44  }
45 
46  return QList<QAction*>{m_action};
47 }
48 
49 void qM3C2Plugin::doAction() {
50  // disclaimer accepted?
51  if (!DisclaimerDialog::show(m_app)) return;
52 
53  // m_app should have already been initialized by CC when plugin is loaded!
54  assert(m_app);
55  if (!m_app) return;
56 
57  if (m_selectedEntities.size() != 2 ||
58  !m_selectedEntities[0]->isA(CV_TYPES::POINT_CLOUD) ||
59  !m_selectedEntities[1]->isA(CV_TYPES::POINT_CLOUD)) {
60  m_app->dispToConsole(tr("Select two point clouds!"),
62  return;
63  }
64 
65  ccPointCloud* cloud1 = ccHObjectCaster::ToPointCloud(m_selectedEntities[0]);
66  ccPointCloud* cloud2 = ccHObjectCaster::ToPointCloud(m_selectedEntities[1]);
67 
68  // display dialog
69  qM3C2Dialog dlg(cloud1, cloud2, m_app);
70  if (!dlg.exec()) {
71  // process cancelled by the user
72  return;
73  }
74 
75  QString errorMessage;
76  ccPointCloud* outputCloud =
77  nullptr; // only necessary for the command line version in fact
78  if (!qM3C2Process::Compute(dlg, errorMessage, outputCloud, true,
79  m_app->getMainWindow(), m_app)) {
80  m_app->dispToConsole(errorMessage,
82  }
83 
84  //'Compute' may change some parameters of the dialog
85  dlg.saveParamsToPersistentSettings();
86 }
87 
88 void qM3C2Plugin::registerCommands(ccCommandLineInterface* cmd) {
89  if (!cmd) {
90  assert(false);
91  return;
92  }
93  cmd->registerCommand(
95 }
static bool show(ecvMainAppInterface *app)
Command line interface.
virtual bool registerCommand(Command::Shared command)=0
Registers a new command.
virtual QString getName() const override
Returns (short) name (for menu entry, etc.)
virtual QString getDescription() const override
Returns long name/description (for tooltip, etc.)
virtual QIcon getIcon() const override
Returns icon.
static ccPointCloud * ToPointCloud(ccHObject *obj, bool *isLockedVertices=nullptr)
Converts current object to 'equivalent' ccPointCloud.
std::vector< ccHObject * > Container
Standard instances container (for children, etc.)
Definition: ecvHObject.h:337
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
Standard ECV plugin interface.
ecvMainAppInterface * m_app
Main application interface.
virtual QMainWindow * getMainWindow()=0
Returns main window.
virtual void dispToConsole(QString message, ConsoleMessageLevel level=STD_CONSOLE_MESSAGE)=0
M3C2 plugin's main dialog.
Definition: qM3C2Dialog.h:22
static bool Compute(const qM3C2Dialog &dlg, QString &errorMessage, ccPointCloud *&outputCloud, bool allowDialogs, QWidget *parentWidget=nullptr, ecvMainAppInterface *app=nullptr)
@ POINT_CLOUD
Definition: CVTypes.h:104
QSharedPointer< Command > Shared
Shared type.