X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Ftrack.cpp;h=5f1ca438644eea5d094a09dcf61e019fe954f5f2;hb=e9653dffd0026fb3c02c91a4c0feca688a86c721;hp=6938820fafc26fe1b43c86405fc1703762f10364;hpb=f79b3fd58999a73a4a28663b46fdd96c58167a18;p=r2c2.git diff --git a/source/libmarklin/track.cpp b/source/libmarklin/track.cpp index 6938820..5f1ca43 100644 --- a/source/libmarklin/track.cpp +++ b/source/libmarklin/track.cpp @@ -6,6 +6,7 @@ Distributed under the GPL */ #include +#include "block.h" #include "driver.h" #include "layout.h" #include "track.h" @@ -19,6 +20,7 @@ namespace Marklin { Track::Track(Layout &l, const TrackType &t): layout(l), type(t), + block(0), rot(0), slope(0), flex(false), @@ -41,6 +43,24 @@ Track::~Track() layout.remove_track(*this); } +void Track::set_block(Block *b) +{ + if(b && !b->has_track(*this)) + throw InvalidParameterValue("Track is not in the Block"); + if(!b && block && block->has_track(*this)) + throw InvalidState("Track is still in a Block"); + + block = b; +} + +Block &Track::get_block() const +{ + if(!block) + throw InvalidState("No Block"); + + return *block; +} + void Track::set_position(const Point &p) { pos = p;