1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
//##########################################################################
//# #
//# CLOUDCOMPARE #
//# #
//# This program is free software; you can redistribute it and/or modify #
//# it under the terms of the GNU General Public License as published by #
//# the Free Software Foundation; version 2 or later of the License. #
//# #
//# This program is distributed in the hope that it will be useful, #
//# but WITHOUT ANY WARRANTY; without even the implied warranty of #
//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
//# GNU General Public License for more details. #
//# #
//# COPYRIGHT: EDF R&D / TELECOM ParisTech (ENST-TSI) #
//# #
//##########################################################################
#ifndef CC_VOLUME_CALC_TOOL_HEADER
#define CC_VOLUME_CALC_TOOL_HEADER
#include <ui_volumeCalcDlg.h>
//Local
#include "cc2.5DimEditor.h"
//Qt
#include <QDialog>
class ccGenericPointCloud;
class ccPointCloud;
class ccPolyline;
class QComboBox;
//! Volume calculation tool (dialog)
class ccVolumeCalcTool : public QDialog, public cc2Point5DimEditor, public Ui::VolumeCalcDialog
{
Q_OBJECT
public:
//! Default constructor
ccVolumeCalcTool(ccGenericPointCloud* cloud1, ccGenericPointCloud* cloud2, QWidget* parent = 0);
//! Destructor
~ccVolumeCalcTool() = default;
//Inherited from cc2Point5DimEditor
virtual double getGridStep() const override;
virtual unsigned char getProjectionDimension() const override;
virtual ccRasterGrid::ProjectionType getTypeOfProjection() const override;
//! Report info
struct ReportInfo
{
ReportInfo()
: volume(0)
, addedVolume(0)
, removedVolume(0)
, surface(0)
, matchingPrecent(0)
, ceilNonMatchingPercent(0)
, groundNonMatchingPercent(0)
, averageNeighborsPerCell(0)
{}
QString toText(int precision = 6) const;
double volume;
double addedVolume;
double removedVolume;
double surface;
float matchingPrecent;
float ceilNonMatchingPercent;
float groundNonMatchingPercent;
double averageNeighborsPerCell;
};
//! Static accessor
static bool ComputeVolume( ccRasterGrid& grid,
ccGenericPointCloud* ground,
ccGenericPointCloud* ceil,
const ccBBox& gridBox,
unsigned char vertDim,
double gridStep,
unsigned gridWidth,
unsigned gridHeight,
ccRasterGrid::ProjectionType projectionType,
ccRasterGrid::EmptyCellFillOption groundEmptyCellFillStrategy,
ccRasterGrid::EmptyCellFillOption ceilEmptyCellFillStrategy,
ccVolumeCalcTool::ReportInfo& reportInfo,
double groundHeight,
double ceilHeight,
QWidget* parentWidget = 0);
//! Converts a (volume) grid to a point cloud
static ccPointCloud* ConvertGridToCloud( ccRasterGrid& grid,
const ccBBox& gridBox,
unsigned char vertDim,
bool exportToOriginalCS);
protected slots:
//! Accepts the dialog and save settings
void saveSettingsAndAccept();
//! Save persistent settings and 'accept' dialog
void saveSettings();
//! Called when the projection direction changes
void projectionDirChanged(int);
//! Called when the SF projection type changes
void sfProjectionTypeChanged(int);
//Inherited from cc2Point5DimEditor
virtual bool showGridBoxEditor() override;
//! Called when the (ground) empty cell filling strategy changes
void groundFillEmptyCellStrategyChanged(int);
//! Called when the (ceil) empty cell filling strategy changes
void ceilFillEmptyCellStrategyChanged(int);
//! Called when the an option of the grid generation has changed
void gridOptionChanged();
//! Updates the gid info
void updateGridInfo();
//! Update the grid and the 2D display
void updateGridAndDisplay();
//! Swap roles
void swapRoles();
//! Ground source changed
void groundSourceChanged(int);
//! Ceil source changed
void ceilSourceChanged(int);
//! Exports info to clipboard
void exportToClipboard() const;
//! Exports the grid as a point cloud
void exportGridAsCloud() const;
//! Sets the displayed number precision
void setDisplayedNumberPrecision(int);
protected: //standard methods
//Inherited from cc2Point5DimEditor
virtual void gridIsUpToDate(bool state) override;
//! Load persistent settings
void loadSettings();
//! Updates the grid
bool updateGrid();
//! Converts the grid to a point cloud
ccPointCloud* convertGridToCloud(bool exportToOriginalCS) const;
//! Outputs the report
void outputReport(const ReportInfo& info);
protected: //members
//! First associated cloud
ccGenericPointCloud* m_cloud1;
//! Second associated cloud
ccGenericPointCloud* m_cloud2;
//! Last report
/** Only valid if clipboardPushButton is enabled
**/
ReportInfo m_lastReport;
};
#endif //CC_VOLUME_CALC_TOOL_HEADER
|