Layout3D::~Layout3D()
{
- for(list<Track3D *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
- delete *i;
+ while(!tracks.empty())
+ delete tracks.front();
}
void Layout3D::set_quality(unsigned q)
quality = q;
}
-void Layout3D::render(bool endpoints) const
+void Layout3D::add_track(Track3D &t)
{
- GL::Texture::unbind();
- glEnable(GL_DEPTH_TEST);
+ tracks.push_back(&t);
+}
- for(list<Track3D *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
- (*i)->render();
-
- if(endpoints)
- {
- glDepthMask(false);
- for(list<Track3D *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
- (*i)->render_endpoints();
- glDepthMask(true);
- }
+void Layout3D::remove_track(Track3D &t)
+{
+ list<Track3D *>::iterator i = find(tracks.begin(), tracks.end(), &t);
+ if(i!=tracks.end())
+ tracks.erase(i);
}
Track3D &Layout3D::get_track(const Track &t) const
for(list<Track3D *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
if(&(*i)->get_track()==&t)
return **i;
-
+
throw KeyError("Unknown track");
}
glPopMatrix();
- render();
+ scene.render(0);
glDisable(GL_CLIP_PLANE0);
glDisable(GL_CLIP_PLANE1);
void Layout3D::track_added(Track &t)
{
- tracks.push_back(new Track3D(*this, t));
+ new Track3D(*this, t);
}
void Layout3D::track_removed(Track &t)
if(&(*i)->get_track()==&t)
{
delete *i;
- tracks.erase(i);
return;
}
}