X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fslopetool.cpp;h=ef96e558d08f697dd9219c99629b2779583b517a;hb=92c6b7a632cb6f380802114abcb4739fd0029261;hp=0f6990eeec50abda37799186b19d1dcae8c57c31;hpb=6b9b841c497de4b783178ec8c5b98da49b6b8df5;p=r2c2.git diff --git a/source/designer/slopetool.cpp b/source/designer/slopetool.cpp index 0f6990e..ef96e55 100644 --- a/source/designer/slopetool.cpp +++ b/source/designer/slopetool.cpp @@ -5,14 +5,22 @@ using namespace std; using namespace Msp; using namespace R2C2; -SlopeTool::SlopeTool(Designer &d, Input::Mouse &m, const set &objects): - Tool(d, m), +SlopeTool::SlopeTool(Designer &d, Input::Keyboard &k, Input::Mouse &m, const set &objects): + Tool(d, k, m), total_length(0) { + if(objects.empty()) + { + set_status("Nothing selected"); + set_done(false); + return; + } + for(set::const_iterator i=objects.begin(); i!=objects.end(); ++i) if(!dynamic_cast(*i) || (*i)->get_n_link_slots()!=2) { set_status("Must have linear tracks only"); + set_done(false); return; } @@ -37,6 +45,9 @@ SlopeTool::SlopeTool(Designer &d, Input::Mouse &m, const set &objects) void SlopeTool::even_slope(bool smooth) { + if(done) + return; + float start_z = tracks.front()->get_snap_node(tracks.front().entry()).position.z; float end_z = tracks.back()->get_snap_node(tracks.back().reverse().entry()).position.z; @@ -69,10 +80,15 @@ void SlopeTool::even_slope(bool smooth) set_slope(*i, cur_z, tilt); cur_z += (*i)->get_type().get_path_length(0)*(end_z-start_z)/length; } + + set_done(true); } void SlopeTool::flatten() { + if(done) + return; + float z = 0; for(list::iterator i=tracks.begin(); i!=tracks.end(); ++i) { @@ -88,6 +104,8 @@ void SlopeTool::flatten() (*i)->set_position(Vector(p.x, p.y, z)); (*i)->set_tilt(Angle::zero()); } + + set_done(true); } void SlopeTool::set_slope(const TrackIter &track, float z, const Angle &tilt)