#define LIBMARKLIN_TRACKTYPE_H_
#include <msp/datafile/loader.h>
-#include "endpoint.h"
+#include "articlenumber.h"
+#include "geometry.h"
#include "trackpart.h"
namespace Marklin {
class TrackType
{
public:
+ struct Endpoint
+ {
+ Point pos;
+ float dir; // Direction outwards from the endpoint
+ unsigned paths;
+
+ Endpoint(float, float, float, unsigned);
+ };
+
class Loader: public Msp::DataFile::BasicLoader<TrackType>
{
public:
};
private:
- unsigned art_nr;
+ ArticleNumber art_nr;
std::string description;
std::vector<TrackPart> parts;
std::vector<Endpoint> endpoints;
+ bool double_address;
+ unsigned autofit_preference;
public:
- TrackType(unsigned);
+ TrackType(const ArticleNumber &);
- unsigned get_article_number() const { return art_nr; }
+ const ArticleNumber &get_article_number() const { return art_nr; }
const std::string &get_description() const { return description; }
float get_total_length() const;
float get_path_length(int) const;
unsigned get_paths() const;
unsigned get_n_paths() const;
bool is_turnout() const;
- bool is_double_address() const;
+ bool is_dead_end() const;
+ bool is_double_address() const { return double_address; }
+ unsigned get_autofit_preference() const { return autofit_preference; }
const std::vector<TrackPart> &get_parts() const { return parts; }
const std::vector<Endpoint> &get_endpoints() const { return endpoints; }
+ const Endpoint &get_endpoint(unsigned) const;
TrackPoint get_point(unsigned, unsigned, float) const;
private: