]> git.tdb.fi Git - r2c2.git/blob - source/designer/measure.h
022c3140639427367b6c4d1d86b42655f1aacfa1
[r2c2.git] / source / designer / measure.h
1 #ifndef MEASURE_H_
2 #define MEASURE_H_
3
4 #include <sigc++/sigc++.h>
5 #include <msp/gl/renderable.h>
6
7 class Designer;
8
9 class Measure: public Msp::GL::Renderable
10 {
11 private:
12         enum State
13         {
14                 NONE,
15                 STARTING,
16                 ACTIVE
17         };
18
19 public:
20         sigc::signal<void> signal_done;
21         sigc::signal<void> signal_changed;
22
23 private:
24         Designer &designer;
25         R2C2::Vector pointer;
26         R2C2::Snap ssnap;
27         float par_dist;
28         float perp_dist;
29         float adiff;
30         State state;
31         Msp::GL::Mesh mesh;
32
33 public:
34         Measure(Designer &);
35         float get_parallel_distance() const { return par_dist; }
36         float get_perpendicular_distance() const { return perp_dist; }
37         float get_angle_difference() const { return adiff; }
38         void start();
39         void button_press(float, float, unsigned);
40         void pointer_motion(float, float);
41         virtual void render(Msp::GL::Renderer &, const Msp::GL::Tag &) const;
42 private:
43         void update_mesh();
44         void snap_to_tracks(R2C2::Snap &);
45 };
46
47 #endif