X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fmanipulator.h;h=1c46af6b6fd4c4eeae53bd197c87a198723f9acc;hb=59bae8acd679127602cf35d22bcd37e316a5a056;hp=9e17384e4ee39b90c178d8e55c402e81bc9ec601;hpb=52cbe8d99669f843f8f75c51128e2748584dd03a;p=r2c2.git diff --git a/source/designer/manipulator.h b/source/designer/manipulator.h index 9e17384..1c46af6 100644 --- a/source/designer/manipulator.h +++ b/source/designer/manipulator.h @@ -2,86 +2,81 @@ #define MANIPULATOR_H_ #include -#include "3d/track.h" +#include "libr2c2/geometry.h" class Designer; class Selection; class Manipulator { -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 { NONE, MOVE, ROTATE, - ELEVATE + ELEVATE, + EXTEND }; - struct MTrack + struct MObject { - Marklin::Track *track; - Marklin::Point pos; - float rot; + R2C2::Object *object; + R2C2::Vector pos; + R2C2::Angle rot; - MTrack(Marklin::Track *); + MObject(R2C2::Object *); }; struct TrackOrder { - Marklin::Track *track; + R2C2::Track *track; bool rev; - TrackOrder(Marklin::Track *t, bool r): track(t), rev(r) { } + TrackOrder(R2C2::Track *t, bool r): track(t), rev(r) { } }; - struct TrackWrap - { - Marklin::Point pos; - float rot; - float width; - float height; - }; +public: + sigc::signal signal_status; + sigc::signal signal_done; - Designer &designer; - Selection *selection; - std::vector tracks; - Marklin::Point center; +private: + Designer &designer; + Msp::Input::Mouse &mouse; + Selection &selection; + std::vector objects; + R2C2::Vector center; - std::list wrap; - Marklin::Point wrap_pos; - float wrap_rot; + R2C2::Vector pointer; + R2C2::Vector gpointer; + Mode mode; + R2C2::Vector move_origin; + R2C2::Angle angle; + R2C2::Angle rot_origin; + float elev_origin; + std::set neighbors; + std::vector extend_tracks; - Marklin::Point gpointer; - int pointer_y; - Mode mode; - Marklin::Point move_origin; - float angle; - float rot_origin; - int elev_origin; - std::set neighbors; - sigc::connection selection_changed_conn; +public: + Manipulator(Designer &, Msp::Input::Mouse &, Selection &); + 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_wrap(); + void update_objects(); void update_neighbors(); void set_slope(TrackOrder &, float, float); + std::vector create_straight(const R2C2::Vector &, const R2C2::Angle &, float, float); }; #endif