]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/measure.h
Split the Manipulator class into several Tools
[r2c2.git] / source / designer / measure.h
index c5696984fc32aba12b20ca37cfae8103efddff65..e5f109181e379d92927f352ea06f20dd0e4a3dfa 100644 (file)
@@ -4,41 +4,31 @@
 #include <sigc++/sigc++.h>
 #include <msp/gl/renderable.h>
 #include "libr2c2/geometry.h"
+#include "tool.h"
 
 class Designer;
 
-class Measure: public Msp::GL::Renderable
+class Measure: public Tool, public Msp::GL::Renderable
 {
 private:
-       enum State
-       {
-               NONE,
-               STARTING,
-               ACTIVE
-       };
-
-public:
-       sigc::signal<void> signal_done;
-       sigc::signal<void> signal_changed;
-
-private:
-       Designer &designer;
-       R2C2::Vector pointer;
-       R2C2::Snap ssnap;
+       R2C2::Snap start;
+       bool start_pinned;
        float par_dist;
        float perp_dist;
        R2C2::Angle adiff;
-       State state;
        Msp::GL::Mesh mesh;
 
 public:
-       Measure(Designer &);
+       Measure(Designer &, Msp::Input::Mouse &, const std::set<R2C2::Object *> &);
+       virtual ~Measure();
+
        float get_parallel_distance() const { return par_dist; }
        float get_perpendicular_distance() const { return perp_dist; }
        const R2C2::Angle &get_angle_difference() const { return adiff; }
-       void start();
-       void button_press(float, float, unsigned);
-       void pointer_motion(float, float);
+
+       virtual void button_press(unsigned);
+       virtual void axis_motion(unsigned, float, float);
+
        virtual void render(Msp::GL::Renderer &, const Msp::GL::Tag &) const;
 private:
        void update_mesh();