]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/manipulator.h
Add framework for generating simple meshes for vehicles
[r2c2.git] / source / designer / manipulator.h
index 2ed49fb1a754bf8a2f1caf6e336896a78aafc7be..55d2425ad8bfdb98596bd33877da65eaa25e18a8 100644 (file)
@@ -9,7 +9,6 @@ Distributed under the GPL
 #define MANIPULATOR_H_
 
 #include <sigc++/sigc++.h>
-#include "3d/track.h"
 
 class Designer;
 class Selection;
@@ -22,7 +21,8 @@ private:
                NONE,
                MOVE,
                ROTATE,
-               ELEVATE
+               ELEVATE,
+               EXTEND
        };
 
        struct MTrack
@@ -42,28 +42,17 @@ private:
                TrackOrder(Marklin::Track *t, bool r): track(t), rev(r) { }
        };
 
-       struct TrackWrap
-       {
-               Marklin::Point pos;
-               float rot;
-               float width;
-               float height;
-       };
-
 public:
        sigc::signal<void, const std::string &> signal_status;
        sigc::signal<void, bool> signal_done;
 
 private:
        Designer &designer;
+       Msp::Graphics::EventSource &event_source;
        Selection &selection;
        std::vector<MTrack> tracks;
        Marklin::Point center;
 
-       std::list<TrackWrap> wrap;
-       Marklin::Point wrap_pos;
-       float wrap_rot;
-
        Marklin::Point gpointer;
        int pointer_y;
        Mode mode;
@@ -72,25 +61,28 @@ private:
        float rot_origin;
        int elev_origin;
        std::set<Marklin::Track *> neighbors;
+       std::vector<Marklin::Track *> extend_tracks;
 
 public:
-       Manipulator(Designer &, Selection &);
+       Manipulator(Designer &, Msp::Graphics::EventSource &, Selection &);
 
        void start_move();
        void start_rotate();
        void start_elevate();
+       void start_extend();
        void duplicate();
        void flatten();
        void even_slope(bool =false);
+       void connect();
        void cancel();
-       void button_press(int, int, float, float, unsigned);
-       void pointer_motion(int, int, float, float);
-       void render();
 private:
+       void button_press(int, int, unsigned, unsigned);
+       void pointer_motion(int, int);
        void selection_changed();
-       void update_wrap();
+       void update_tracks();
        void update_neighbors();
        void set_slope(TrackOrder &, float, float);
+       std::vector<Marklin::Track *> create_straight(const Marklin::Point &, float, float, float);
 };
 
 #endif