1 #include "libr2c2/layout.h"
9 MoveTool::MoveTool(Designer &d, Input::Mouse &m, const set<Object *> &o):
11 origin(ground_pointer)
14 void MoveTool::axis_motion(unsigned axis, float value, float rel)
16 Manipulator::axis_motion(axis, value, rel);
18 Vector offset = center+ground_pointer-origin;
19 for(vector<MObject>::iterator i=objects.begin(); i!=objects.end(); ++i)
21 i->object->set_position(offset+i->original_position);
22 i->object->set_rotation(i->original_rotation);
25 const set<Track *> <racks = designer.get_layout().get_all<Track>();
26 float limit = max(designer.get_layout().get_catalogue().get_gauge(),
27 designer.get_camera_controller().get_view_scale()/100.0f);
29 for(set<Track *>::const_iterator i=ltracks.begin(); (i!=ltracks.end() && !snapped); ++i)
32 for(ObjectArray::iterator j=objects.begin(); (j!=objects.end() && ok); ++j)
37 for(ObjectArray::iterator j=objects.begin(); (j!=objects.end() && !snapped); ++j)
38 if(j->object->snap_to(**i, limit))
44 Angle da = snapped->object->get_rotation()-snapped->original_rotation;
45 Transform trans = Transform::rotation(da, Vector(0, 0, 1));
46 const Vector &sp = snapped->object->get_position();
47 for(ObjectArray::iterator i=objects.begin(); i!=objects.end(); ++i)
52 i->object->set_position(sp+trans.transform(i->original_position-snapped->original_position));
53 i->object->set_rotation(i->original_rotation+da);