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