- Point minp;
- Point maxp;
-
- const Layout3D::TrackMap &tracks = designer.get_layout_3d().get_tracks();
- for(Layout3D::TrackMap::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
- {
- Point tmin;
- Point tmax;
- i->second->get_bounds(0, tmin, tmax);
- minp.x = min(minp.x, tmin.x);
- minp.y = min(minp.y, tmin.y);
- maxp.x = max(maxp.x, tmax.x);
- maxp.y = max(maxp.y, tmax.y);
- }
-
- float t = tan(camera.get_field_of_view()/2)*2;
- float size = max((maxp.y-minp.y+0.1), (maxp.x-minp.x+0.1)/camera.get_aspect());
- float dist = size/t+size*0.25;
- GL::Vector3 center((minp.x+maxp.x)/2, (minp.y+maxp.y)/2, 0);
- const GL::Vector3 &look = camera.get_look_direction();
- camera.set_position(GL::Vector3(center.x-look.x*dist, center.y-look.y*dist, center.z-look.z*dist));