]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/movetool.cpp
Move gauge to TrackAppearance
[r2c2.git] / source / designer / movetool.cpp
index 29d2857faab119edc68603746e58849b64b32173..57f6216507e63c55a3d2157eaf519d6877b3f6ef 100644 (file)
@@ -6,16 +6,20 @@ using namespace std;
 using namespace Msp;
 using namespace R2C2;
 
-MoveTool::MoveTool(Designer &d, Input::Mouse &m, const set<Object *> &o):
-       Manipulator(d, m, o),
+MoveTool::MoveTool(Designer &d, Input::Keyboard &k, Input::Mouse &m, const set<Object *> &o):
+       Manipulator(d, k, m, o),
        origin(ground_pointer)
 {
        for(ObjectArray::iterator i=objects.begin(); i!=objects.end(); ++i)
        {
                unsigned nls = i->object->get_n_link_slots();
-               for(unsigned j=0; j<nls; ++j)
+               unsigned nsn = i->object->get_n_snap_nodes();
+               unsigned j;
+               for(j=0; j<nls; ++j)
                        if(!o.count(i->object->get_link(j)))
                                boundaries.push_back(Boundary(&*i, j));
+               for(; j<nsn; ++j)
+                       boundaries.push_back(Boundary(&*i, j));
        }
 
        snap_targets = designer.get_layout().get_all<Object>();
@@ -32,13 +36,12 @@ void MoveTool::pointer_motion()
                i->object->set_rotation(i->original_rotation);
        }
 
-       float limit = max(designer.get_layout().get_catalogue().get_gauge(),
-               designer.get_camera_controller().get_view_scale()/100.0f);
+       float limit = designer.get_camera_controller().get_view_scale()/100.0f;
        MObject *snapped = 0;
        for(list<Boundary>::iterator i=boundaries.begin(); (!snapped && i!=boundaries.end()); ++i)
        {
                for(set<Object *>::const_iterator j=snap_targets.begin(); (!snapped && j!=snap_targets.end()); ++j)
-                       if((*i)->snap_to(**j, limit))
+                       if((*i)->snap_to(**j, (i->limit>0 ? max(i->limit, limit) : limit)))
                                snapped = i->object;
        }
 
@@ -61,5 +64,9 @@ void MoveTool::pointer_motion()
 
 MoveTool::Boundary::Boundary(MObject *o, unsigned i):
        object(o),
-       index(i)
-{ }
+       index(i),
+       limit(-1)
+{
+       if(Track *track = dynamic_cast<Track *>(object->object))
+               limit = track->get_type().get_appearance().get_gauge();
+}