ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
qPCLBase.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 "qPCLBase.h"
9 
10 // CV_DB_LIB
11 #include <ecvPointCloud.h>
12 
13 // PCL_PLUGIN_ALGORIGHM_LIB
14 #include <BasePclModule.h>
15 
16 // FILTERS
18 #include <Filters/GeneralFilters.h>
22 
23 // FEATURES
24 #include <Features/ExtractSIFT.h>
26 
27 // SEGMENTATIONS
33 
34 // RECOGNITIONS
37 
38 // SURFACES
43 #if defined(WITH_PCL_NURBS)
46 #endif
47 
48 qPCL::qPCL(QObject *parent /*=0*/)
49  : QObject(parent), ccPclPluginInterface(":/toolbar/info.json") {}
50 
51 void qPCL::stop() {
52  while (!m_modules.empty()) {
53  delete m_modules.back();
54  m_modules.pop_back();
55  }
56 }
57 
59  assert(entity && m_app);
60  m_app->addToDB(entity);
61  m_app->zoomOnEntities(entity);
62 }
63 
65  assert(entity && m_app);
67  m_app->updateUI();
68 }
69 
70 void qPCL::handleErrorMessage(QString message) {
71  if (m_app)
73 }
74 
75 QVector<QList<QAction *>> qPCL::getActions() {
76  QVector<QList<QAction *>> allModuleActions;
77 
78  // ADD actions
79  if (m_modules.empty() && m_moduleNames.empty()) {
80  // ADD FILTERS
81  QList<QAction *> filterActions;
82  m_moduleNames.push_back(tr("Filters"));
83  addPclModule(new GeneralFilters(), filterActions);
84  addPclModule(new ProjectionFilter(), filterActions);
85  addPclModule(new MLSSmoothingUpsampling(), filterActions);
86  addPclModule(new StatisticalOutliersRemover(), filterActions);
87  addPclModule(new FastGlobalRegistrationFilter(), filterActions);
88  allModuleActions.push_back(filterActions);
89 
90  // ADD FEATURES
91  QList<QAction *> featureActions;
92  m_moduleNames.push_back(tr("Features"));
93  addPclModule(new NormalEstimation(), featureActions);
94  addPclModule(new ExtractSIFT(), featureActions);
95  allModuleActions.push_back(featureActions);
96 
97  // ADD SURFACES
98  QList<QAction *> surfaceActions;
99  m_moduleNames.push_back(tr("Surfaces"));
100  addPclModule(new MarchingCubeReconstruction(), surfaceActions);
101  addPclModule(new GreedyTriangulation(), surfaceActions);
102  addPclModule(new PoissonReconstruction(), surfaceActions);
103 #if defined(WITH_PCL_NURBS)
104  addPclModule(new NurbsCurveFitting(), surfaceActions);
105  addPclModule(new NurbsSurfaceReconstruction(), surfaceActions);
106 #endif
107  addPclModule(new ConvexConcaveHullReconstruction(), surfaceActions);
108  allModuleActions.push_back(surfaceActions);
109 
110  // ADD SEGMENTATION
111  QList<QAction *> segmentActions;
112  m_moduleNames.push_back(tr("Segmentations"));
113  addPclModule(new DONSegmentation(), segmentActions);
114  addPclModule(new MinimumCutSegmentation(), segmentActions);
115  addPclModule(new RegionGrowingSegmentation(), segmentActions);
116  addPclModule(new SACSegmentation(), segmentActions);
117  addPclModule(new EuclideanClusterSegmentation(), segmentActions);
118  allModuleActions.push_back(segmentActions);
119 
120  // ADD RECOGNITION
121  QList<QAction *> recognitionActions;
122  m_moduleNames.push_back(tr("Recognitions"));
123  addPclModule(new TemplateAlignment(), recognitionActions);
124  addPclModule(new CorrespondenceMatching(), recognitionActions);
125  allModuleActions.push_back(recognitionActions);
126  }
127 
128  return allModuleActions;
129 }
130 
131 QVector<QString> qPCL::getModuleNames() { return m_moduleNames; }
132 
133 int qPCL::addPclModule(BasePclModule *module, QList<QAction *> &actions) {
134  assert(module);
135  module->setMainAppInterface(m_app);
136 
137  QAction *action = module->getAction();
138  if (!action) return 0;
139 
140  // module already inserted?
141  if (std::find(m_modules.begin(), m_modules.end(), module) !=
142  m_modules.end())
143  return 0;
144 
145  actions.push_back(action);
146  m_modules.push_back(module);
147 
148  // connect signals
149  connect(module, &BasePclModule::newEntity, this, &qPCL::handleNewEntity);
150  connect(module, &BasePclModule::entityHasChanged, this,
152  connect(module, &BasePclModule::newErrorMessage, this,
154 
155  return 1;
156 }
157 
158 void qPCL::onNewSelection(const ccHObject::Container &selectedEntities) {
159  for (size_t i = 0; i < m_modules.size(); ++i)
160  m_modules[i]->updateSelectedEntities(selectedEntities);
161 
162  for (size_t i = 0; i < m_modules.size(); ++i)
163  m_modules[i]->updateSelectedEntities(selectedEntities);
164 }
Base abstract class for each implemented PCL filter.
Definition: BasePclModule.h:53
QAction * getAction()
Get the action associated with the button used in menu and toolbar creation.
void newEntity(ccHObject *)
Signal emitted when a new entity is created by the filter.
void newErrorMessage(QString)
Signal emitted when a new error message is produced.
void setMainAppInterface(ecvMainAppInterface *app)
Sets associated CC application interface (to access DB)
void entityHasChanged(ccHObject *)
Signal emitted when an entity is (visually) modified.
Convex Concave Hull Reconstruction.
Correspondence Matching.
SIFT keypoints extraction.
SIFT keypoints extraction.
Definition: ExtractSIFT.h:18
Projection Filter.
Greedy Triangulation.
Region Growing Segmentation.
Greedy Triangulation.
Poisson Reconstruction.
Projection Filter.
Region Growing Segmentation.
SIFT keypoints extraction.
Template Alignment.
Hierarchical CLOUDVIEWER Object.
Definition: ecvHObject.h:25
std::vector< ccHObject * > Container
Standard instances container (for children, etc.)
Definition: ecvHObject.h:337
Pcl ECV plugin interface.
ecvMainAppInterface * m_app
Main application interface.
virtual void updateUI()=0
virtual void refreshSelected(bool only2D=false, bool forceRedraw=true)=0
virtual void zoomOnEntities(ccHObject *obj)=0
virtual void addToDB(ccHObject *obj, bool updateZoom=false, bool autoExpandDBTree=true, bool checkDimensions=false, bool autoRedraw=true)=0
virtual void dispToConsole(QString message, ConsoleMessageLevel level=STD_CONSOLE_MESSAGE)=0
virtual void stop() override
Stops the plugin.
Definition: qPCLBase.cpp:51
void handleEntityChange(ccHObject *)
Handles entity (visual) modification.
Definition: qPCLBase.cpp:64
virtual void onNewSelection(const ccHObject::Container &selectedEntities) override
Definition: qPCLBase.cpp:158
std::vector< BasePclModule * > m_modules
Loaded modules.
Definition: qPCLBase.h:53
void handleNewEntity(ccHObject *)
Handles new entity.
Definition: qPCLBase.cpp:58
virtual QVector< QList< QAction * > > getActions() override
Get a list of actions for this plugin.
Definition: qPCLBase.cpp:75
void handleErrorMessage(QString)
Handles new error message.
Definition: qPCLBase.cpp:70
qPCL(QObject *parent=nullptr)
Default constructor.
Definition: qPCLBase.cpp:48
int addPclModule(BasePclModule *module, QList< QAction * > &actions)
Adds a pcl module.
Definition: qPCLBase.cpp:133
QVector< QString > m_moduleNames
Definition: qPCLBase.h:54
virtual QVector< QString > getModuleNames() override
Definition: qPCLBase.cpp:131