Go to the documentation of this file.00001 
00002 #include "vsol_point_2d.h"
00003 
00004 
00005 #include <vgl/vgl_distance.h>
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 vsol_point_2d::~vsol_point_2d()
00015 {
00016 }
00017 
00018 
00019 
00020 
00021 
00022 vsol_spatial_object_2d* vsol_point_2d::clone(void) const
00023 {
00024   return new vsol_point_2d(*this);
00025 }
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 bool vsol_point_2d::operator==(const vsol_point_2d &other) const
00035 {
00036   return this==&other || p_==other.p_;
00037 }
00038 
00039 
00040 
00041 bool vsol_point_2d::operator==(const vsol_spatial_object_2d& obj) const
00042 {
00043   return obj.cast_to_point() && *this == *obj.cast_to_point();
00044 }
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 vsol_spatial_object_2d::vsol_spatial_object_2d_type
00054 vsol_point_2d::spatial_type(void) const
00055 {
00056   return POINT;
00057 }
00058 
00059 
00060 
00061 
00062 void vsol_point_2d::compute_bounding_box(void) const
00063 {
00064   set_bounding_box(p_.x(),p_.y());
00065 }
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074 void vsol_point_2d::set_x(const double new_x)
00075 {
00076   p_.set(new_x, p_.y());
00077 }
00078 
00079 
00080 
00081 
00082 void vsol_point_2d::set_y(const double new_y)
00083 {
00084   p_.set(p_.x(), new_y);
00085 }
00086 
00087 
00088 
00089 
00090 
00091 
00092 
00093 
00094 double vsol_point_2d::distance(const vsol_point_2d &other) const
00095 {
00096   return vgl_distance(p_,other.p_);
00097 }
00098 
00099 double vsol_point_2d::distance(vsol_point_2d_sptr other) const
00100 {
00101   return vgl_distance(p_,other->p_);
00102 }
00103 
00104 
00105 
00106 
00107 vsol_point_2d_sptr vsol_point_2d::middle(const vsol_point_2d &other) const
00108 {
00109   return new vsol_point_2d(midpoint(p_,other.p_));
00110 }
00111 
00112 
00113 
00114 
00115 void vsol_point_2d::add_vector(vgl_vector_2d<double> const& v)
00116 {
00117   p_ += v;
00118 }
00119 
00120 
00121 
00122 
00123 vsol_point_2d_sptr
00124 vsol_point_2d::plus_vector(vgl_vector_2d<double> const& v) const
00125 {
00126   return new vsol_point_2d(p_ + v);
00127 }
00128 
00129 
00130 
00131 
00132 vgl_vector_2d<double>
00133 vsol_point_2d::to_vector(const vsol_point_2d &other) const
00134 {
00135   return vgl_vector_2d<double>(other.x() - x(), other.y() - y());
00136 }
00137 
00138 
00139 
00140 
00141 
00142 
00143 void vsol_point_2d::b_write(vsl_b_ostream &os) const
00144 {
00145   vsl_b_write(os, version());
00146   vsol_spatial_object_2d::b_write(os);
00147   vsl_b_write(os, p_.x());
00148   vsl_b_write(os, p_.y());
00149 }
00150 
00151 
00152 void vsol_point_2d::b_read(vsl_b_istream &is)
00153 {
00154   if (!is)
00155     return;
00156   short ver;
00157   vsl_b_read(is, ver);
00158   switch (ver)
00159   {
00160    case 1:
00161     vsol_spatial_object_2d::b_read(is);
00162     { double x=0, y=0;
00163       vsl_b_read(is, x);
00164       vsl_b_read(is, y);
00165       this->p_.set(x, y);
00166     }
00167     break;
00168 
00169    default:
00170     vcl_cerr << "I/O ERROR: vsol_point_2d::b_read(vsl_b_istream&)\n"
00171              << "           Unknown version number "<< ver << '\n';
00172     is.is().clear(vcl_ios::badbit); 
00173     return;
00174   }
00175 }
00176 
00177 
00178 short vsol_point_2d::version() const
00179 {
00180   return 1;
00181 }
00182 
00183 
00184 void vsol_point_2d::print_summary(vcl_ostream &os) const
00185 {
00186   os << *this;
00187 }
00188 
00189 
00190 void
00191 vsl_b_write(vsl_b_ostream &os, const vsol_point_2d* p)
00192 {
00193   if (p==0) {
00194     vsl_b_write(os, false); 
00195   }
00196   else{
00197     vsl_b_write(os,true); 
00198     p->b_write(os);
00199   }
00200 }
00201 
00202 
00203 
00204 void
00205 vsl_b_read(vsl_b_istream &is, vsol_point_2d* &p)
00206 {
00207   delete p;
00208   bool not_null_ptr;
00209   vsl_b_read(is, not_null_ptr);
00210   if (not_null_ptr) {
00211     p = new vsol_point_2d();
00212     p->b_read(is);
00213   }
00214   else
00215     p = 0;
00216 }