]> 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 d86977918655541b377fab7117f057289e931350..9f2979bebff80ca4112eb2c3013d6a4209da1ddf 100644 (file)
@@ -13,9 +13,10 @@ using namespace Msp;
 
 namespace Marklin {
 
-TrackType::TrackType(unsigned a):
-       art_nr(a),
-       double_address(false)
+TrackType::TrackType(const ArticleNumber &an):
+       art_nr(an),
+       double_address(false),
+       autofit_preference(1)
 { }
 
 float TrackType::get_total_length() const
@@ -53,6 +54,19 @@ bool TrackType::is_turnout() const
        return endpoints.size()>2;
 }
 
+bool TrackType::is_dead_end() const
+{
+       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
 {
        if(epi>=endpoints.size())
@@ -149,10 +163,17 @@ 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);