X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fdesigner.cpp;h=c2c26da8332e3cc9d016a5af2eb3a48d731f6e12;hb=bd649cbc44e04f5e456ca19b7a32ebe479c130e1;hp=c60ae8e8688b5c318262d71e40a48d48aebacfb4;hpb=e9653dffd0026fb3c02c91a4c0feca688a86c721;p=r2c2.git diff --git a/source/designer/designer.cpp b/source/designer/designer.cpp index c60ae8e..c2c26da 100644 --- a/source/designer/designer.cpp +++ b/source/designer/designer.cpp @@ -48,7 +48,8 @@ Designer::Designer(int argc, char **argv): mode(SELECT), manipulator(*this, selection), measure(*this), - camera_ctl(window, camera) + camera_ctl(window, camera), + track_wrap(*this, selection) { window.set_title("Railway Designer"); window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Designer::exit), 0)); @@ -67,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]; @@ -86,7 +89,8 @@ 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"); @@ -101,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(); @@ -131,8 +140,6 @@ Designer::Designer(int argc, char **argv): 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); } Designer::~Designer() @@ -232,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); @@ -254,6 +261,10 @@ void Designer::tick() float dt = (t-last_tick)/Msp::Time::sec; last_tick = t; + 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(); + window.get_display().tick(); root->tick(); camera_ctl.tick(dt); @@ -444,7 +455,6 @@ void Designer::render() } GL::Bind bind_depth(GL::DepthTest::lequal()); - manipulator.render(); if(mode==MEASURE) measure.render(); } @@ -462,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;