Program listing for file mechanics/src/collision/native/SpaceFilter.hpp#
Return to documentation for this file
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