X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Foverlay.cpp;h=3f2d621d6b8aade208f8517488a0f3585f2117fc;hb=bc8ac89bbe774bb133b758416182aa18e5e0a5a5;hp=bc206f987ac6c930275edbce4c9700e29dc1896d;hpb=48dff17ed3144d944965e7cb534e1f8fb92bd620;p=r2c2.git diff --git a/source/3d/overlay.cpp b/source/3d/overlay.cpp index bc206f9..3f2d621 100644 --- a/source/3d/overlay.cpp +++ b/source/3d/overlay.cpp @@ -30,17 +30,17 @@ Overlay3D::~Overlay3D() { for(map::iterator i=graphics.begin(); i!=graphics.end(); ++i) delete i->second; - for(map::iterator i=icons.begin(); i!=icons.end(); ++i) + for(map::iterator i=icons.begin(); i!=icons.end(); ++i) delete i->second; } -void Overlay3D::set_label(const Track3D &track, const string &label) +void Overlay3D::set_label(const Object3D &track, const string &label) { get_icon(track).label = label; update_icon(get_icon(track)); } -void Overlay3D::add_graphic(const Track3D &track, const string &grf_name) +void Overlay3D::add_graphic(const Object3D &track, const string &grf_name) { const GL::Mesh *grf = get_graphic(grf_name); if(!grf) @@ -53,7 +53,7 @@ void Overlay3D::add_graphic(const Track3D &track, const string &grf_name) update_icon(icon); } -void Overlay3D::remove_graphic(const Track3D &track, const string &grf_name) +void Overlay3D::remove_graphic(const Object3D &track, const string &grf_name) { const GL::Mesh *grf = get_graphic(grf_name); Icon &icon = get_icon(track); @@ -62,15 +62,15 @@ void Overlay3D::remove_graphic(const Track3D &track, const string &grf_name) update_icon(icon); } -void Overlay3D::clear_graphics(const Track3D &track) +void Overlay3D::clear_graphics(const Object3D &track) { get_icon(track).graphics.clear(); update_icon(get_icon(track)); } -void Overlay3D::clear(const Track3D &track) +void Overlay3D::clear(const Object3D &track) { - map::iterator i = icons.find(&track); + map::iterator i = icons.find(&track); if(i!=icons.end()) { delete i->second; @@ -96,21 +96,12 @@ void Overlay3D::render(const GL::Tag &tag) const float spacing = round(size*1.1)/size; float baseline = round((0.5-font.get_ascent()*0.5-font.get_descent()*0.5)*size)/size; - for(map::const_iterator i=icons.begin(); i!=icons.end(); ++i) + for(map::const_iterator i=icons.begin(); i!=icons.end(); ++i) { const Icon &icon = *i->second; - const Point &pos = i->first->get_track().get_position(); - Point minp; - Point maxp; - i->first->get_type().get_bounds(0, minp, maxp); - float rot = i->first->get_track().get_rotation(); - float c = cos(rot); - float s = sin(rot); - - GL::Vector3 p((minp.x+maxp.x)/2, (minp.y+maxp.y)/2, 0); - p = GL::Vector3(pos.x+c*p.x-s*p.y, pos.y+s*p.x+c*p.y, pos.z+0.02); - p = camera.project(p); + Point node = i->first->get_node(); + GL::Vector3 p = camera.project(GL::Vector3(node.x, node.y, node.z)); GL::PushMatrix push_mat; p.x = int(p.x*0.5*window.get_width()-icon.width*size/2); @@ -139,7 +130,7 @@ void Overlay3D::render(const GL::Tag &tag) const } } -Overlay3D::Icon &Overlay3D::get_icon(const Track3D &track) +Overlay3D::Icon &Overlay3D::get_icon(const Object3D &track) { Icon *&icon = icons[&track]; if(!icon)