10 #include <Utils/cc2sm.h>
11 #include <Utils/sm2cc.h>
13 #include "PclUtils/PCLModules.h"
24 #include <QMainWindow>
32 tr(
"Marching Cube Reconstruction"),
33 tr(
"Marching Cube Reconstruction from clouds"),
34 ":/toolbar/PclAlgorithms/icons/MarchingCubeReconstruction.png")),
36 m_normalSearchRadius(0),
43 m_percentageExtendGrid(0.0f) {}
53 if (have_cloud != 1)
return -11;
82 static_cast<float>(
m_dialog->normalSearchRadius->value());
88 static_cast<float>(
m_dialog->gridResolutionSpinBox->value());
90 static_cast<float>(
m_dialog->percentageExtendedSpinBox->value());
97 if (!cloud)
return -1;
100 PointCloudNormal::Ptr cloudWithNormals(
new PointCloudNormal);
104 PointCloudT::Ptr xyzCloud = cc2smReader(cloud).getXYZ2();
105 if (!xyzCloud)
return -1;
108 CloudNormal::Ptr
normals(
new CloudNormal);
109 int result = PCLModules::ComputeNormals<PointT, NormalT>(
112 if (
result < 0)
return -1;
115 pcl::concatenateFields(*xyzCloud, *
normals, *cloudWithNormals);
117 "[MarchingCubeReconstruction::compute] generate new normals"));
119 PCLCloud::Ptr sm_cloud = cc2smReader(cloud).getAsSM();
120 FROM_PCL_CLOUD(*sm_cloud, *cloudWithNormals);
122 tr(
"[MarchingCubeReconstruction::compute] find normals and use "
128 PCLModules::MarchingMethod marchingMethod =
130 if (!PCLModules::GetMarchingCubes<PointNT>(
136 PCLCloud out_cloud_sm(mesh.cloud);
137 if (out_cloud_sm.height * out_cloud_sm.width == 0) {
142 ccMesh* out_mesh = pcl2cc::Convert(out_cloud_sm, mesh.polygons);
149 unsigned faceCount = out_mesh->
size();
150 CVLog::Print(tr(
"[MarchingCube-Reconstruction] %1 points, %2 face(s)")
154 out_mesh->
setName(tr(
"Marching Cube"));
173 "Selected entity does not have any suitable scalar field "
177 "Wrong Parameters. One or more parameters cannot be "
181 "Marching Cube Reconstruction does not returned any point. "
182 "Try relaxing your parameters");
Base abstract class for each implemented PCL filter.
int isFirstSelectedCcPointCloud()
Returns 1 if the first selected object is a ccPointCloud.
void newEntity(ccHObject *)
Signal emitted when a new entity is created by the filter.
ecvMainAppInterface * m_app
Associated application interface.
virtual QString getErrorMessage(int errorCode)
Returns the error message corresponding to a given error code.
ccPointCloud * getSelectedEntityAsCCPointCloud() const
Returns the first selected entity as a ccPointCloud.
static bool Print(const char *format,...)
Prints out a formatted message in console.
MarchingCubeReconstruction()
virtual int checkParameters()
virtual int compute()
Performs the actual filter job.
virtual int checkSelected()
Checks if current selection is compliant with the filter.
virtual ~MarchingCubeReconstruction()
virtual QString getErrorMessage(int errorCode)
Returns the error message corresponding to a given error code.
MarchingCubeDlg * m_dialog
virtual void getParametersFromDialog()
Collects parameters from the filter dialog (if openDialog is successful)
virtual int openInputDialog()
float m_percentageExtendGrid
float m_normalSearchRadius
ccBBox getOwnBB(bool withGLFeatures=false) override
Returns the entity's own bounding-box.
virtual bool addChild(ccHObject *child, int dependencyFlags=DP_PARENT_OF_OTHER, int insertIndex=-1)
Adds a child.
ccHObject * getParent() const
Returns parent object.
ccGenericPointCloud * getAssociatedCloud() const override
Returns the vertices cloud.
virtual unsigned size() const override
Returns the number of triangles.
virtual void setName(const QString &name)
Sets object name.
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
bool hasNormals() const override
Returns whether normals are enabled or not.
virtual void setGlobalScale(double scale)
virtual void setGlobalShift(double x, double y, double z)
Sets shift applied to original coordinates (information storage only)
virtual const CCVector3d & getGlobalShift() const
Returns the shift applied to original coordinates.
virtual double getGlobalScale() const
Returns the scale applied to original coordinates.
T getDiagNorm() const
Returns diagonal length.
bool isValid() const
Returns whether bounding box is valid or not.
virtual unsigned size() const =0
Returns the number of points.
virtual QWidget * getActiveWindow()=0