Program listing for file mechanics/src/collision/native/SpaceFilter.hpp

Program listing for file mechanics/src/collision/native/SpaceFilter.hpp#

  1#ifndef SpaceFilter_hpp
  2#define SpaceFilter_hpp
  3
  4#include "MechanicsFwd.hpp"
  5
  6#include <InteractionManager.hpp>
  7#include <SiconosFwd.hpp>
  8#include <SiconosSerialization.hpp>
  9#include <SiconosVisitor.hpp>
 10
 11
 12DEFINE_SPTR(space_hash);
 13DEFINE_SPTR(DiskDiskRDeclaredPool);
 14DEFINE_SPTR(DiskPlanRDeclaredPool);
 15DEFINE_SPTR(CircleCircleRDeclaredPool);
 16DEFINE_SPTR(Hashed);
 17
 18class SpaceFilter : public InteractionManager,
 19                    public std::enable_shared_from_this<SpaceFilter> {
 20
 21protected:
 22
 23  ACCEPT_SERIALIZATION(SpaceFilter);
 24
 25
 26  unsigned int _bboxfactor;
 27
 28
 29  unsigned int _cellsize;
 30
 31
 32  SP::SiconosMatrix _plans;
 33
 34
 35  SP::FMatrix _moving_plans;
 36
 37
 38  SP::space_hash _hash_table;
 39
 40
 41  SP::DiskDiskRDeclaredPool diskdisk_relations;
 42  SP::DiskPlanRDeclaredPool diskplan_relations;
 43  SP::CircleCircleRDeclaredPool circlecircle_relations;
 44
 45  void _PlanCircularFilter(SP::Simulation, double A, double B, double C,
 46                           double xCenter, double yCenter, double width,
 47                           SP::CircularDS ds);
 48
 49  void _MovingPlanCircularFilter(SP::Simulation, unsigned int i,
 50                                 SP::CircularDS ds, double time);
 51
 52  void _PlanSphereLDSFilter(SP::Simulation, double A, double B, double C,
 53                            double D, SP::SphereLDS ds);
 54
 55  void _PlanSphereNEDSFilter(SP::Simulation, double A, double B, double C,
 56                             double D, SP::SphereNEDS ds);
 57
 58
 59
 60
 61
 62  struct _CircularFilter;
 63  struct _SphereLDSFilter;
 64  struct _SphereNEDSFilter;
 65
 66
 67  struct _BodyHash;
 68
 69
 70  struct _FindInteractions;
 71
 72
 73  struct _IsSameDiskPlanR;
 74  struct _IsSameDiskMovingPlanR;
 75  struct _IsSameSpherePlanR;
 76
 77
 78  struct _DiskDistance;
 79
 80  friend struct SpaceFilter::_CircularFilter;
 81  friend struct SpaceFilter::_SphereLDSFilter;
 82  friend struct SpaceFilter::_SphereNEDSFilter;
 83  friend struct SpaceFilter::_BodyHash;
 84  friend struct SpaceFilter::_FindInteractions;
 85  friend struct SpaceFilter::_IsSameDiskPlanR;
 86  friend struct SpaceFilter::_IsSameDiskMovingPlanR;
 87  friend struct SpaceFilter::_IsSameSpherePlanR;
 88  friend struct SpaceFilter::_DiskDistance;
 89
 90public:
 91  SpaceFilter(unsigned int bboxfactor, unsigned int cellsize,
 92              SP::SiconosMatrix plans, SP::FMatrix moving_plans);
 93
 94  SpaceFilter(unsigned int bboxfactor, unsigned int cellsize,
 95              SP::SiconosMatrix plans);
 96
 97  SpaceFilter();
 98
 99
100  void insert(SP::Disk, int, int, int);
101
102  void insert(SP::Circle, int, int, int);
103
104  void insert(SP::SphereLDS, int, int, int);
105
106  void insert(SP::SphereNEDS, int, int, int);
107
108
109  void insert(SP::Hashed);
110
111
112
113  inline unsigned int bboxfactor() { return _bboxfactor; };
114  inline unsigned int cellsize() { return _cellsize; };
115
116  void setBBoxfactor(unsigned int value) { _bboxfactor = value; }
117
118  void setCellsize(unsigned int value) { _cellsize = value; }
119
120
121
122
123
124
125  bool haveNeighbours(SP::Hashed h);
126
127
128  double minDistance(SP::Hashed h);
129
130
131  void updateInteractions(SP::Simulation simulation) override;
132
133  void insertLine(double a, double b, double c);
134
135
136  virtual ~SpaceFilter(){};
137
138  ACCEPT_STD_VISITORS();
139};
140
141#endif