]> git.tdb.fi Git - r2c2.git/blob - source/designer/measure.h
Convert Measure to a Renderable
[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::Vector spoint;
27         float sdir;
28         float par_dist;
29         float perp_dist;
30         float adiff;
31         State state;
32         Msp::GL::Mesh mesh;
33
34 public:
35         Measure(Designer &);
36         float get_parallel_distance() const { return par_dist; }
37         float get_perpendicular_distance() const { return perp_dist; }
38         float get_angle_difference() const { return adiff; }
39         void start();
40         void button_press(float, float, unsigned);
41         void pointer_motion(float, float);
42         virtual void render(Msp::GL::Renderer &, const Msp::GL::Tag &) const;
43 private:
44         void update_mesh();
45         void snap_to_tracks(R2C2::Vector &, float &);
46 };
47
48 #endif