void
opengv::sac::SampleConsensusProblem<M>::getSamples(
    int &iterations, std::vector<int> &samples)
{
  // We're assuming that indices_ have already been set in the constructor
  if (indices_->size() < (size_t)getSampleSize())
  {
    fprintf( stderr,
        "[sm::SampleConsensusModel::getSamples] Can not select %zu unique points out of %zu!\n",
        (size_t) getSampleSize(), indices_->size() );
    // one of these will make it stop :)
    samples.clear();
    iterations = std::numeric_limits<int>::max();
    return;
  }

  // Get a second point which is different than the first
  samples.resize( getSampleSize() );

  for( int iter = 0; iter < max_sample_checks_; ++iter )
  {
    drawIndexSample(samples);

    // If it's a good sample, stop here
    if(isSampleGood(samples))
      return;
  }
  fprintf( stdout,
      "[sm::SampleConsensusModel::getSamples] WARNING: Could not select %d sample points in %d iterations!\n",
      getSampleSize(), max_sample_checks_ );
  samples.clear();

}
    void RansacProblem<M>::getSamples(int &iterations, std::vector<int> &samples)
    {
        // We're assuming that indices_ have already been set in the constructor
        if (indices_->size() < (size_t)getSampleSize())
        {
          SM_ERROR ("[sm::SampleConsensusModel::getSamples] Can not select %zu unique points out of %zu!\n",
                     samples.size (), indices_->size ());
          // one of these will make it stop :)
          samples.clear();
          iterations = INT_MAX - 1;
          return;
        }

        // Get a second point which is different than the first
        samples.resize( getSampleSize() );
        for (int iter = 0; iter < max_sample_checks_; ++iter)
        {
            drawIndexSample (samples);
          
          // If it's a good sample, stop here
          if (isSampleGood (samples))
            return;
        }
        SM_DEBUG ("[sm::SampleConsensusModel::getSamples] WARNING: Could not select %d sample points in %d iterations!\n", getSampleSize (), max_sample_checks_);
        samples.clear ();

    }
void
opengv::sac::MultiSampleConsensusProblem<M>::getSamples(
    int &iterations, std::vector< std::vector<int> > &samples )
{
  std::vector<int> sampleSizes = getSampleSizes();
  samples.resize( sampleSizes.size() );

  for( size_t subIter = 0; subIter < samples.size(); subIter++ )
  {
    // We're assuming that indices_ have already been set in the constructor
    if( (*indices_)[subIter].size() < (size_t) sampleSizes[subIter] )
    {
      fprintf( stderr,
          "[sm::SampleConsensusModel::getSamples] Can not select %d unique points out of %zu!\n",
          sampleSizes[subIter], (*indices_)[subIter].size() );
      // one of these will make it stop :)
      samples.clear();
      iterations = INT_MAX - 1;
      return;
    }

    // Get a second point which is different than the first
    samples[subIter].resize( sampleSizes[subIter] );
  }

  for( int iter = 0; iter < max_sample_checks_; ++iter )
  {
    drawIndexSample(samples);

    // If it's a good sample, stop here
    if (isSampleGood (samples))
      return;
  }
  size_t multiSampleSize = 0;
  for( size_t multiIter = 0; multiIter < samples.size(); multiIter++ )
    multiSampleSize += samples[multiIter].size();

  fprintf( stdout,
      "[sm::SampleConsensusModel::getSamples] WARNING: Could not select %zu sample points in %d iterations!\n",
      multiSampleSize, max_sample_checks_ );
  samples.clear();
}