]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/tracktype.cpp
Make LCD output selectable at runtime through an extra I/O pin
[r2c2.git] / source / libmarklin / tracktype.cpp
index 19b0c6b4a3e83ecbeeef8a10fe710d832d8ce993..9f2979bebff80ca4112eb2c3013d6a4209da1ddf 100644 (file)
@@ -13,8 +13,10 @@ using namespace Msp;
 
 namespace Marklin {
 
-TrackType::TrackType(unsigned a):
-       art_nr(a)
+TrackType::TrackType(const ArticleNumber &an):
+       art_nr(an),
+       double_address(false),
+       autofit_preference(1)
 { }
 
 float TrackType::get_total_length() const
@@ -52,9 +54,17 @@ bool TrackType::is_turnout() const
        return endpoints.size()>2;
 }
 
-bool TrackType::is_double_address() const
+bool TrackType::is_dead_end() const
 {
-       return get_n_paths()>2;
+       return endpoints.size()<2;
+}
+
+const TrackType::Endpoint &TrackType::get_endpoint(unsigned i) const
+{
+       if(i>=endpoints.size())
+               throw InvalidParameterValue("Endpoint index out of range");
+
+       return endpoints[i];
 }
 
 TrackPoint TrackType::get_point(unsigned epi, unsigned path, float d) const
@@ -153,11 +163,19 @@ void TrackType::collect_endpoints()
        }
 }
 
+TrackType::Endpoint::Endpoint(float x, float y, float d, unsigned p):
+       pos(x, y),
+       dir(d),
+       paths(p)
+{ }
+
 
 TrackType::Loader::Loader(TrackType &t):
        Msp::DataFile::BasicLoader<TrackType>(t)
 {
+       add("autofit_preference", &TrackType::autofit_preference);
        add("description", &TrackType::description);
+       add("double_address", &TrackType::double_address);
        add("part",        &Loader::part);
 }