X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fmovetool.cpp;h=57f6216507e63c55a3d2157eaf519d6877b3f6ef;hb=5929b101ee38b5668b328e7b1eac4bf49c912412;hp=29d2857faab119edc68603746e58849b64b32173;hpb=0c0a16e5f0f41efddb6f3ff920e54a5a11e1841d;p=r2c2.git diff --git a/source/designer/movetool.cpp b/source/designer/movetool.cpp index 29d2857..57f6216 100644 --- a/source/designer/movetool.cpp +++ b/source/designer/movetool.cpp @@ -6,16 +6,20 @@ using namespace std; using namespace Msp; using namespace R2C2; -MoveTool::MoveTool(Designer &d, Input::Mouse &m, const set &o): - Manipulator(d, m, o), +MoveTool::MoveTool(Designer &d, Input::Keyboard &k, Input::Mouse &m, const set &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; jobject->get_n_snap_nodes(); + unsigned j; + for(j=0; jobject->get_link(j))) boundaries.push_back(Boundary(&*i, j)); + for(; j(); @@ -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::iterator i=boundaries.begin(); (!snapped && i!=boundaries.end()); ++i) { for(set::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(object->object)) + limit = track->get_type().get_appearance().get_gauge(); +}