line_3d.h
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
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_LINE_3D_H
00054 #define LASS_GUARDIAN_OF_INCLUSION_PRIM_LINE_3D_H
00055
00056 #include "prim_common.h"
00057 #include "normalizing_policy.h"
00058 #include "point_3d.h"
00059
00060
00061
00062 namespace lass
00063 {
00064
00065 namespace prim
00066 {
00067
00068 template
00069 <
00070 typename T,
00071 class NormalizingPolicy = Normalized
00072 >
00073 class Line3D
00074 {
00075 public:
00076
00077 typedef Line3D<T, NormalizingPolicy> TSelf;
00078 typedef NormalizingPolicy TNormalizingPolicy;
00079
00080 typedef Point3D<T> TPoint;
00081 typedef typename TPoint::TVector TVector;
00082
00083 typedef typename TPoint::TValue TValue;
00084 typedef typename TPoint::TParam TParam;
00085 typedef typename TPoint::TReference TReference;
00086 typedef typename TPoint::TConstReference TConstReference;
00087 typedef typename TPoint::TNumTraits TNumTraits;
00088
00089 enum { dimension = TPoint::dimension };
00090
00091
00092
00093 template <typename U>
00094 struct Rebind
00095 {
00096 typedef Line3D<U, NormalizingPolicy> Type;
00097 };
00098
00099 Line3D();
00100 Line3D(const TPoint& iSupport, const TPoint& iPoint);
00101 Line3D(const TPoint& iSupport, const TVector& iDirection);
00102
00103 const TPoint& support() const;
00104 TPoint& support();
00105 const TVector& direction() const;
00106 void setDirection(const TVector& iDirection);
00107 void lookAt(const TPoint& iLookAt);
00108
00109 const TVector reject(const TPoint& iPoint) const;
00110 const TVector reject(const TVector& iVector) const;
00111 const TPoint project(const TPoint& iPoint) const;
00112 const TVector project(const TVector& iVector) const;
00113 const TPoint reflect(const TPoint& iPoint) const;
00114 const TVector reflect(const TVector& iVector) const;
00115
00116 const TPoint point(TParam iT) const;
00117 const TValue t(const TPoint& iPoint) const;
00118
00119 void flip();
00120 const bool isValid() const;
00121
00122 private:
00123
00124 TPoint support_;
00125 TVector direction_;
00126 };
00127
00128
00129
00130 template<typename T, class NP>
00131 std::ostream& operator<<(std::ostream& oOStream, const Line3D<T, NP>& iB);
00132
00133 template<typename T, class NP>
00134 io::XmlOStream& operator<<(io::XmlOStream& oOStream, const Line3D<T, NP>& iB);
00135
00136
00137 }
00138
00139 }
00140
00141 #include "line_3d.inl"
00142
00143 #endif