Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef PointHit__H
00035 #define PointHit__H
00036
00037 #include <OpenFOAM/bool.H>
00038 #include <OpenFOAM/token.H>
00039
00040
00041
00042 namespace Foam
00043 {
00044
00045
00046
00047 class Ostream;
00048
00049
00050
00051
00052 template<class Point> class PointHit;
00053
00054 template<class Point>
00055 inline Ostream& operator<<(Ostream&, const PointHit<Point>&);
00056
00057
00058
00059
00060
00061
00062 template<class Point>
00063 class PointHit
00064 {
00065
00066
00067
00068 bool hit_;
00069
00070
00071 Point hitPoint_;
00072
00073
00074 scalar distance_;
00075
00076
00077 bool eligibleMiss_;
00078
00079
00080 public:
00081
00082
00083
00084
00085 PointHit
00086 (
00087 const bool hit,
00088 const Point& p,
00089 const scalar dist,
00090 const bool eligibleMiss
00091 )
00092 :
00093 hit_(hit),
00094 hitPoint_(p),
00095 distance_(dist),
00096 eligibleMiss_(eligibleMiss)
00097 {}
00098
00099
00100 PointHit(const Point& p)
00101 :
00102 hit_(false),
00103 hitPoint_(p),
00104 distance_(GREAT),
00105 eligibleMiss_(false)
00106 {}
00107
00108
00109
00110
00111
00112 bool hit() const
00113 {
00114 return hit_;
00115 }
00116
00117
00118 const Point& hitPoint() const
00119 {
00120 if (!hit_)
00121 {
00122 FatalErrorIn("const Point& PointHit::hitPoint() const")
00123 << "requested a hit point for a miss"
00124 << abort(FatalError);
00125 }
00126
00127 return hitPoint_;
00128 }
00129
00130
00131 scalar distance() const
00132 {
00133 return distance_;
00134 }
00135
00136
00137 const Point& missPoint() const
00138 {
00139 if (hit_)
00140 {
00141 FatalErrorIn("const Point& PointHit::missPoint() const")
00142 << "requested a miss point for a hit"
00143 << abort(FatalError);
00144 }
00145
00146 return hitPoint_;
00147 }
00148
00149
00150 const Point& rawPoint() const
00151 {
00152 return hitPoint_;
00153 }
00154
00155
00156 bool eligibleMiss() const
00157 {
00158 return eligibleMiss_;
00159 }
00160
00161 void setHit()
00162 {
00163 hit_ = true;
00164 eligibleMiss_ = false;
00165 }
00166
00167 void setMiss(const bool eligible)
00168 {
00169 hit_ = false;
00170 eligibleMiss_ = eligible;
00171 }
00172
00173 void setPoint(const Point& p)
00174 {
00175 hitPoint_ = p;
00176 }
00177
00178 void setDistance(const scalar d)
00179 {
00180 distance_ = d;
00181 }
00182
00183
00184
00185
00186 friend Ostream& operator<< <Point>
00187 (
00188 Ostream& os,
00189 const PointHit<Point>& b
00190 );
00191 };
00192
00193
00194 template<class Point>
00195 inline Ostream& operator<<(Ostream& os, const PointHit<Point>& b)
00196 {
00197 os << b.hit() << token::SPACE
00198 << b.rawPoint() << token::SPACE
00199 << b.distance() << token::SPACE
00200 << b.eligibleMiss();
00201
00202 return os;
00203 }
00204
00205
00206
00207
00208 }
00209
00210
00211
00212 #endif
00213
00214