Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 18 additions & 30 deletions sample_consensus/include/pcl/sample_consensus/sac_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#include <boost/random/uniform_int.hpp> // for uniform_int
#include <boost/random/variate_generator.hpp> // for variate_generator
#include <random>
#include <numeric>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#include <numeric>
#include <numeric> // for iota

I assume?


#include <pcl/memory.h>
#include <pcl/console/print.h>
Expand Down Expand Up @@ -101,41 +102,14 @@ namespace pcl
}

public:
/** \brief Constructor for base SampleConsensusModel.
* \param[in] cloud the input point cloud dataset
* \param[in] random if true set the random seed to the current time, else set to 12345 (default: false)
*/
SampleConsensusModel (const PointCloudConstPtr &cloud, bool random = false)
: input_ ()
, radius_min_ (-std::numeric_limits<double>::max ())
, radius_max_ (std::numeric_limits<double>::max ())
, samples_radius_ (0.)
, samples_radius_search_ ()
, rng_dist_ (new boost::uniform_int<> (0, std::numeric_limits<int>::max ()))
, custom_model_constraints_ ([](auto){return true;})
{
if (random)
rng_alg_.seed (std::random_device()());
else
rng_alg_.seed (12345u);

// Sets the input cloud and creates a vector of "fake" indices
setInputCloud (cloud);

// Create a random number generator object
rng_gen_.reset (new boost::variate_generator<boost::mt19937&, boost::uniform_int<> > (rng_alg_, *rng_dist_));
}

/** \brief Constructor for base SampleConsensusModel.
* \param[in] cloud the input point cloud dataset
* \param[in] indices a vector of point indices to be used from \a cloud
* \param[in] random if true set the random seed to the current time, else set to 12345 (default: false)
*/
SampleConsensusModel (const PointCloudConstPtr &cloud,
const Indices &indices,
bool random = false)
SampleConsensusModel (const PointCloudConstPtr &cloud, const Indices &indices = Indices(), const bool random = false)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could adding a default value for indices not create a possible ambiguity if only the cloud parameter is given? Then there would not be a way to distinguish between this ctor and SampleConsensusModel (const PointCloudConstPtr &cloud, const bool random = false), right?

: input_ (cloud)
, indices_ (new Indices (indices))
, indices_(new Indices(indices))
, radius_min_ (-std::numeric_limits<double>::max ())
, radius_max_ (std::numeric_limits<double>::max ())
, samples_radius_ (0.)
Expand All @@ -148,6 +122,13 @@ namespace pcl
else
rng_alg_.seed (12345u);

// If no indices are provided, use all points
if (indices_->empty())
{
indices_->resize(cloud->size());
std::iota(indices_->begin(), indices_->end(), 0);
}

if (indices_->size () > input_->size ())
{
PCL_ERROR("[pcl::SampleConsensusModel] Invalid index vector given with size "
Expand All @@ -160,7 +141,14 @@ namespace pcl

// Create a random number generator object
rng_gen_.reset (new boost::variate_generator<boost::mt19937&, boost::uniform_int<> > (rng_alg_, *rng_dist_));
};
}

/** \brief Constructor for base SampleConsensusModel.
* \param[in] cloud the input point cloud dataset
* \param[in] random if true set the random seed to the current time, else set to 12345 (default: false)
*/
SampleConsensusModel (const PointCloudConstPtr &cloud, const bool random = false)
: SampleConsensusModel(cloud, Indices(), random) {};

/** \brief Destructor for base SampleConsensusModel. */
virtual ~SampleConsensusModel () = default;
Expand Down