Go to the documentation of this file.00001
00002 #ifndef vsol_box_3d_h_
00003 #define vsol_box_3d_h_
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 #include <vsol/vsol_box.h>
00038 #include <vsl/vsl_binary_io.h>
00039 #include <vul/vul_timestamp.h>
00040 #include <vbl/vbl_ref_count.h>
00041 #include <vbl/vbl_bounding_box.h>
00042 #include "vsol_box_3d_sptr.h"
00043 #include <vcl_iostream.h>
00044
00045
00046
00047 class vsol_box_3d : public vsol_box, public vbl_ref_count , public vul_timestamp
00048 {
00049 protected:
00050 vbl_bounding_box<double,3> box_;
00051
00052 public:
00053
00054 vsol_box_3d() {}
00055
00056 vsol_box_3d(vsol_box_3d const& b)
00057 : vsol_box(), vbl_ref_count(), vul_timestamp(), box_(b.box_) {}
00058
00059 vsol_box_3d(vbl_bounding_box<double,3> const &b) : box_(b) {}
00060
00061 ~vsol_box_3d() {}
00062
00063
00064
00065 double get_min_x() const;
00066 double get_max_x() const;
00067
00068 double get_min_y() const;
00069 double get_max_y() const;
00070
00071 double get_min_z() const;
00072 double get_max_z() const;
00073
00074 double width() const { return get_max_x() - get_min_x(); }
00075 double height() const { return get_max_y() - get_min_y(); }
00076 double depth() const { return get_max_z() - get_min_z(); }
00077 double volume() const { return width() * height() * depth(); }
00078
00079
00080 void add_point(double x, double y, double z);
00081
00082
00083
00084 void grow_minmax_bounds(vsol_box_3d_sptr const& comp_box);
00085
00086
00087 bool operator< (vsol_box_3d& box) const;
00088
00089
00090 bool near_equal(vsol_box_3d const& box, float tolerance) const;
00091
00092
00093 void reset_bounds();
00094
00095
00096
00097
00098 void b_write(vsl_b_ostream &os) const;
00099
00100
00101 void b_read(vsl_b_istream &is);
00102
00103
00104 short version() const;
00105
00106
00107 void print_summary(vcl_ostream &os) const;
00108
00109
00110 virtual vcl_string is_a() const { return vcl_string("vsol_box_3d"); }
00111
00112
00113 virtual bool is_class(const vcl_string& cls) const { return cls==is_a(); }
00114 };
00115
00116
00117 vcl_ostream& operator<<(vcl_ostream& s, vsol_box_3d const& p);
00118
00119
00120 void vsl_b_write(vsl_b_ostream &os, vsol_box_3d_sptr const& p);
00121
00122
00123 void vsl_b_read(vsl_b_istream &is, vsol_box_3d_sptr &p);
00124
00125
00126
00127 inline void vsl_print_summary(vcl_ostream& os, vsol_box_3d_sptr const& b)
00128 {
00129 os << *b;
00130 }
00131
00132 #endif // vsol_box_3d_h_