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 #ifndef OLENA_CORE_POINT3D_HH
00029 # define OLENA_CORE_POINT3D_HH
00030
00031 # include <ntg/core/predecls.hh>
00032 # include <oln/core/coord.hh>
00033 # include <oln/core/point2d.hh>
00034 # include <iostream>
00035
00036
00037 namespace oln {
00038
00039
00040
00041 class dpoint3d;
00042 class point3d;
00043
00049 template<>
00050 struct point_traits<point3d>: public point_traits<abstract::point<point3d> >
00051 {
00052 enum { dim = 3 };
00053 typedef dpoint3d dpoint_type;
00054 };
00055
00067 class point3d : public abstract::point< point3d >
00068 {
00069 public:
00070
00071 typedef abstract::point< point3d > super_type;
00072 typedef point_traits<point3d>::dpoint_type dpoint_type;
00073
00074 friend class abstract::point< point3d >;
00075
00076
00077 point3d();
00078
00080
00081 point3d(coord slice, coord row, coord col);
00082
00084
00085 point3d(const point2d& p, coord slice);
00086
00088
00089 coord
00090 slice() const;
00091
00093
00094 coord&
00095 slice();
00096
00098
00099 coord
00100 row() const;
00101
00103
00104 coord&
00105 row();
00106
00108
00109 coord
00110 col() const;
00111
00113
00114 coord&
00115 col();
00116
00117 static std::string
00118 name()
00119 {
00120 return "point3d";
00121 }
00122
00123 protected:
00124
00129 point3d
00130 plus_dp(const dpoint3d& dp) const;
00131
00136 point3d
00137 minus_dp(const dpoint3d& dp) const;
00138
00143 point3d&
00144 plus_assign_dp(const dpoint3d& dp);
00145
00150 point3d&
00151 minus_assign_dp(const dpoint3d& dp);
00152
00157 dpoint3d
00158 minus_p(const point3d& p) const;
00159
00164 point3d
00165 minus() const;
00166
00167 };
00168
00169 namespace internal
00170 {
00171
00177 template<>
00178 struct default_less<point3d> : public default_less<point3d::super_type>
00179 {
00180 };
00181
00182 }
00183
00184 }
00185
00187
00188 inline std::ostream&
00189 operator<<(std::ostream& o, const oln::point3d& p);
00190
00191 # include <oln/core/point3d.hxx>
00192
00193 #endif // ! OLENA_CORE_POINT3D_HH