Files
qG3Point/include/ActionA.h
T

96 lines
2.8 KiB
C++
Raw Normal View History

2023-11-30 19:43:41 +01:00
#include "Eigen/Dense"
#include <ccOctree.h>
2023-12-01 17:54:25 +01:00
#include <vector>
#include <QObject>
#include <G3PointDialog.h>
2023-11-22 12:56:31 +01:00
#pragma once
class ccMainAppInterface;
2023-12-01 17:54:25 +01:00
class ccPointCloud;
2023-11-22 12:56:31 +01:00
namespace G3Point
{
class G3PointAction : public QObject
{
Q_OBJECT
2024-02-28 23:14:33 +01:00
typedef Eigen::Array<bool, Eigen::Dynamic, Eigen::Dynamic> XXb;
2024-02-29 16:46:34 +01:00
typedef Eigen::Array<bool, Eigen::Dynamic, Eigen::Dynamic> Xb;
2024-02-28 23:14:33 +01:00
public:
2024-02-22 00:14:35 +01:00
explicit G3PointAction(ccPointCloud *cloud, ccMainAppInterface *app=nullptr);
2024-02-23 17:34:34 +01:00
~G3PointAction();
static void createAction(ccMainAppInterface *appInterface);
2024-02-23 17:34:34 +01:00
static void GetG3PointAction(ccPointCloud *cloud, ccMainAppInterface *app=nullptr);
void segment();
2024-02-29 16:46:34 +01:00
void segmentAndCluster();
void segmentAndClusterAndClean();
void getBorders();
2024-02-23 17:34:34 +01:00
int cluster();
2024-02-29 16:46:34 +01:00
bool processNewStacks(std::vector<std::vector<int>>& stacks);
bool merge(XXb& condition);
bool keepLabels(Xb& condition);
bool cleanLabels();
2024-02-23 17:34:34 +01:00
void clean();
private:
bool sfConvertToRandomRGB(const ccHObject::Container &selectedEntities, QWidget* parent);
void add_to_stack(int index, const Eigen::ArrayXi& n_donors, const Eigen::ArrayXXi& donors, std::vector<int>& stack);
int segment_labels(bool useParallelStrategy=true);
2024-02-20 17:18:50 +01:00
double angle_rot_2_vec_mat(const Eigen::Vector3d &a, const Eigen::Vector3d &b);
2024-02-29 16:46:34 +01:00
Eigen::ArrayXXd computeMeanAngle();
bool exportLocalMaximaAsCloud();
bool updateLocalMaximumIndexes();
bool updateLabelsAndColors();
bool checkStacks(const std::vector<std::vector<int>>& stacks, int count);
int segment_labels_steepest_slope(bool useParallelStrategy=true);
void add_to_stack_braun_willett(int index, const Eigen::ArrayXi& delta, const Eigen::ArrayXi &Di, std::vector<int>& stack, int local_maximum);
int segment_labels_braun_willett(bool useParallelStrategy=true);
void get_neighbors_distances_slopes(unsigned index);
2024-02-07 08:32:31 +01:00
void compute_node_surfaces();
2024-02-09 17:26:46 +01:00
bool compute_normals_and_orient_them_cloudcompare();
2024-02-20 17:18:50 +01:00
void orient_normals(const Eigen::Vector3d &sensorCenter);
bool compute_normals_with_open3d();
bool query_neighbors(ccPointCloud* cloud, ccMainAppInterface* appInterface, bool useParallelStrategy=true);
2024-02-22 00:14:35 +01:00
void init();
void showDlg();
2024-02-23 17:34:34 +01:00
void resetDlg();
void setCloud(ccPointCloud *cloud);
2024-02-07 08:32:31 +01:00
int m_kNN = 20;
2024-02-20 17:18:50 +01:00
double m_radiusFactor = 0.6;
double m_maxAngle1 = 60;
2024-02-29 16:46:34 +01:00
double m_maxAngle2 = 10;
int m_nMin = 50;
double m_minFlatness = 0.1;
2024-02-07 08:32:31 +01:00
2024-02-22 00:14:35 +01:00
ccPointCloud* m_cloud;
ccMainAppInterface *m_app;
G3PointDialog* m_dlg;
Eigen::ArrayXXi m_neighbors_indexes;
Eigen::ArrayXXd m_neighbors_distances;
Eigen::ArrayXXd m_neighbors_slopes;
2024-02-20 17:18:50 +01:00
Eigen::ArrayXXd m_normals;
2024-02-22 00:14:35 +01:00
2024-02-06 10:36:20 +01:00
Eigen::ArrayXi m_labels;
Eigen::ArrayXi m_labelsnpoint;
Eigen::ArrayXi m_localMaximumIndexes;
2024-02-07 08:32:31 +01:00
Eigen::ArrayXi m_ndon;
2024-02-22 00:14:35 +01:00
Eigen::ArrayXd m_area;
std::vector<std::vector<int>> m_stacks;
ccOctree::Shared m_octree;
unsigned char m_bestOctreeLevel = 0;
CCCoreLib::DgmOctree::NearestNeighboursSearchStruct m_nNSS;
static G3PointAction* s_g3PointAction;
};
2023-11-22 12:56:31 +01:00
}