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