00001
00002 #ifndef vsol_box_2d_h_
00003 #define vsol_box_2d_h_
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <vsol/vsol_box.h>
00022 #include <vsl/vsl_binary_io.h>
00023 #include <vul/vul_timestamp.h>
00024 #include <vbl/vbl_ref_count.h>
00025 #include <vbl/vbl_bounding_box.h>
00026 #include "vsol_box_2d_sptr.h"
00027
00028
00029
00030 class vsol_box_2d : public vsol_box, public vbl_ref_count, public vul_timestamp
00031 {
00032 protected:
00033 vbl_bounding_box<double,2> box_;
00034
00035 public:
00036
00037 vsol_box_2d() {}
00038
00039 vsol_box_2d(vsol_box_2d const &b)
00040 : vsol_box(), vbl_ref_count(), vul_timestamp(), box_(b.box_) {}
00041
00042 vsol_box_2d(vbl_bounding_box<double,2> const &b) : box_(b) {}
00043
00044 ~vsol_box_2d() {}
00045
00046
00047 bool empty() const { return box_.empty(); }
00048 double get_min_x() const;
00049 double get_max_x() const;
00050
00051 double get_min_y() const;
00052 double get_max_y() const;
00053
00054 double width() const { return get_max_x() - get_min_x(); }
00055 double height()const { return get_max_y() - get_min_y(); }
00056 double area() const { return width() * height(); }
00057
00058
00059 void add_point(double x, double y);
00060
00061
00062
00063 void grow_minmax_bounds(vsol_box_2d_sptr const& comp_box);
00064
00065
00066 bool operator< (vsol_box_2d& box) const;
00067
00068
00069 bool near_equal(vsol_box_2d const& box, float tolerance) const;
00070
00071
00072 void reset_bounds();
00073
00074
00075 bool inside(double x, double y) const { return box_.inside(x, y); }
00076
00077
00078
00079
00080 void b_write(vsl_b_ostream &os) const;
00081
00082
00083 void b_read(vsl_b_istream &is);
00084
00085
00086 short version() const;
00087
00088
00089 void print_summary(vcl_ostream &os) const;
00090
00091
00092 virtual vcl_string is_a() const { return vcl_string("vsol_box_2d"); }
00093
00094
00095 virtual bool is_class(const vcl_string& cls) const { return cls==is_a(); }
00096 };
00097
00098
00099 vcl_ostream& operator<<(vcl_ostream& s, vsol_box_2d const& p);
00100
00101
00102 void vsl_b_write(vsl_b_ostream &os, vsol_box_2d_sptr const& p);
00103
00104
00105 void vsl_b_read(vsl_b_istream &is, vsol_box_2d_sptr &p);
00106
00107
00108
00109 inline void vsl_print_summary(vcl_ostream& os, vsol_box_2d_sptr const& b)
00110 {
00111 os << *b;
00112 }
00113
00114 #endif // vsol_box_2d_h_