X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fdesigner.cpp;h=99655683c1a3bc772d3fe6737d336d2a6d2e7802;hb=02c9a9779954d993cb73fe5f7a72b0847e87f633;hp=f79ef7a9ae8daa4bfdb94a901ba3b6d170412b9c;hpb=e07c0d862a4d43b2585c93e79d25380d00675309;p=r2c2.git diff --git a/source/designer/designer.cpp b/source/designer/designer.cpp index f79ef7a..9965568 100644 --- a/source/designer/designer.cpp +++ b/source/designer/designer.cpp @@ -1,7 +1,7 @@ /* $Id$ This file is part of the MSP Märklin suite -Copyright © 2006-2009 Mikkosoft Productions, Mikko Rasa +Copyright © 2006-2010 Mikkosoft Productions, Mikko Rasa Distributed under the GPL */ @@ -74,9 +74,6 @@ Designer::Designer(int argc, char **argv): { filename = argv[1]; DataFile::load(*layout, argv[1]); - const list <racks = layout_3d->get_tracks(); - for(list::const_iterator i=ltracks.begin(); i!=ltracks.end(); ++i) - update_track_color(**i); if(!layout->get_base().empty()) { @@ -119,13 +116,22 @@ Designer::Designer(int argc, char **argv): root->add(*toolbar); toolbar->set_position(0, window.get_height()-toolbar->get_geometry().h); toolbar->set_visible(true); + + overlay = new Overlay3D(window, camera, ui_res.get_default_font()); + + const list &tracks = layout_3d->get_tracks(); + for(list::const_iterator i=tracks.begin(); i!=tracks.end(); ++i) + update_track_icon(**i); } Designer::~Designer() { + delete overlay; delete root; - delete layout; + delete pipeline; + delete base_object; delete layout_3d; + delete layout; delete cat_layout_3d; } @@ -293,6 +299,7 @@ void Designer::key_press(unsigned code, unsigned mod, wchar_t) selection.clear(); for(set::iterator i=tracks.begin(); i!=tracks.end(); ++i) { + overlay->clear(layout_3d->get_track(**i)); layout->remove_track(**i); delete *i; } @@ -309,7 +316,7 @@ void Designer::key_press(unsigned code, unsigned mod, wchar_t) if(*j!=*i) (*i)->snap_to(**j, true); - update_track_color(layout_3d->get_track(**i)); + update_track_icon(layout_3d->get_track(**i)); } } else if(key==Msp::Input::KEY_F) @@ -465,6 +472,9 @@ void Designer::render() pipeline->render_all(); layout_3d->get_endpoint_scene().render(); GL::enable(GL_CULL_FACE); + GL::disable(GL::DEPTH_TEST); + overlay->render(0); + GL::enable(GL::DEPTH_TEST); /*if(cur_route) { glColor4f(0.5, 0.8, 1.0, 1.0); @@ -514,21 +524,23 @@ Track3D *Designer::pick_track(int x, int y) return l->pick_track(xx, yy, size); } -void Designer::update_track_color(Track3D &track) +void Designer::update_track_icon(Track3D &track) { - if(track.get_track().get_sensor_id()) + overlay->clear(track); + + if(track.get_track().get_flex()) + overlay->add_graphic(track, "flex"); + + if(unsigned sid = track.get_track().get_sensor_id()) { - if(track.get_track().get_flex()) - track.set_color(GL::Color(1, 0.6, 1)); - else - track.set_color(GL::Color(0.7, 0.7, 1)); + overlay->add_graphic(track, "sensor"); + overlay->set_label(track, lexical_cast(sid)); + } + else if(unsigned tid = track.get_track().get_turnout_id()) + { + overlay->add_graphic(track, "turnout"); + overlay->set_label(track, lexical_cast(tid)); } - else if(track.get_track().get_turnout_id()) - track.set_color(GL::Color(0.8, 1, 0.8)); - else if(track.get_track().get_flex()) - track.set_color(GL::Color(1, 0.8, 0.8)); - else - track.set_color(GL::Color(1, 1, 1)); } void Designer::manipulation_status(const string &status) @@ -586,7 +598,7 @@ void Designer::turnout_id_accept() unsigned id = lexical_cast(input->get_text()); track->set_turnout_id(id); - update_track_color(layout_3d->get_track(*track)); + update_track_icon(layout_3d->get_track(*track)); input_dismiss(); } @@ -599,7 +611,7 @@ void Designer::sensor_id_accept() { (*i)->set_sensor_id(id); - update_track_color(layout_3d->get_track(**i)); + update_track_icon(layout_3d->get_track(**i)); } input_dismiss();