45 std::shared_ptr<SpatialCellCandidate>, bool> {
47 return a->getCandidateRating() >
b->getCandidateRating();
52 int SpatialCellCandidate::_CandidateId = 0;
69 int SpatialCellImageCandidate::_width = 0;
71 int SpatialCellImageCandidate::_height = 0;
75 : _label(label), _bbox(
bbox), _candidateList(candidateList), _ignoreBad(true) {
76 LOGL_DEBUG(
"afw.math.SpatialCell",
"Cell %s : created with %d candidates", this->_label.
c_str(),
77 this->_candidateList.size());
84 CandidateList::iterator pos =
86 _candidateList.
insert(pos, candidate);
90 CandidateList::iterator pos =
std::find(_candidateList.
begin(), _candidateList.
end(), candidate);
91 if (pos == _candidateList.
end()) {
94 (
boost::format(
"Unable to find candidate with ID == %d") % candidate->getId()).str());
96 _candidateList.
erase(pos);
105 if (!(_ignoreBad && (*ptr)->isBad())) {
118 return mthis->
end() - mthis->
begin();
123 if ((*ptr)->getId() ==
id) {
132 (
boost::format(
"Unable to find object with ID == %d") %
id).str());
138 bool const ignoreExceptions,
bool const reset) {
146 if (nMaxPerCell > 0 && i == nMaxPerCell) {
153 if (ignoreExceptions) {
164 bool const ignoreExceptions,
bool const reset)
const {
173 for (SpatialCell::const_iterator candidate = (*cell)->begin(), candidateEnd = (*cell)->end();
174 candidate != candidateEnd; ++candidate, ++i) {
175 if (i == nMaxPerCell) {
182 if (ignoreExceptions) {
205 if (ignoreExceptions) {
216 bool const reset)
const {
225 for (SpatialCell::const_iterator candidate = (*cell)->begin(
false), candidateEnd = (*cell)->end(
false);
226 candidate != candidateEnd; ++candidate, ++i) {
230 if (ignoreExceptions) {
242 CandidateList::iterator
end,
bool ignoreBad)
243 : _iterator(iterator), _end(
end), _ignoreBad(ignoreBad) {
244 for (; _iterator != _end; ++_iterator) {
245 (*_iterator)->instantiate();
247 if (!(_ignoreBad && (*_iterator)->isBad())) {
254 CandidateList::iterator
end,
bool ignoreBad,
bool)
255 : _iterator(
end), _end(
end), _ignoreBad(ignoreBad) {
263 if (_iterator != _end) {
267 for (; _iterator != _end; ++_iterator) {
268 (*_iterator)->instantiate();
270 if (!(_ignoreBad && (*_iterator)->isBad())) {
279 if (!(_ignoreBad && (*ptr)->isBad())) {
288 if (_iterator == _end) {
296 if (_iterator == _end) {
304 : _region(region), _cellList(
CellList()) {
309 if (xSize <= 0 || ySize <= 0) {
312 (
boost::format(
"Please specify cells that contain pixels, not %dx%d") % xSize % ySize).str());
316 if (nx * xSize != region.
getWidth()) {
328 for (
int y = 0;
y < ny; ++
y) {
330 int const y1 = (
y == ny - 1) ? region.
getMaxY() : y0 + ySize - 1;
332 for (
int x = 0;
x < nx; ++
x) {
334 int const x1 = (
x == nx - 1) ? region.
getMaxX() : x0 + xSize - 1;
351 return cell->getBBox().contains(
362 CellList::iterator pos =
std::find_if(_cellList.
begin(), _cellList.
end(), CellContains(candidate));
364 if (pos == _cellList.
end()) {
366 (
boost::format(
"Unable to insert a candidate at (%.2f, %.2f)") %
367 candidate->getXCenter() % candidate->getYCenter())
371 (*pos)->insertCandidate(candidate);
375 for (CellList::iterator cell = _cellList.
begin(),
end = _cellList.
end(); cell !=
end; ++cell) {
376 (*cell)->sortCandidates();
381 bool const ignoreExceptions) {
384 for (CellList::iterator cell = _cellList.
begin(),
end = _cellList.
end(); cell !=
end; ++cell) {
385 (*cell)->visitCandidates(visitor, nMaxPerCell, ignoreExceptions,
false);
390 bool const ignoreExceptions)
const {
393 for (CellList::const_iterator cell = _cellList.
begin(),
end = _cellList.
end(); cell !=
end; ++cell) {
402 for (CellList::iterator cell = _cellList.
begin(),
end = _cellList.
end(); cell !=
end; ++cell) {
403 (*cell)->visitAllCandidates(visitor, ignoreExceptions,
false);
410 for (CellList::const_iterator cell = _cellList.
begin(),
end = _cellList.
end(); cell !=
end; ++cell) {
417 for (CellList::iterator cell = _cellList.
begin(),
end = _cellList.
end(); cell !=
end; ++cell) {
429 (
boost::format(
"Unable to find object with ID == %d") %
id).str());
434 for (CellList::iterator cell = _cellList.
begin(),
end = _cellList.
end(); cell !=
end; ++cell) {
435 (*cell)->setIgnoreBad(ignoreBad);