-void Manipulator::update_tracks()
-{
- Point minp, maxp;
- for(vector<MTrack>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
- {
- unsigned n_endpoints = i->track->get_type().get_endpoints().size();
- for(unsigned j=0; j<n_endpoints; ++j)
- {
- Point p = i->track->get_endpoint_position(j);
- if(i==tracks.begin() && j==0)
- minp = maxp = p;
- else
- {
- minp.x = min(minp.x, p.x);
- maxp.x = max(maxp.x, p.x);
- minp.y = min(minp.y, p.y);
- maxp.y = max(maxp.y, p.y);
- minp.z = min(minp.z, p.z);
- }
- }
- }
-
- center = Point((minp.x+maxp.x)/2, (minp.y+maxp.y)/2, minp.z);
- for(vector<MTrack>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
- {
- const Point &tp = i->track->get_position();
- i->pos = Point(tp.x-center.x, tp.y-center.y, tp.z-center.z);
- i->rot = i->track->get_rotation();
- }
-}
-
-void Manipulator::update_neighbors()
-{
- neighbors.clear();
- for(vector<MTrack>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
- {
- const vector<Track *> &links = i->track->get_links();
- for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
- {
- if(!*j)
- continue;
- if(neighbors.count(*j))
- continue;
-
- bool ok = true;
- for(vector<MTrack>::iterator k=tracks.begin(); (k!=tracks.end() && ok); ++k)
- ok = (k->track!=*j);
-
- if(ok)
- neighbors.insert(*j);
- }
- }
-}
-
-void Manipulator::set_slope(TrackOrder &track, float z, float dz)
-{
- const Point &p = track.track->get_position();
- if(track.rev)
- {
- track.track->set_position(Point(p.x, p.y, z+dz));
- track.track->set_slope(-dz);
- }
- else
- {
- track.track->set_position(Point(p.x, p.y, z));
- track.track->set_slope(dz);
- }
-}