X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fmanipulator.h;h=7b3836649d5cfd5a1a6e7c15fea920bde2b6399c;hb=03a22611772265b539f826f1f8bc482e71ca4a99;hp=cb4759ac7ad1a671e757b598cc67945199ccbba0;hpb=f950f5a77714a155e57c868101911e181a617818;p=r2c2.git diff --git a/source/designer/manipulator.h b/source/designer/manipulator.h index cb4759a..7b38366 100644 --- a/source/designer/manipulator.h +++ b/source/designer/manipulator.h @@ -1,81 +1,40 @@ #ifndef MANIPULATOR_H_ #define MANIPULATOR_H_ -#include +#include +#include +#include "libr2c2/object.h" +#include "tool.h" -class Designer; class Selection; -class Manipulator +class Manipulator: public Tool { -private: - enum Mode - { - NONE, - MOVE, - ROTATE, - ELEVATE, - EXTEND - }; - +protected: struct MObject { R2C2::Object *object; - R2C2::Vector pos; - float rot; + R2C2::Vector original_position; + R2C2::Angle original_rotation; MObject(R2C2::Object *); }; - struct TrackOrder - { - R2C2::Track *track; - bool rev; - - TrackOrder(R2C2::Track *t, bool r): track(t), rev(r) { } - }; - public: - sigc::signal signal_status; sigc::signal signal_done; -private: - Designer &designer; - Msp::Input::Mouse &mouse; - Selection &selection; - std::vector objects; - R2C2::Vector center; +protected: + typedef std::vector ObjectArray; - R2C2::Vector pointer; - R2C2::Vector gpointer; - Mode mode; - R2C2::Vector move_origin; - float angle; - float rot_origin; - float elev_origin; - std::set neighbors; - std::vector extend_tracks; + ObjectArray objects; + R2C2::Vector center; public: - Manipulator(Designer &, Msp::Input::Mouse &, Selection &); + Manipulator(Designer &, Msp::Input::Keyboard &, Msp::Input::Mouse &, const std::set &); + virtual ~Manipulator(); - void start_move(); - void start_rotate(); - void start_elevate(); - bool start_extend(); - void duplicate(); - void flatten(); - void even_slope(bool =false); - void connect(); - void cancel(); private: - void button_press(unsigned); - void axis_motion(unsigned, float, float); - void selection_changed(); - void update_objects(); - void update_neighbors(); - void set_slope(TrackOrder &, float, float); - std::vector create_straight(const R2C2::Vector &, float, float, float); + virtual void finish(); }; #endif