X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fmanipulator.h;h=7b3836649d5cfd5a1a6e7c15fea920bde2b6399c;hb=03a22611772265b539f826f1f8bc482e71ca4a99;hp=3a8882e8f97f686405651774aa478c7b1289a237;hpb=6c61179fe09af2f5366d50f10aadbf5f83438087;p=r2c2.git diff --git a/source/designer/manipulator.h b/source/designer/manipulator.h index 3a8882e..7b38366 100644 --- a/source/designer/manipulator.h +++ b/source/designer/manipulator.h @@ -1,89 +1,40 @@ #ifndef MANIPULATOR_H_ #define MANIPULATOR_H_ -#include -#include "3d/track.h" +#include +#include +#include "libr2c2/object.h" +#include "tool.h" -class Designer; class Selection; -class Manipulator +class Manipulator: public Tool { -public: - sigc::signal signal_status; - sigc::signal signal_done; - - Manipulator(Designer &); - void set_selection(Selection *); - void start_move(); - void start_rotate(); - void start_elevate(); - void duplicate(); - void flatten(); - void even_slope(bool =false); - void cancel(); - void button_press(int, int, float, float, unsigned); - void pointer_motion(int, int, float, float); - void render(); -private: - enum Mode +protected: + struct MObject { - NONE, - MOVE, - ROTATE, - ELEVATE - }; + R2C2::Object *object; + R2C2::Vector original_position; + R2C2::Angle original_rotation; - struct MTrack - { - Marklin::Track *track; - Marklin::Point pos; - float rot; - - MTrack(Marklin::Track *); + MObject(R2C2::Object *); }; - typedef std::list MTrackSeq; - - struct TrackOrder - { - Marklin::Track *track; - bool rev; - TrackOrder(Marklin::Track *t, bool r): track(t), rev(r) { } - }; - typedef std::list TrackOrderSeq; - - struct TrackWrap - { - Marklin::Point pos; - float rot; - float width; - float height; - }; +public: + sigc::signal signal_done; - Designer &designer; - Selection *selection; - MTrackSeq tracks; - Marklin::Point center; +protected: + typedef std::vector ObjectArray; - std::list wrap; - Marklin::Point wrap_pos; - float wrap_rot; + ObjectArray objects; + R2C2::Vector center; - Marklin::Point gpointer; - int pointer_y; - Mode mode; - Marklin::Point move_origin; - float angle; - float rot_origin; - int elev_origin; - Marklin::TrackSeq neighbors; - sigc::connection selection_changed_conn; +public: + Manipulator(Designer &, Msp::Input::Keyboard &, Msp::Input::Mouse &, const std::set &); + virtual ~Manipulator(); - void selection_changed(); - void update_wrap(); - void update_neighbors(); - void set_slope(TrackOrder &, float, float); +private: + virtual void finish(); }; #endif