1 #ifndef bwm_observable_h_ 2 #define bwm_observable_h_ 3 //: 4 // \file 5 6 #include <string> 7 #include <iostream> 8 #include <map> 9 #include <vbl/vbl_ref_count.h> 10 11 #include "bwm_observable_sptr.h" 12 13 #ifdef _MSC_VER 14 # include <vcl_msvc_warnings.h> 15 #endif 16 17 #include <vgl/vgl_point_3d.h> 18 #include <vgl/vgl_vector_3d.h> 19 #include <vgl/vgl_plane_3d.h> 20 #include <vgl/vgl_box_3d.h> 21 #include <vgl/algo/vgl_h_matrix_3d.h> 22 23 #include <vgui/vgui_observable.h> 24 25 #include <vsol/vsol_polygon_3d_sptr.h> 26 #include <vsol/vsol_point_3d_sptr.h> 27 #include <vsol/vsol_line_3d_sptr.h> 28 #include <vpgl/vpgl_lvcs.h> 29 30 31 class bwm_observable : public vgui_observable, public vbl_ref_count 32 { 33 public: 34 35 // constructor bwm_observable()36 bwm_observable(): path_("") {} 37 bwm_observable(const bwm_observable &)38 bwm_observable(const bwm_observable&) : vgui_observable(), vbl_ref_count() {} 39 ~bwm_observable()40 virtual ~bwm_observable() {} 41 type_name()42 virtual std::string type_name() const { return "bwm_observable"; } 43 44 virtual int obj_type() const=0; 45 46 // removes the object from 3D scene by notifying the observers of deletion 47 virtual void remove()=0; 48 49 void virtual set_object(vsol_polygon_3d_sptr poly3d)=0; 50 51 virtual vgl_box_3d<double> bounding_box()=0; 52 53 virtual unsigned num_faces() const=0; 54 55 virtual void translate(vgl_vector_3d<double> T)=0; 56 57 virtual bwm_observable_sptr transform(vgl_h_matrix_3d<double> T_)=0; 58 59 virtual void send_update()=0; 60 61 virtual void extrude(int face_id)=0; 62 63 virtual void extrude(int face_id, double dist)=0; 64 65 virtual vsol_polygon_3d_sptr extract_face(unsigned i)=0; 66 67 virtual vsol_polygon_3d_sptr extract_bottom_face()=0; 68 69 virtual vgl_plane_3d<double> get_plane(unsigned face_id)=0; 70 71 virtual std::map<int, vsol_polygon_3d_sptr> extract_faces()=0; 72 73 virtual std::map<int, vsol_line_3d_sptr> extract_edges()=0; 74 75 virtual std::vector<vsol_point_3d_sptr> extract_vertices()=0; 76 77 virtual std::map<int, vsol_polygon_3d_sptr> extract_inner_faces(int face_id)=0; 78 79 virtual void divide_face(unsigned face_id, 80 vgl_point_3d<double> l1, vgl_point_3d<double> l2, 81 vgl_point_3d<double> p1, vgl_point_3d<double> l3, 82 vgl_point_3d<double> l4, vgl_point_3d<double> p2)=0; 83 84 virtual void move_normal_dir(double dist)=0; 85 virtual void move_extr_face(double dist)=0; 86 virtual int find_closest_face(vgl_point_3d<double> point)=0; 87 88 virtual void attach_inner_face(unsigned face_id, vsol_polygon_3d_sptr poly)=0; 89 90 virtual void create_interior()=0; 91 last_translation()92 vgl_vector_3d<double> last_translation() const { return last_translation_; } 93 94 virtual void label_roof(unsigned face_id)=0; 95 96 virtual void label_wall(unsigned face_id)=0; 97 98 virtual bwm_observable_sptr global_to_local(vpgl_lvcs* lvcs, double& min_z)=0; 99 100 virtual void save(const char* filename, vpgl_lvcs* lvcs)=0; 101 102 virtual void save(const char* filename)=0; 103 path()104 std::string path() const { return path_; } set_path(std::string const & path)105 void set_path(std::string const& path) { path_=path; } 106 site()107 std::string site() const { return site_; } set_site(std::string const & site)108 void set_site(std::string const& site) { site_=site; } 109 110 protected: 111 //: the observable file path 112 std::string path_; 113 //: the observable site name 114 std::string site_; 115 116 vgl_vector_3d<double> last_translation_; 117 }; 118 119 #endif 120