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>();
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;
}
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_gauge();
+}