X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fdesigner.cpp;h=cb327c560efeb51236169b369675d42b16c26798;hb=6e5d36dbc3f1e4a221d424fa7d57b07998df67a8;hp=5fd0f4468797793301db6fb919377f1fd92d0b08;hpb=897f9bae5f647bae43e9786796eb9ea18325ec17;p=r2c2.git diff --git a/source/designer/designer.cpp b/source/designer/designer.cpp index 5fd0f44..cb327c5 100644 --- a/source/designer/designer.cpp +++ b/source/designer/designer.cpp @@ -68,6 +68,8 @@ Designer::Designer(int argc, char **argv): layout = new Layout(catalogue); layout_3d = new Layout3D(*layout); + layout->signal_track_added.connect(sigc::mem_fun(this, &Designer::track_added)); + if(argc>1) { filename = argv[1]; @@ -87,7 +89,7 @@ Designer::Designer(int argc, char **argv): pipeline->set_camera(&camera); pipeline->add_renderable_for_pass(layout_3d->get_scene(), 0); if(base_object) - pipeline->add_renderable_for_pass(*base_object, 0); + pipeline->add_renderable(*base_object); pipeline->add_renderable_for_pass(track_wrap, "unlit"); pipeline->add_renderable_for_pass(layout_3d->get_path_scene(), "unlit"); pipeline->add_renderable_for_pass(layout_3d->get_endpoint_scene(), "unlit"); @@ -103,6 +105,11 @@ Designer::Designer(int argc, char **argv): pass->depth_test = &GL::DepthTest::lequal(); pass->blend = &GL::Blend::alpha(); + pass = &pipeline->add_pass("blended"); + pass->lighting = &lighting; + pass->depth_test = &GL::DepthTest::lequal(); + pass->blend = &GL::Blend::alpha(); + camera.set_up_direction(GL::Vector3(0, 0, 1)); view_all(); @@ -130,11 +137,9 @@ Designer::Designer(int argc, char **argv): 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); - - edit_route(0); + const Layout3D::TrackMap &tracks = layout_3d->get_tracks(); + for(Layout3D::TrackMap::const_iterator i=tracks.begin(); i!=tracks.end(); ++i) + update_track_icon(*i->second); } Designer::~Designer() @@ -234,7 +239,7 @@ void Designer::add_selection_to_route() } catch(const Exception &e) { - IO::print("%s\n", e.what()); + lbl_status->set_text(e.what()); } show_route(cur_route); @@ -260,6 +265,10 @@ void Designer::tick() root->tick(); camera_ctl.tick(dt); + for(list::iterator i=new_tracks.begin(); i!=new_tracks.end(); ++i) + layout_3d->get_track(**i).get_path().set_mask(0); + new_tracks.clear(); + render(); window.swap_buffers(); @@ -463,6 +472,11 @@ void Designer::render() GL::Texture::unbind(); } +void Designer::track_added(Track &trk) +{ + new_tracks.push_back(&trk); +} + Track3D *Designer::pick_track(int x, int y) { Layout3D *l = layout_3d; @@ -573,12 +587,12 @@ void Designer::view_all() Point minp; Point maxp; - const list &tracks = layout_3d->get_tracks(); - for(list::const_iterator i=tracks.begin(); i!=tracks.end(); ++i) + const Layout3D::TrackMap &tracks = layout_3d->get_tracks(); + for(Layout3D::TrackMap::const_iterator i=tracks.begin(); i!=tracks.end(); ++i) { Point tmin; Point tmax; - (*i)->get_bounds(0, tmin, 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);