ESyS-Particle  2.3
RandomBoxPacker.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2014 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 
14 #ifndef ESYS_LSMRANDOMBOXPACKER_H
15 #define ESYS_LSMRANDOMBOXPACKER_H
16 
17 #include "Foundation/console.h"
18 #include "Foundation/Rng.h"
20 #include "Geometry/SphereFitter.h"
21 #include "Geometry/Plane3D.h"
22 
23 #include <vector>
24 #include <boost/shared_ptr.hpp>
25 
26 namespace esys
27 {
28  namespace lsm
29  {
30  template <typename TmplFitterTraits>
32  {
33  public:
34  typedef TmplFitterTraits FitterTraits;
35  typedef typename FitterTraits::Plane3D Plane3D;
37  typedef typename FitterTraits::Packer Packer;
38  typedef typename Packer::Particle Particle;
40 
41  class FitTraits
42  {
43  public:
44  typedef Packer Validator;
45  typedef typename Packer::Particle Particle;
47  typedef typename FitterTraits::Plane3D Plane3D;
48  };
49 
51  typedef boost::shared_ptr<Fitter> FitterPtr;
52  typedef std::vector<FitterPtr> FitterPtrVector;
58 
60  Packer &packer,
61  int maxInsertionFailures,
62  const PlaneVector &fitPlaneVector
63  );
64 
66 
67  int getMaxInsertionFailures() const;
68 
69  const FitterPtrVector &getFitterPtrVector() const;
70 
71  FitterPtrVector &getFitterPtrVector();
72 
73  const PlaneVector &getFitPlaneVector() const;
74 
75  const Packer &getPacker() const;
76 
77  Packer &getPacker();
78 
79  Plane3D getClosestFitPlane(const Particle &particle) const;
80 
81  double getRandom(double min, double max) const;
82 
83  Vec3 getRandomPoint() const;
84 
85  Particle getCandidateParticle(const Vec3 &point);
86 
87  ParticleVector getClosestNeighbours(const Particle& particle, int numClosest);
88 
89  Particle &generateNext();
90 
91  bool hasNext();
92 
93  Particle next();
94 
95  void logInfo();
96 
97  private:
98  Packer *m_pPacker;
99  PlaneVector m_fitPlaneVector;
103  Particle m_next;
104  FitterPtrVector m_fitterPtrVector;
105  };
106 
110  template <typename TmplParticleGenerator,template <typename TmplPartGen> class TmplCubicBoxPackerWrap>
111  class RandomBoxPacker : public TmplCubicBoxPackerWrap<TmplParticleGenerator>::CubicBoxPackerBase
112  {
113  public:
114  typedef
115  typename TmplCubicBoxPackerWrap<TmplParticleGenerator>::CubicBoxPackerBase
117  typedef typename Inherited::ParticleGenerator ParticleGenerator;
118  typedef typename Inherited::ParticleGeneratorPtr ParticleGeneratorPtr;
119  typedef typename Inherited::Particle Particle;
120  typedef typename Inherited::NTable NTable;
121  typedef typename Inherited::NTablePtr NTablePtr;
123  typedef typename Inherited::ParticlePool ParticlePool;
124  typedef typename Inherited::ParticlePoolPtr ParticlePoolPtr;
125  typedef std::vector<Plane3D> PlaneVector;
126 
128  {
129  public:
133  };
135 
137  ParticleGeneratorPtr particleGeneratorPtr,
138  ParticlePoolPtr particlePoolPtr,
139  NTablePtr nTablePtr,
140  const BoundingBox &bBox,
141  const BoolVector &periodicDimensions,
142  double tolerance,
143  double cubicPackRadius,
144  int maxInsertionFailures
145  );
146 
148  ParticleGeneratorPtr particleGeneratorPtr,
149  ParticlePoolPtr particlePoolPtr,
150  NTablePtr nTablePtr,
151  const BoundingBox &bBox,
152  const BoolVector &periodicDimensions,
153  double tolerance,
154  double cubicPackRadius,
155  int maxInsertionFailures,
156  const PlaneVector &fitPlaneVector
157  );
158 
159  virtual ~RandomBoxPacker();
160 
161  PlaneVector getDefaultFitPlaneVector() const;
162 
163  bool particleIsValid(const Particle &particle) const;
164 
165  virtual void generate();
166 
167  double getRandom(double min, double max) const;
168 
169  Vec3 getRandomPoint() const;
170 
171  ParticleVector getClosestNeighbours(const Particle& particle, int numClosest);
172 
173  int getMaxInsertionFailures() const;
174 
175  void generateRandomFill();
176 
177  const PlaneVector &getFitPlaneVector() const;
178 
179  Plane3D getClosestFitPlane(const Particle &particle) const;
180 
181  private:
182  PlaneVector m_fitPlaneVector;
184  };
185  }
186 }
187 
189 
190 #endif
Plane3D getClosestFitPlane(const Particle &particle) const
FittedParticleIterator(Packer &packer, int maxInsertionFailures, const PlaneVector &fitPlaneVector)
Definition: RandomBoxPacker.hpp:52
TmplFitterTraits FitterTraits
Definition: RandomBoxPacker.h:34
Inherited::Particle Particle
Definition: RandomBoxPacker.h:119
Particle next()
Definition: RandomBoxPacker.hpp:234
Definition: SphereFitter.h:191
Plane3D getClosestFitPlane(const Particle &particle) const
Definition: RandomBoxPacker.hpp:144
Particle getCandidateParticle(const Vec3 &point)
Definition: RandomBoxPacker.hpp:165
boost::shared_ptr< Fitter > FitterPtr
Definition: RandomBoxPacker.h:51
esys::lsm::Plane3D Plane3D
Definition: RandomBoxPacker.h:131
FitterTraits::Packer Packer
Definition: RandomBoxPacker.h:37
Definition: vec3.h:46
ParticleVector getClosestNeighbours(const Particle &particle, int numClosest)
Definition: RandomBoxPacker.hpp:174
PlaneVector m_fitPlaneVector
Definition: RandomBoxPacker.h:99
std::vector< Plane3D > PlaneVector
Definition: RandomBoxPacker.h:125
std::vector< Plane3D > PlaneVector
Definition: GougeBlock3D.h:32
const PlaneVector & getFitPlaneVector() const
Definition: RandomBoxPacker.hpp:79
Inherited::ParticleGeneratorPtr ParticleGeneratorPtr
Definition: RandomBoxPacker.h:118
MoveToSurfaceFitter< FitTraits > Move2SurfaceFitter
Definition: RandomBoxPacker.h:53
RandomBoxPacker Packer
Definition: RandomBoxPacker.h:130
Class representing a Plane3D.
Definition: Plane3D.h:28
Definition: CheckPointable.cpp:16
Packer::Particle Particle
Definition: RandomBoxPacker.h:38
double getRandom(double min, double max) const
Definition: RandomBoxPacker.hpp:384
::Plane3D Plane3D
Definition: Plane3D.h:60
void logInfo()
Definition: RandomBoxPacker.hpp:246
int getMaxInsertionFailures() const
Definition: RandomBoxPacker.hpp:471
Inherited::ParticleGenerator ParticleGenerator
Definition: RandomBoxPacker.h:117
Definition: SphereFitter.h:653
FittedParticleIterator< StufferTraits > StuffedParticleIterator
Definition: RandomBoxPacker.h:134
3D bounding box
Definition: BoundingBox.h:27
Packer Validator
Definition: RandomBoxPacker.h:44
Definition: ParticleFitter.h:108
Definition: SphereFitter.h:277
virtual void generate()
Definition: RandomBoxPacker.hpp:494
FitterTraits::Plane3D Plane3D
Definition: RandomBoxPacker.h:35
bool hasNext()
Definition: RandomBoxPacker.hpp:227
int getMaxInsertionFailures() const
Definition: RandomBoxPacker.hpp:85
Definition: RandomBoxPacker.h:41
void generateRandomFill()
Definition: RandomBoxPacker.hpp:477
const FitterPtrVector & getFitterPtrVector() const
Definition: RandomBoxPacker.hpp:137
const PlaneVector & getFitPlaneVector() const
Definition: RandomBoxPacker.hpp:394
void initialiseFitterPtrVector()
Definition: RandomBoxPacker.hpp:106
Packer * m_pPacker
Definition: RandomBoxPacker.h:98
Particle m_next
Definition: RandomBoxPacker.h:103
int m_maxInsertionFailures
Definition: RandomBoxPacker.h:183
ParticleVector getClosestNeighbours(const Particle &particle, int numClosest)
Definition: RandomBoxPacker.hpp:413
int m_successCount
Definition: RandomBoxPacker.h:102
ParticleCollection::Particle Particle
Definition: Packer.h:38
int m_maxInsertionFailures
Definition: RandomBoxPacker.h:100
std::vector< FitterPtr > FitterPtrVector
Definition: RandomBoxPacker.h:52
bool particleIsValid(const Particle &particle) const
Definition: RandomBoxPacker.hpp:458
virtual ~RandomBoxPacker()
Definition: RandomBoxPacker.hpp:378
Definition: SphereFitter.h:562
Particle & generateNext()
Definition: RandomBoxPacker.hpp:184
TmplCubicBoxPackerWrap< TmplParticleGenerator >::CubicBoxPackerBase Inherited
Definition: RandomBoxPacker.h:116
std::vector< bool > BoolVector
Definition: BlockGenerator.h:28
Vec3 getRandomPoint() const
Definition: RandomBoxPacker.hpp:158
Packer::ParticleVector ParticleVector
Definition: RandomBoxPacker.h:39
TwoDPlaneSphereFitter< FitTraits > TwoDPlaneFitter
Definition: RandomBoxPacker.h:56
FitterTraits::Plane3D Plane3D
Definition: RandomBoxPacker.h:47
RandomBoxPacker(ParticleGeneratorPtr particleGeneratorPtr, ParticlePoolPtr particlePoolPtr, NTablePtr nTablePtr, const BoundingBox &bBox, const BoolVector &periodicDimensions, double tolerance, double cubicPackRadius, int maxInsertionFailures)
Definition: RandomBoxPacker.hpp:316
Inherited::NTablePtr NTablePtr
Definition: RandomBoxPacker.h:121
Packer::PlaneVector PlaneVector
Definition: RandomBoxPacker.h:132
ThreeDPlaneSphereFitter< FitTraits > ThreeDPlaneFitter
Definition: RandomBoxPacker.h:57
int m_lastFailCount
Definition: RandomBoxPacker.h:101
SphereFitter< FitTraits > Fitter
Definition: RandomBoxPacker.h:50
Definition: SphereFitter.h:29
Definition: RandomBoxPacker.h:127
Definition: RandomBoxPacker.h:111
Inherited::NTable NTable
Definition: RandomBoxPacker.h:120
Vec3 getRandomPoint() const
Definition: RandomBoxPacker.hpp:401
FitterTraits::PlaneVector PlaneVector
Definition: RandomBoxPacker.h:36
TwoDSphereFitter< FitTraits > TwoDFitter
Definition: RandomBoxPacker.h:55
Inherited::ParticlePoolPtr ParticlePoolPtr
Definition: RandomBoxPacker.h:124
Inherited::ParticlePool ParticlePool
Definition: RandomBoxPacker.h:123
FitterPtrVector m_fitterPtrVector
Definition: RandomBoxPacker.h:104
Definition: RandomBoxPacker.h:31
const Packer & getPacker() const
Definition: RandomBoxPacker.hpp:92
PlaneVector getDefaultFitPlaneVector() const
Definition: RandomBoxPacker.hpp:343
Packer::ParticleVector ParticleVector
Definition: RandomBoxPacker.h:46
Packer::Particle Particle
Definition: RandomBoxPacker.h:45
double getRandom(double min, double max) const
NTable::ParticleVector ParticleVector
Definition: RandomBoxPacker.h:122
std::vector< SimpleParticle > ParticleVector
Definition: SimpleNTable3D.h:22
ThreeDSphereFitter< FitTraits > ThreeDFitter
Definition: RandomBoxPacker.h:54
PlaneVector m_fitPlaneVector
Definition: RandomBoxPacker.h:182