Go to the documentation of this file.
28 template <
typename TmplParticle>
51 template<
typename TmplTraits>
54 int maxInsertionFailures,
58 m_fitPlaneVector(fitPlaneVector),
59 m_maxInsertionFailures(maxInsertionFailures),
62 m_next(
Fitter::getInvalidParticle()),
69 std::string(
"isValid method returns true for INVALID particle:")
77 template<
typename TmplTraits>
81 return m_fitPlaneVector;
84 template<
typename TmplTraits>
87 return m_maxInsertionFailures;
90 template<
typename TmplTraits>
97 template<
typename TmplTraits>
104 template<
typename TmplTraits>
110 if (getPacker().is2d())
113 if (getFitPlaneVector().size() > 0) {
120 if (getFitPlaneVector().size() > 0) {
125 m_fitterPtrVector = fitters;
128 template<
typename TmplTraits>
132 return m_fitterPtrVector;
135 template<
typename TmplTraits>
139 return m_fitterPtrVector;
142 template<
typename TmplTraits>
149 if (fitPlanes.size() > 0) {
154 return Plane3D(
Vec3(-1.0, 0, 0),
Vec3(DBL_MAX/2, DBL_MAX/2, DBL_MAX/2));
157 template<
typename TmplTraits>
160 return getPacker().getRandomPoint();
163 template<
typename TmplTraits>
169 return getPacker().getCandidateParticle(point);
172 template<
typename TmplTraits>
179 return getPacker().getClosestNeighbours(particle, numClosest);
182 template<
typename TmplTraits>
186 m_next = Fitter::getInvalidParticle();
187 if (m_lastFailCount < getMaxInsertionFailures())
192 Particle particle = Fitter::getInvalidParticle();
196 while ((!fitParticle.isValid()) && (numFails < getMaxInsertionFailures()))
198 particle = getCandidateParticle(getRandomPoint());
199 neighbours = getClosestNeighbours(particle, 4);
200 plane = getClosestFitPlane(particle);
203 typename FitterPtrVector::iterator it = getFitterPtrVector().begin();
205 (it != getFitterPtrVector().end())
207 (!fitParticle.isValid())
212 fitParticle = (*it)->getFitParticle(particle, neighbours, plane);
216 m_lastFailCount = numFails;
218 <<
"FittedParticleIterator<T>::generateNext: numFails="
220 m_successCount += ((fitParticle.isValid()) ? 1 : 0);
221 m_next = fitParticle;
226 template<
typename TmplTraits>
229 return (m_next.isValid() || generateNext().isValid());
232 template<
typename TmplTraits>
236 if (!(m_next.isValid()))
241 m_next = Fitter::getInvalidParticle();
245 template<
typename TmplTraits>
249 <<
"BoundingBox: minPt = " << getPacker().getBBox().getMinPt()
250 <<
", maxPt = " << getPacker().getBBox().getMaxPt() <<
"\n"
251 <<
"BoundingBox: sizes = " << getPacker().getBBox().getSizes() <<
"\n";
254 typename FitterPtrVector::iterator it = getFitterPtrVector().begin();
255 (it != getFitterPtrVector().end());
260 console.
Info() <<
"Total successful fits = " << m_successCount <<
"\n";
289 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
297 double cubicPackRadius,
298 int maxInsertionFailures,
302 particleGeneratorPtr,
310 m_fitPlaneVector(fitPlaneVector),
311 m_maxInsertionFailures(maxInsertionFailures)
315 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
323 double cubicPackRadius,
324 int maxInsertionFailures
327 particleGeneratorPtr,
336 m_maxInsertionFailures(maxInsertionFailures)
341 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
346 if ((!this->getPeriodicDimensions()[1])) {
347 fitPlaneVector.push_back(
350 fitPlaneVector.push_back(
354 if ((!this->getPeriodicDimensions()[0])) {
355 fitPlaneVector.push_back(
358 fitPlaneVector.push_back(
365 (!this->getPeriodicDimensions()[2])
367 fitPlaneVector.push_back(
370 fitPlaneVector.push_back(
374 return fitPlaneVector;
377 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
382 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
392 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
396 return m_fitPlaneVector;
400 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
405 getRandom(this->
getBBox().getMinPt().X(), this->
getBBox().getMaxPt().X()),
406 getRandom(this->
getBBox().getMinPt().Y(), this->
getBBox().getMaxPt().Y()),
407 getRandom(this->
getBBox().getMinPt().Z(), this->
getBBox().getMaxPt().Z())
411 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
419 this->getNTable().getUniqueNeighbourVector(
424 if (
static_cast<int>(neighbourVector.size()) < numClosest)
427 this->getNTable().getUniqueNeighbourVector(
429 particle.getRad() + this->getTolerance()
431 if (
static_cast<int>(neighbourVector.size()) < numClosest)
434 this->getNTable().getUniqueNeighbourVector(
436 this->getParticleGenerator().getMaxFitRadius() + this->getTolerance()
442 neighbourVector.begin(),
443 neighbourVector.end(),
447 if (
static_cast<int>(neighbourVector.size()) > numClosest) {
448 neighbourVector.erase(
449 neighbourVector.begin() + numClosest,
450 neighbourVector.end()
454 return neighbourVector;
457 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
464 this->getParticleGenerator().isValidFitRadius(particle.getRad())
466 Inherited::particleFitsInBBoxWithNeighbours(particle)
470 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
473 return m_maxInsertionFailures;
476 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
482 getMaxInsertionFailures(),
488 this->createAndInsertParticle(p);
493 template <
typename TPartGen,
template <
typename TTPartGen>
class TCubicPackWrap>
496 this->generateCubicPacking();
497 this->generateRandomFill();
PlaneVector getDefaultFitPlaneVector() const
Definition: RandomBoxPacker.hpp:343
DefaultUniformRng s_zeroOneUniform(0.0, 1.0)
Definition: Rng.h:77
Plane3D getClosestFitPlane(const Particle &particle) const
Definition: RandomBoxPacker.hpp:144
Definition: ParticleComparer.h:23
FitterTraits::Packer Packer
Definition: RandomBoxPacker.h:37
TmplCubicBoxPackerWrap< TmplParticleGenerator >::CubicBoxPackerBase Inherited
Definition: RandomBoxPacker.h:116
const PlaneVector & getFitPlaneVector() const
Definition: RandomBoxPacker.hpp:394
Console & Info()
set verbose level of next message to "inf"
bool hasNext()
Definition: RandomBoxPacker.hpp:227
Definition: SphereFitter.h:654
virtual ~RandomBoxPacker()
Definition: RandomBoxPacker.hpp:378
Vec3 getRandomPoint() const
Definition: RandomBoxPacker.hpp:158
RandomBoxPacker(ParticleGeneratorPtr particleGeneratorPtr, ParticlePoolPtr particlePoolPtr, NTablePtr nTablePtr, const BoundingBox &bBox, const BoolVector &periodicDimensions, double tolerance, double cubicPackRadius, int maxInsertionFailures)
Definition: RandomBoxPacker.hpp:316
Definition: SphereFitter.h:563
::Plane3D Plane3D
Definition: Plane3D.h:60
const Vec3 & getPos() const
Definition: SimpleParticle.hpp:30
bool operator()(const Plane3D &plane1, const Plane3D &plane2) const
Definition: RandomBoxPacker.hpp:38
Vec3 getRandomPoint() const
Definition: RandomBoxPacker.hpp:401
Definition: RandomBlockGenerator.cpp:73
Particle getCandidateParticle(const Vec3 &point)
Definition: RandomBoxPacker.hpp:165
const Packer & getPacker() const
Definition: RandomBoxPacker.hpp:92
Inherited::ParticlePoolPtr ParticlePoolPtr
Definition: RandomBoxPacker.h:124
int getMaxInsertionFailures() const
Definition: RandomBoxPacker.hpp:471
Definition: RandomBoxPacker.h:32
Class representing a Plane3D.
Definition: Plane3D.h:29
PlaneComparer(const Particle &particle)
Definition: RandomBoxPacker.hpp:33
Definition: SphereFitter.h:30
ParticleVector getClosestNeighbours(const Particle &particle, int numClosest)
Definition: RandomBoxPacker.hpp:174
PlaneVector m_fitPlaneVector
Definition: RandomBoxPacker.h:182
boost::shared_ptr< ParticleFitter > FitterPtr
Definition: RandomBlockGenerator.h:30
3D bounding box
Definition: BoundingBox.h:28
Definition: CheckPointable.cpp:17
virtual double sep(const Vec3 &) const
Definition: Plane3D.cpp:87
Inherited::NTablePtr NTablePtr
Definition: RandomBoxPacker.h:121
void initialiseFitterPtrVector()
Definition: RandomBoxPacker.hpp:106
std::vector< Plane3D > PlaneVector
Definition: RandomBoxPacker.h:125
void logInfo()
Definition: RandomBoxPacker.hpp:246
ParticleVector getClosestNeighbours(const Particle &particle, int numClosest)
Definition: RandomBoxPacker.hpp:413
const Particle * m_pParticle
Definition: RandomBoxPacker.hpp:48
std::string toString(const TmplData &data)
Definition: StringUtil.h:128
Definition: SphereFitter.h:192
Inherited::ParticleGeneratorPtr ParticleGeneratorPtr
Definition: RandomBoxPacker.h:118
Inherited::Particle Particle
Definition: RandomBoxPacker.h:119
const FitterPtrVector & getFitterPtrVector() const
Definition: RandomBoxPacker.hpp:137
Definition: SphereFitter.h:278
FitterTraits::Plane3D Plane3D
Definition: RandomBoxPacker.h:35
Particle m_next
Definition: RandomBoxPacker.h:103
virtual void generate()
Definition: RandomBoxPacker.hpp:494
std::vector< bool > BoolVector
Definition: BlockGenerator.h:28
void generateRandomFill()
Definition: RandomBoxPacker.hpp:477
NTable::ParticleVector ParticleVector
Definition: RandomBoxPacker.h:122
Particle next()
Definition: RandomBoxPacker.hpp:234
double getRandom(double min, double max) const
Definition: RandomBoxPacker.hpp:384
std::vector< FitterPtr > FitterPtrVector
Definition: RandomBoxPacker.h:52
Definition: ParticleFitter.h:109
int getMaxInsertionFailures() const
Definition: RandomBoxPacker.hpp:85
Packer::ParticleVector ParticleVector
Definition: RandomBoxPacker.h:39
TmplParticle Particle
Definition: RandomBoxPacker.hpp:32
bool particleIsValid(const Particle &particle) const
Definition: RandomBoxPacker.hpp:458
const SimpleParticle * m_pParticle
Definition: RandomBlockGenerator.cpp:90
Console console
Definition: console.cpp:25
FittedParticleIterator(Packer &packer, int maxInsertionFailures, const PlaneVector &fitPlaneVector)
Definition: RandomBoxPacker.hpp:52
const PlaneVector & getFitPlaneVector() const
Definition: RandomBoxPacker.hpp:79
FitterTraits::PlaneVector PlaneVector
Definition: RandomBoxPacker.h:36
BoundingBox getBBox(const std::string &arg)
Definition: Main.cpp:24
Particle & generateNext()
Definition: RandomBoxPacker.hpp:184
Packer::Particle Particle
Definition: RandomBoxPacker.h:38