ESyS-Particle  2.3
RandomSpherePacker.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_LSMRANDOMSPHEREPACKER_H
15 #define ESYS_LSMRANDOMSPHEREPACKER_H
16 
17 #include "Foundation/console.h"
18 #include "Foundation/Rng.h"
21 #include "Geometry/SphereFitter.h"
22 #include "Geometry/Plane3D.h"
23 
24 
25 #include <vector>
26 #include <boost/shared_ptr.hpp>
27 
28 namespace esys
29 {
30  namespace lsm
31  {
32  template <typename TmplFitterTraits>
34  {
35  public:
36  typedef TmplFitterTraits FitterTraits;
37  typedef typename FitterTraits::Plane3D Plane;
39  typedef typename FitterTraits::Packer Packer;
40  typedef typename Packer::Particle Particle;
42 
43  class FitTraits
44  {
45  public:
46  typedef Packer Validator;
47  typedef typename Packer::Particle Particle;
49  typedef typename FitterTraits::Plane3D Plane3D;
50  };
51 
53  typedef boost::shared_ptr<Fitter> FitterPtr;
54  typedef std::vector<FitterPtr> FitterPtrVector;
60 
62  Packer &packer,
63  int maxInsertionFailures,
64  const BoundingSphere &bSphere
65  );
66 
68 
69  const BoundingSphere &getBSphere() const;
70 
71  int getMaxInsertionFailures() const;
72 
73  const FitterPtrVector &getFitterPtrVector() const;
74 
75  FitterPtrVector &getFitterPtrVector();
76 
77  const Packer &getPacker() const;
78 
79  Packer &getPacker();
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  FitterPtrVector m_fitterPtrVector;
103  Particle m_next;
105  };
106 
110  template <typename TmplParticleGenerator,template <typename TmplPartGen> class TmplCubicBoxPackerWrap>
111  class RandomSpherePacker : 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 
127  {
128  public:
131  typedef std::vector<Plane3D> PlaneVector;
132  };
134 
136  ParticleGeneratorPtr particleGeneratorPtr,
137  ParticlePoolPtr particlePoolPtr,
138  NTablePtr nTablePtr,
139  const BoundingSphere &bSphere,
140  double tolerance,
141  double cubicPackRadius,
142  int maxInsertionFailures,
143  bool do2d
144  );
145 
146  virtual ~RandomSpherePacker();
147 
148  const BoundingSphere &getBSphere() const;
149 
150  bool particleIsValid(const Particle &particle) const;
151 
152  double getRandom(double min, double max) const;
153 
154  Vec3 getRandomPoint() const;
155 
156  ParticleVector getClosestNeighbours(const Particle& particle, int numClosest);
157 
158  int getMaxInsertionFailures() const;
159 
160  bool particleFitsInBSphere(const Particle &particle) const;
161 
162  bool particleFitsInBSphereWithNeighbours(const Particle &particle) const;
163 
165 
166  void generateRandomFill();
167 
168  virtual void generate();
169 
170  private:
173  };
174  }
175 }
176 
178 
179 #endif
const FitterPtrVector & getFitterPtrVector() const
Definition: RandomSpherePacker.hpp:109
int getMaxInsertionFailures() const
Definition: RandomSpherePacker.hpp:55
SphereFittedPIterator(Packer &packer, int maxInsertionFailures, const BoundingSphere &bSphere)
Definition: RandomSpherePacker.hpp:29
Inherited::NTablePtr NTablePtr
Definition: RandomSpherePacker.h:121
TwoDSphereSphereFitter< FitTraits > TwoDSSphereFitter
Definition: RandomSpherePacker.h:58
bool hasNext()
Definition: RandomSpherePacker.hpp:180
Inherited::ParticleGenerator ParticleGenerator
Definition: RandomSpherePacker.h:117
const Packer & getPacker() const
Definition: RandomSpherePacker.hpp:62
Definition: SphereFitter.h:191
void logInfo()
Definition: RandomSpherePacker.hpp:199
const BoundingSphere & getBSphere() const
Definition: RandomSpherePacker.hpp:274
Inherited::Particle Particle
Definition: RandomSpherePacker.h:119
Definition: vec3.h:46
double getRandom(double min, double max) const
Definition: SphereFitter.h:361
Vec3 getRandomPoint() const
Definition: RandomSpherePacker.hpp:291
SphereFitter< FitTraits > Fitter
Definition: RandomSpherePacker.h:52
FitterTraits::Plane3D Plane3D
Definition: RandomSpherePacker.h:49
Packer::ParticleVector ParticleVector
Definition: RandomSpherePacker.h:41
FitterPtrVector m_fitterPtrVector
Definition: RandomSpherePacker.h:99
int m_maxInsertionFailures
Definition: RandomSpherePacker.h:172
Packer::ParticleVector ParticleVector
Definition: RandomSpherePacker.h:48
Definition: RandomSpherePacker.h:126
ThreeDSphereSphereFitter< FitTraits > ThreeDSSphereFitter
Definition: RandomSpherePacker.h:59
TmplFitterTraits FitterTraits
Definition: RandomSpherePacker.h:36
std::vector< Plane3D > PlaneVector
Definition: GougeBlock3D.h:32
esys::lsm::Plane3D Plane3D
Definition: RandomSpherePacker.h:130
int m_lastFailCount
Definition: RandomSpherePacker.h:101
NTable::ParticleVector ParticleVector
Definition: RandomSpherePacker.h:122
Particle getCandidateParticle(const Vec3 &point)
Definition: RandomSpherePacker.hpp:122
Definition: RandomSpherePacker.h:111
virtual ~RandomSpherePacker()
Definition: RandomSpherePacker.hpp:268
TmplCubicBoxPackerWrap< TmplParticleGenerator >::CubicBoxPackerBase Inherited
Definition: RandomSpherePacker.h:116
Definition: CheckPointable.cpp:16
int m_successCount
Definition: RandomSpherePacker.h:102
Vec3 getRandomPoint() const
Definition: RandomSpherePacker.hpp:115
bool particleFitsInBSphereWithNeighbours(const Particle &particle) const
Definition: RandomSpherePacker.hpp:380
::Plane3D Plane3D
Definition: Plane3D.h:60
void initialiseFitterPtrVector()
Definition: RandomSpherePacker.hpp:83
Inherited::ParticlePool ParticlePool
Definition: RandomSpherePacker.h:123
RandomSpherePacker Packer
Definition: RandomSpherePacker.h:129
Packer Validator
Definition: RandomSpherePacker.h:46
boost::shared_ptr< Fitter > FitterPtr
Definition: RandomSpherePacker.h:53
Particle & generateNext()
Definition: RandomSpherePacker.hpp:141
BoundingSphere m_bSphere
Definition: RandomSpherePacker.h:104
Inherited::NTable NTable
Definition: RandomSpherePacker.h:120
Definition: ParticleFitter.h:108
Definition: SphereFitter.h:277
void generateRandomFill()
Definition: RandomSpherePacker.hpp:349
std::vector< Plane3D > PlaneVector
Definition: RandomSpherePacker.h:131
bool particleFitsInBSphere(const Particle &particle) const
Definition: RandomSpherePacker.hpp:367
void generateCubicPackingInSphere()
Definition: RandomSpherePacker.hpp:393
Particle m_next
Definition: RandomSpherePacker.h:103
ParticleCollection::Particle Particle
Definition: Packer.h:38
virtual void generate()
Definition: RandomSpherePacker.hpp:406
const BoundingSphere & getBSphere() const
Definition: RandomSpherePacker.hpp:76
Packer * m_pPacker
Definition: RandomSpherePacker.h:98
FitterTraits::PlaneVector PlaneVector
Definition: RandomSpherePacker.h:38
TwoDSphereFitter< FitTraits > TwoDSFitter
Definition: RandomSpherePacker.h:57
SphereFittedPIterator< StufferTraits > StuffedParticleIterator
Definition: RandomSpherePacker.h:133
double getRandom(double min, double max) const
Definition: RandomSpherePacker.hpp:282
FitterTraits::Packer Packer
Definition: RandomSpherePacker.h:39
Particle next()
Definition: RandomSpherePacker.hpp:187
ThreeDSphereFitter< FitTraits > ThreeDFitter
Definition: RandomSpherePacker.h:56
Definition: RandomSpherePacker.h:43
Packer::Particle Particle
Definition: RandomSpherePacker.h:47
int getMaxInsertionFailures() const
Definition: RandomSpherePacker.hpp:343
Definition: BoundingSphere.h:27
ParticleVector getClosestNeighbours(const Particle &particle, int numClosest)
Definition: RandomSpherePacker.hpp:131
Definition: RandomSpherePacker.h:33
Definition: SphereFitter.h:29
int m_maxInsertionFailures
Definition: RandomSpherePacker.h:100
Packer::Particle Particle
Definition: RandomSpherePacker.h:40
Definition: SphereFitter.h:460
ParticleVector getClosestNeighbours(const Particle &particle, int numClosest)
Definition: RandomSpherePacker.hpp:303
RandomSpherePacker(ParticleGeneratorPtr particleGeneratorPtr, ParticlePoolPtr particlePoolPtr, NTablePtr nTablePtr, const BoundingSphere &bSphere, double tolerance, double cubicPackRadius, int maxInsertionFailures, bool do2d)
Definition: RandomSpherePacker.hpp:243
bool particleIsValid(const Particle &particle) const
Definition: RandomSpherePacker.hpp:330
std::vector< FitterPtr > FitterPtrVector
Definition: RandomSpherePacker.h:54
FitterTraits::Plane3D Plane
Definition: RandomSpherePacker.h:37
Inherited::ParticlePoolPtr ParticlePoolPtr
Definition: RandomSpherePacker.h:124
Inherited::ParticleGeneratorPtr ParticleGeneratorPtr
Definition: RandomSpherePacker.h:118
BoundingSphere m_bSphere
Definition: RandomSpherePacker.h:171
std::vector< SimpleParticle > ParticleVector
Definition: SimpleNTable3D.h:22
MoveToSurfaceFitter< FitTraits > Move2SurfaceFitter
Definition: RandomSpherePacker.h:55