From b860a56bd9bc8894311c02d7673f379beff3220b Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 4 May 2014 22:10:34 +0300 Subject: [PATCH] Rework article numbers --- locos.dat | 54 ++++++++++ source/designer/extendtool.cpp | 8 +- source/libr2c2/articlenumber.cpp | 75 ++++---------- source/libr2c2/articlenumber.h | 24 +++-- source/libr2c2/beamgatetype.cpp | 3 +- source/libr2c2/catalogue.cpp | 44 +------- source/libr2c2/catalogue.h | 4 - source/libr2c2/objecttype.cpp | 9 +- source/libr2c2/objecttype.h | 5 +- source/libr2c2/signaltype.cpp | 3 +- source/libr2c2/signaltype.h | 2 +- source/libr2c2/terraintype.cpp | 5 +- source/libr2c2/terraintype.h | 4 +- source/libr2c2/tracktype.cpp | 3 +- source/libr2c2/tracktype.h | 2 +- source/libr2c2/vehicletype.cpp | 3 +- source/libr2c2/vehicletype.h | 2 +- terrain.dat | 10 +- tracks.dat | 170 +++++++++++++++++++++++++++++++ wagons.dat | 108 +++++++++++++++++++- 20 files changed, 404 insertions(+), 134 deletions(-) diff --git a/locos.dat b/locos.dat index bd3fdc2..f330a81 100644 --- a/locos.dat +++ b/locos.dat @@ -2,6 +2,11 @@ scale 1 87; vehicle "39230" { + article_number + { + vendor "Märklin"; + article "39230"; + }; name "BR 23"; locomotive true; function 0 "light"; @@ -33,6 +38,12 @@ vehicle "39230" vehicle "29820-02" { + article_number + { + vendor "Märklin"; + article "29820"; + part "02"; + }; name "BR 50"; locomotive true; function 0 "light"; @@ -284,6 +295,12 @@ vehicle "29820-02" vehicle "29530-01" { + article_number + { + vendor "Märklin"; + article "29530"; + part "01"; + }; name "BR 86"; locomotive true; function 0 "light"; @@ -315,6 +332,11 @@ vehicle "29530-01" vehicle "36850" { + article_number + { + vendor "Märklin"; + article "36850"; + }; name "BR 185"; locomotive true; function 0 "light"; @@ -345,6 +367,12 @@ vehicle "36850" vehicle "37225-02" { + article_number + { + vendor "Märklin"; + article "37225"; + part "02"; + }; name "BR 194"; locomotive true; function 0 "light"; @@ -379,6 +407,11 @@ vehicle "37225-02" vehicle "39410" { + article_number + { + vendor "Märklin"; + article "39410"; + }; name "BR E 41"; locomotive true; function 0 "light"; @@ -412,6 +445,12 @@ vehicle "39410" vehicle "37574-01" { + article_number + { + vendor "Märklin"; + article "37574"; + part "01"; + }; name "BR E 03"; locomotive true; function 0 "light"; @@ -448,6 +487,11 @@ vehicle "37574-01" vehicle "37504" { // XXX The power car is really in the middle, but that configuration isn't supported yet + article_number + { + vendor "Märklin"; + article "37504"; + }; name "BR 420 S-bahn"; locomotive true; function 0 "light"; @@ -482,6 +526,11 @@ vehicle "37504" vehicle "37851" { + article_number + { + vendor "Märklin"; + article "37851"; + }; name "BR 150"; locomotive true; function 0 "light"; @@ -514,6 +563,11 @@ vehicle "37851" vehicle "37968" { + article_number + { + vendor "Märklin"; + article "37968"; + }; name "BR 96"; locomotive true; function 0 "light"; diff --git a/source/designer/extendtool.cpp b/source/designer/extendtool.cpp index c31c09f..8698fd5 100644 --- a/source/designer/extendtool.cpp +++ b/source/designer/extendtool.cpp @@ -143,20 +143,20 @@ void ExtendTool::pointer_motion() delete *i; extend_tracks = trks; - map counts; + map counts; length = 0; for(vector::iterator i=extend_tracks.begin(); i!=extend_tracks.end(); ++i) { length += (*i)->get_type().get_total_length(); - ++counts[(*i)->get_type().get_article_number()]; + ++counts[&(*i)->get_type()]; } string detail; - for(map::const_iterator i=counts.begin(); i!=counts.end(); ++i) + for(map::const_iterator i=counts.begin(); i!=counts.end(); ++i) { if(!detail.empty()) detail += ", "; - detail += format("%dx %s", i->second, i->first); + detail += format("%dx %s", i->second, i->first->get_article_number()); } signal_status.emit(format("Extend: %.0fmm (%s)", length*1000, detail)); diff --git a/source/libr2c2/articlenumber.cpp b/source/libr2c2/articlenumber.cpp index dd19eb5..d802831 100644 --- a/source/libr2c2/articlenumber.cpp +++ b/source/libr2c2/articlenumber.cpp @@ -6,75 +6,44 @@ using namespace Msp; namespace R2C2 { -ArticleNumber::ArticleNumber(unsigned n) -{ - Part part; - part.number = n; - part.letter = 0; - parts.push_back(part); -} - -ArticleNumber::ArticleNumber(const string &s) -{ - vector sparts = split(s, '-'); - for(vector::iterator i=sparts.begin(); i!=sparts.end(); ++i) - { - if(i->empty()) - throw invalid_argument("ArticleNumber::ArticleNumber"); +ArticleNumber::ArticleNumber(const string &a): + article(a) +{ } - unsigned nondigit = i->size(); - for(unsigned j=0; jsize(); ++j) - if(!isdigit((*i)[j])) - { - nondigit = j; - break; - } - - if(!nondigit || nondigitsize()-1) - throw invalid_argument("ArticleNumber::ArticleNumber"); - - Part part; - part.number = lexical_cast(i->substr(0, nondigit)); - part.letter = nondigitsize() ? (*i)[nondigit] : 0; - parts.push_back(part); - } -} +ArticleNumber::ArticleNumber(const string &v, const string &a, const string &p): + vendor(v), + article(a), + part(p) +{ } string ArticleNumber::str() const { string result; - for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) + if(!vendor.empty()) { - if(!result.empty()) - result += '-'; - - result += lexical_cast(i->number); - if(i->letter) - result += i->letter; + result += vendor; + result += ' '; + } + result += article; + if(!part.empty()) + { + result += '-'; + result += part; } return result; } -bool ArticleNumber::operator<(const ArticleNumber &other) const -{ - return parts(an) { - if(number!=other.number) - return number>(const LexicalConverter &conv, ArticleNumber &art_nr) -{ - art_nr = ArticleNumber(conv.get()); -} - void operator<<(LexicalConverter &conv, const ArticleNumber &art_nr) { conv.result(art_nr.str()); diff --git a/source/libr2c2/articlenumber.h b/source/libr2c2/articlenumber.h index c493967..79356c8 100644 --- a/source/libr2c2/articlenumber.h +++ b/source/libr2c2/articlenumber.h @@ -3,34 +3,36 @@ #include #include +#include #include namespace R2C2 { class ArticleNumber { -private: - struct Part +public: + class Loader: public Msp::DataFile::ObjectLoader { - unsigned number; - char letter; - - bool operator<(const Part &) const; + public: + Loader(ArticleNumber &); }; - std::vector parts; +private: + std::string vendor; + std::string article; + std::string part; public: ArticleNumber() { } - ArticleNumber(unsigned); ArticleNumber(const std::string &); + ArticleNumber(const std::string &, const std::string &, const std::string & = std::string()); + const std::string &get_vendor() const { return vendor; } + const std::string &get_article() const { return article; } + const std::string &get_part() const { return part; } std::string str() const; - - bool operator<(const ArticleNumber &) const; }; -void operator>>(const Msp::LexicalConverter &, ArticleNumber &); void operator<<(Msp::LexicalConverter &, const ArticleNumber &); } // namespace R2C2 diff --git a/source/libr2c2/beamgatetype.cpp b/source/libr2c2/beamgatetype.cpp index 46f0aad..a89851c 100644 --- a/source/libr2c2/beamgatetype.cpp +++ b/source/libr2c2/beamgatetype.cpp @@ -8,8 +8,7 @@ using namespace Msp; namespace R2C2 { -BeamGateType::BeamGateType(): - ObjectType(ArticleNumber(0)) +BeamGateType::BeamGateType() { name = "Beam gate"; Geometry::TransformedShape box1( diff --git a/source/libr2c2/catalogue.cpp b/source/libr2c2/catalogue.cpp index 2afe4ea..a919cb7 100644 --- a/source/libr2c2/catalogue.cpp +++ b/source/libr2c2/catalogue.cpp @@ -16,10 +16,10 @@ Catalogue::Catalogue(): scale(1), layout(*this) { - add_type(); - add_type(); - add_type(); - add_type(); + add_type().keyword("track"); + add_type().keyword("signal"); + add_type().keyword("vehicle"); + add_type().keyword("terrain"); add_type().keyword("track_appearance"); } @@ -30,10 +30,6 @@ Catalogue::Loader::Loader(Catalogue &c): { add("layout", &Loader::layout); add("scale", &Loader::scale); - add("signal", &Loader::signal); - add("terrain", &Loader::terrain); - add("track", &Loader::track); - add("vehicle", &Loader::vehicle); } void Catalogue::Loader::layout() @@ -46,36 +42,4 @@ void Catalogue::Loader::scale(float n, float d) cat.scale = n/d; } -void Catalogue::Loader::signal(const string &n) -{ - RefPtr sig = new SignalType(n); - load_sub(*sig); - cat.add(n, sig.get()); - sig.release(); -} - -void Catalogue::Loader::terrain(const string &n) -{ - RefPtr ter = new TerrainType(n); - load_sub(*ter); - cat.add(n, ter.get()); - ter.release(); -} - -void Catalogue::Loader::track(const string &n) -{ - RefPtr trk = new TrackType(n); - load_sub(*trk, cat); - cat.add(n, trk.get()); - trk.release(); -} - -void Catalogue::Loader::vehicle(const string &n) -{ - RefPtr veh = new VehicleType(n); - load_sub(*veh); - cat.add(n, veh.get()); - veh.release(); -} - } // namespace R2C2 diff --git a/source/libr2c2/catalogue.h b/source/libr2c2/catalogue.h index cd59e9c..49a4a4d 100644 --- a/source/libr2c2/catalogue.h +++ b/source/libr2c2/catalogue.h @@ -24,10 +24,6 @@ public: private: void layout(); void scale(float, float); - void signal(const std::string &); - void terrain(const std::string &); - void track(const std::string &); - void vehicle(const std::string &); }; private: diff --git a/source/libr2c2/objecttype.cpp b/source/libr2c2/objecttype.cpp index 09b2561..6d7726f 100644 --- a/source/libr2c2/objecttype.cpp +++ b/source/libr2c2/objecttype.cpp @@ -4,8 +4,7 @@ using namespace Msp; namespace R2C2 { -ObjectType::ObjectType(const ArticleNumber &an): - art_nr(an), +ObjectType::ObjectType(): shape(0) { } @@ -18,8 +17,14 @@ ObjectType::~ObjectType() ObjectType::Loader::Loader(ObjectType &ot): DataFile::ObjectLoader(ot) { + add("article_number", &Loader::article_number); add("description", &ObjectType::description); add("name", &ObjectType::name); } +void ObjectType::Loader::article_number() +{ + load_sub(obj.art_nr); +} + } // namespace R2C2 diff --git a/source/libr2c2/objecttype.h b/source/libr2c2/objecttype.h index 4102f94..59bd879 100644 --- a/source/libr2c2/objecttype.h +++ b/source/libr2c2/objecttype.h @@ -15,6 +15,9 @@ public: { public: Loader(ObjectType &); + + private: + void article_number(); }; protected: @@ -23,7 +26,7 @@ protected: std::string description; Shape *shape; - ObjectType(const ArticleNumber &); + ObjectType(); public: virtual ~ObjectType(); diff --git a/source/libr2c2/signaltype.cpp b/source/libr2c2/signaltype.cpp index 545e4de..0ec53cd 100644 --- a/source/libr2c2/signaltype.cpp +++ b/source/libr2c2/signaltype.cpp @@ -8,8 +8,7 @@ using namespace Msp; namespace R2C2 { -SignalType::SignalType(const ArticleNumber &an): - ObjectType(an) +SignalType::SignalType() { shape = new Geometry::TransformedShape( Geometry::ExtrudedShape(Geometry::Circle(0.01), 0.12), diff --git a/source/libr2c2/signaltype.h b/source/libr2c2/signaltype.h index be3857a..9dac78e 100644 --- a/source/libr2c2/signaltype.h +++ b/source/libr2c2/signaltype.h @@ -37,7 +37,7 @@ private: std::string object; public: - SignalType(const ArticleNumber & = ArticleNumber()); + SignalType(); const IndicationList &get_indications() const { return indications; } const std::string &get_object() const { return object; } diff --git a/source/libr2c2/terraintype.cpp b/source/libr2c2/terraintype.cpp index ce9551f..96d6dcf 100644 --- a/source/libr2c2/terraintype.cpp +++ b/source/libr2c2/terraintype.cpp @@ -6,8 +6,7 @@ using namespace Msp; namespace R2C2 { -TerrainType::TerrainType(const ArticleNumber &an): - ObjectType(an), +TerrainType::TerrainType(): tile_size(1), elevation_granularity(0.1) { } @@ -28,7 +27,7 @@ TerrainType::SurfaceType::SurfaceType(): TerrainType::Loader::Loader(TerrainType &tt): - DataFile::ObjectLoader(tt) + DataFile::DerivedObjectLoader(tt) { add("elevation_granularity", &TerrainType::elevation_granularity); add("surface", &Loader::surface); diff --git a/source/libr2c2/terraintype.h b/source/libr2c2/terraintype.h index 8bd59ea..6d26a02 100644 --- a/source/libr2c2/terraintype.h +++ b/source/libr2c2/terraintype.h @@ -9,7 +9,7 @@ namespace R2C2 { class TerrainType: public ObjectType { public: - class Loader: public Msp::DataFile::ObjectLoader + class Loader: public Msp::DataFile::DerivedObjectLoader { public: Loader(TerrainType &); @@ -37,7 +37,7 @@ private: float elevation_granularity; public: - TerrainType(const ArticleNumber & = ArticleNumber()); + TerrainType(); unsigned get_n_surface_types() const { return surface_types.size(); } const SurfaceType &get_surface_type(unsigned) const; diff --git a/source/libr2c2/tracktype.cpp b/source/libr2c2/tracktype.cpp index 6b16c55..51b685f 100644 --- a/source/libr2c2/tracktype.cpp +++ b/source/libr2c2/tracktype.cpp @@ -9,8 +9,7 @@ using namespace Msp; namespace R2C2 { -TrackType::TrackType(const ArticleNumber &an): - ObjectType(an), +TrackType::TrackType(): appearance(0), state_bits(0), autofit_preference(1) diff --git a/source/libr2c2/tracktype.h b/source/libr2c2/tracktype.h index bccd10b..b540e29 100644 --- a/source/libr2c2/tracktype.h +++ b/source/libr2c2/tracktype.h @@ -56,7 +56,7 @@ private: std::string object; public: - TrackType(const ArticleNumber & = ArticleNumber()); + TrackType(); const TrackAppearance &get_appearance() const; float get_gauge() const; diff --git a/source/libr2c2/vehicletype.cpp b/source/libr2c2/vehicletype.cpp index 58ef1d4..5978745 100644 --- a/source/libr2c2/vehicletype.cpp +++ b/source/libr2c2/vehicletype.cpp @@ -10,8 +10,7 @@ using namespace Msp; namespace R2C2 { -VehicleType::VehicleType(const ArticleNumber &an): - ObjectType(an), +VehicleType::VehicleType(): locomotive(false), swap_direction(false), gauge(1.524), diff --git a/source/libr2c2/vehicletype.h b/source/libr2c2/vehicletype.h index 4a4d725..c22f6bf 100644 --- a/source/libr2c2/vehicletype.h +++ b/source/libr2c2/vehicletype.h @@ -180,7 +180,7 @@ private: float max_speed; public: - VehicleType(const ArticleNumber & = ArticleNumber()); + VehicleType(); bool is_locomotive() const { return locomotive; } unsigned get_max_function() const; diff --git a/terrain.dat b/terrain.dat index 073c5b7..5f51c96 100644 --- a/terrain.dat +++ b/terrain.dat @@ -1,5 +1,11 @@ -terrain "100001" +terrain "tb5" { + article_number + { + vendor "MSP"; + article "tb5"; + }; + surface { }; @@ -10,7 +16,7 @@ terrain "100001" layout { - terrain "100001" + terrain "tb5" { position 0.1519720 0.2448861 0.000000; rotation 0.000000; diff --git a/tracks.dat b/tracks.dat index 9a35bde..13241d9 100644 --- a/tracks.dat +++ b/tracks.dat @@ -44,6 +44,11 @@ track_appearance "C" track "24064" { + article_number + { + vendor "Märklin"; + article "24064"; + }; appearance "C"; description "Straight, 64.3mm (R3-R4-R5)"; part @@ -54,6 +59,11 @@ track "24064" track "24071" { + article_number + { + vendor "Märklin"; + article "24071"; + }; appearance "C"; description "Straight, 70.8mm (for slim turnouts)"; part @@ -65,6 +75,11 @@ track "24071" track "24077" { + article_number + { + vendor "Märklin"; + article "24077"; + }; appearance "C"; description "Straight, 77.5mm (R1-R2-R3)"; part @@ -76,6 +91,11 @@ track "24077" track "24094" { + article_number + { + vendor "Märklin"; + article "24094"; + }; appearance "C"; description "Straight, 94.2mm"; part @@ -87,6 +107,11 @@ track "24094" track "24172" { + article_number + { + vendor "Märklin"; + article "24172"; + }; appearance "C"; description "Straight, 171.7mm"; part @@ -98,6 +123,11 @@ track "24172" track "24188" { + article_number + { + vendor "Märklin"; + article "24188"; + }; appearance "C"; description "Straight, 188.3mm (turnout length)"; part @@ -109,6 +139,11 @@ track "24188" track "24229" { + article_number + { + vendor "Märklin"; + article "24229"; + }; appearance "C"; description "Straight, 229.3mm"; part @@ -119,6 +154,11 @@ track "24229" track "24236" { + article_number + { + vendor "Märklin"; + article "24236"; + }; appearance "C"; description "Straight, 236.1mm (slim turnout length)"; part @@ -129,6 +169,11 @@ track "24236" track "24360" { + article_number + { + vendor "Märklin"; + article "24360"; + }; appearance "C"; description "Straight, 360mm"; part @@ -141,6 +186,11 @@ track "24360" track "24107" { + article_number + { + vendor "Märklin"; + article "24107"; + }; appearance "C"; description "Curve, R1 = 360mm, 7.5°"; part @@ -152,6 +202,11 @@ track "24107" track "24115" { + article_number + { + vendor "Märklin"; + article "24115"; + }; appearance "C"; description "Curve, R1 = 360mm, 15°"; part @@ -163,6 +218,11 @@ track "24115" track "24130" { + article_number + { + vendor "Märklin"; + article "24130"; + }; appearance "C"; description "Curve, R1 = 360mm, 30°"; part @@ -176,6 +236,11 @@ track "24130" track "24206" { + article_number + { + vendor "Märklin"; + article "24206"; + }; appearance "C"; description "Curve, R2 = 437.5mm, 5.7° (turnout to 30°)"; part @@ -187,6 +252,11 @@ track "24206" track "24207" { + article_number + { + vendor "Märklin"; + article "24207"; + }; appearance "C"; description "Curve, R2 = 437.5mm, 7.5°"; part @@ -198,6 +268,11 @@ track "24207" track "24215" { + article_number + { + vendor "Märklin"; + article "24215"; + }; appearance "C"; description "Curve, R2 = 437.5mm, 15°"; part @@ -209,6 +284,11 @@ track "24215" track "24224" { + article_number + { + vendor "Märklin"; + article "24224"; + }; appearance "C"; description "Curve, R2 = 437.5mm, 24.3° (turnout)"; part @@ -220,6 +300,11 @@ track "24224" track "24230" { + article_number + { + vendor "Märklin"; + article "24230"; + }; appearance "C"; description "Curve, R2 = 437.5mm, 30°"; part @@ -233,6 +318,11 @@ track "24230" track "24330" { + article_number + { + vendor "Märklin"; + article "24330"; + }; appearance "C"; description "Curve, R3 = 515mm, 30°"; part @@ -246,6 +336,11 @@ track "24330" track "24430" { + article_number + { + vendor "Märklin"; + article "24430"; + }; appearance "C"; description "Curve, R4 = 579.3mm, 30°"; part @@ -259,6 +354,11 @@ track "24430" track "24530" { + article_number + { + vendor "Märklin"; + article "24530"; + }; appearance "C"; description "Curve, R5 = 643.6mm, 30°"; part @@ -272,6 +372,11 @@ track "24530" track "24912" { + article_number + { + vendor "Märklin"; + article "24912"; + }; appearance "C"; description "Curve, R = 1114.6mm, 12.1° (slim turnout)"; part @@ -285,6 +390,11 @@ track "24912" track "24671" { + article_number + { + vendor "Märklin"; + article "24671"; + }; appearance "C"; description "Curved turnout, left"; part @@ -309,6 +419,11 @@ track "24671" track "24672" { + article_number + { + vendor "Märklin"; + article "24672"; + }; appearance "C"; description "Curved turnout, right"; part @@ -335,6 +450,11 @@ track "24672" track "24611" { + article_number + { + vendor "Märklin"; + article "24611"; + }; appearance "C"; description "Turnout, left"; part @@ -352,6 +472,11 @@ track "24611" track "24612" { + article_number + { + vendor "Märklin"; + article "24612"; + }; appearance "C"; description "Turnout, right"; part @@ -369,6 +494,11 @@ track "24612" track "24630" { + article_number + { + vendor "Märklin"; + article "24630"; + }; appearance "C"; description "Turnout, 3-way"; part @@ -392,6 +522,11 @@ track "24630" track "24624" { + article_number + { + vendor "Märklin"; + article "24624"; + }; appearance "C"; description "Turnout, double slip"; state_bits 1; @@ -425,6 +560,11 @@ track "24624" track "24711" { + article_number + { + vendor "Märklin"; + article "24711"; + }; appearance "C"; description "Slim turnout, left"; part @@ -442,6 +582,11 @@ track "24711" track "24712" { + article_number + { + vendor "Märklin"; + article "24712"; + }; appearance "C"; description "Slim turnout, right"; part @@ -461,6 +606,11 @@ track "24712" track "24640" { + article_number + { + vendor "Märklin"; + article "24640"; + }; appearance "C"; description "Crossing, 24.3°"; part @@ -476,6 +626,11 @@ track "24640" track "24649" { + article_number + { + vendor "Märklin"; + article "24649"; + }; appearance "C"; description "Crossing, 48.6°"; part @@ -491,6 +646,11 @@ track "24649" track "24740" { + article_number + { + vendor "Märklin"; + article "24740"; + }; appearance "C"; description "Slim crossing, 12.1°"; part @@ -508,6 +668,11 @@ track "24740" track "24977" { + article_number + { + vendor "Märklin"; + article "24977"; + }; appearance "C"; description "Bumper"; object "bumper.object"; @@ -522,6 +687,11 @@ track "24977" signal "7039" { + article_number + { + vendor "Märklin"; + article "7039"; + }; indication "Hp1" { aspect 0; diff --git a/wagons.dat b/wagons.dat index 6e11068..5ba888e 100644 --- a/wagons.dat +++ b/wagons.dat @@ -2,6 +2,11 @@ scale 1 87; vehicle "46274" { + article_number + { + vendor "Märklin"; + article "46274"; + }; name "Saar Railroad Gmhs 54"; gauge 16.5; @@ -17,6 +22,12 @@ vehicle "46274" vehicle "29820-02b" { + article_number + { + vendor "Märklin"; + article "29820"; + part "02b"; + }; name "BR 50 tender"; gauge 16.5; @@ -44,6 +55,11 @@ vehicle "29820-02b" vehicle "4442" { + article_number + { + vendor "Märklin"; + article "4442"; + }; name "Z"; gauge 16.5; @@ -59,6 +75,12 @@ vehicle "4442" vehicle "29859b" { + article_number + { + vendor "Märklin"; + article "29859"; + part "b"; + }; name "Zas"; gauge 16.5; @@ -82,8 +104,14 @@ vehicle "29859b" }; }; -vehicle "100004" +vehicle "46034e" { + article_number + { + vendor "Märklin"; + article "46034"; + part "e"; + }; name "Omm 52"; gauge 16.5; @@ -99,6 +127,11 @@ vehicle "100004" vehicle "47001" { + article_number + { + vendor "Märklin"; + article "47001"; + }; name "Rs 684"; gauge 16.5; @@ -126,6 +159,11 @@ vehicle "47001" vehicle "48943" { + article_number + { + vendor "Märklin"; + article "48943"; + }; name "BTr 10"; gauge 16.5; @@ -141,6 +179,11 @@ vehicle "48943" vehicle "43222" { + article_number + { + vendor "Märklin"; + article "43222"; + }; name "B4üw 38 \"Schürzenwagen\""; gauge 16.5; @@ -166,6 +209,12 @@ vehicle "43222" vehicle "39230b" { + article_number + { + vendor "Märklin"; + article "39230"; + part "b"; + }; name "BR 23 tender"; gauge 16.5; @@ -191,6 +240,11 @@ vehicle "39230b" vehicle "43800" { + article_number + { + vendor "Märklin"; + article "43800"; + }; name "B4nzb 64 \"Silberling\""; gauge 16.5; @@ -219,6 +273,11 @@ vehicle "43800" vehicle "47072" { + article_number + { + vendor "Märklin"; + article "47042"; + }; name "Sgns 691"; gauge 16.5; @@ -246,6 +305,11 @@ vehicle "47072" vehicle "4624" { + article_number + { + vendor "Märklin"; + article "4624"; + }; name "Fals-u 176"; gauge 16.5; @@ -273,6 +337,11 @@ vehicle "4624" vehicle "4423" { + article_number + { + vendor "Märklin"; + article "4423"; + }; name "Kklm 505"; gauge 16.5; @@ -288,6 +357,11 @@ vehicle "4423" vehicle "4410" { + article_number + { + vendor "Märklin"; + article "4410"; + }; name "Gs 210"; gauge 16.5; @@ -303,6 +377,11 @@ vehicle "4410" vehicle "46977" { + article_number + { + vendor "Märklin"; + article "46977"; + }; name "Rlmmso 56"; gauge 16.5; @@ -318,6 +397,11 @@ vehicle "46977" vehicle "4699" { + article_number + { + vendor "Märklin"; + article "4699"; + }; name "Pwg 14"; gauge 16.5; @@ -333,6 +417,11 @@ vehicle "4699" vehicle "46717" { + article_number + { + vendor "Märklin"; + article "46717"; + }; name "Railway crane"; gauge 16.5; @@ -349,6 +438,11 @@ vehicle "46717" vehicle "4690" { + article_number + { + vendor "Märklin"; + article "4690"; + }; name "Eaos 106"; gauge 16.5; @@ -378,6 +472,12 @@ vehicle "4690" vehicle "37504b" { // XXX The power car is really in the middle, but that configuration isn't supported yet + article_number + { + vendor "Märklin"; + article "37504"; + part "b"; + }; name "BR 421 S-bahn"; gauge 16.5; @@ -407,6 +507,12 @@ vehicle "37504b" vehicle "37504c" { // XXX Better solution would be to allow flipping of vehicles + article_number + { + vendor "Märklin"; + article "37504"; + part "c"; + }; name "BR 420 S-bahn"; gauge 16.5; -- 2.45.2