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