17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-17 07:29:20 +02:00
Files
maszyna/vehicle/graph/graph_body.cpp

134 lines
5.1 KiB
C++

/*
This Source Code Form is subject to the
terms of the Mozilla Public License, v.
2.0. If a copy of the MPL was not
distributed with this file, You can
obtain one at
http://mozilla.org/MPL/2.0/.
*/
#include "stdafx.h"
#include "vehicle/graph/graph_body.h"
namespace vgraph
{
namespace
{
body_field number_field(std::string Key, double Default, std::string Unit, std::string Section, std::string Fizkey)
{
body_field result;
result.key = std::move(Key);
result.type = param_type::number;
result.unit = std::move(Unit);
result.default_value = param_value::make_number(Default);
result.fiz_section = std::move(Section);
result.fiz_key = std::move(Fizkey);
return result;
}
body_field text_field(std::string Key, std::string Default, std::string Section, std::string Fizkey)
{
body_field result;
result.key = std::move(Key);
result.type = param_type::text;
result.default_value = param_value::make_text(std::move(Default));
result.fiz_section = std::move(Section);
result.fiz_key = std::move(Fizkey);
return result;
}
body_field choice_field(std::string Key, std::vector<std::string> Choices, std::vector<std::string> Fizvalues, std::string Default, std::string Section, std::string Fizkey)
{
body_field result;
result.key = std::move(Key);
result.type = param_type::choice;
result.choices = std::move(Choices);
result.fiz_values = std::move(Fizvalues);
result.default_value = param_value::make_choice(std::move(Default));
result.fiz_section = std::move(Section);
result.fiz_key = std::move(Fizkey);
return result;
}
} // namespace
std::vector<body_field> const &body_schema()
{
// the defaults are the values the simulator uses when the entry is missing from the file
static std::vector<body_field> const schema{
choice_field("category", {"train", "road", "unimog", "ship"}, {"train", "road", "unimog", "ship"}, "train", "Param.", "Category"),
number_field("mass", 0.0, "kg", "Param.", "M"),
number_field("mass_rotating", 0.0, "kg", "Param.", "Mred"),
number_field("vmax", 0.0, "km/h", "Param.", "Vmax"),
number_field("power", 0.0, "kW", "Param.", "PWR"),
number_field("sand_capacity", 0.0, "kg", "Param.", "SandCap"),
number_field("heating_power", 0.0, "kW", "Param.", "HeatingP"),
number_field("length", 0.0, "m", "Dimensions:", "L"),
number_field("height", 0.0, "m", "Dimensions:", "H"),
number_field("width", 0.0, "m", "Dimensions:", "W"),
number_field("cx", 0.3, "", "Dimensions:", "Cx"),
number_field("wheel_diameter", 0.0, "m", "Wheels:", "D"),
number_field("wheel_inertia", 0.0, "kg m2", "Wheels:", "AIM"),
number_field("track_gauge", 1.435, "m", "Wheels:", "Tw"),
text_field("axle_arrangement", "", "Wheels:", "Axle"),
number_field("axle_distance", 0.0, "m", "Wheels:", "Ad"),
number_field("bogie_distance", 0.0, "m", "Wheels:", "Bd"),
number_field("min_radius", 0.0, "m", "Wheels:", "Rmin"),
choice_field("bearing", {"roll", "slide"}, {"Roll", "Slide"}, "slide", "Wheels:", "BearingType"),
text_field("coupler_type", "", "BuffCoupl.", "CType"),
number_field("coupler_kb", 0.0, "kN/m", "BuffCoupl.", "kB"),
number_field("coupler_dmax_b", 0.1, "m", "BuffCoupl.", "DmaxB"),
number_field("coupler_fmax_b", 1.0, "kN", "BuffCoupl.", "FmaxB"),
number_field("coupler_kc", 0.0, "kN/m", "BuffCoupl.", "kC"),
number_field("coupler_dmax_c", 0.1, "m", "BuffCoupl.", "DmaxC"),
number_field("coupler_fmax_c", 1.0, "kN", "BuffCoupl.", "FmaxC"),
number_field("coupler_beta", 0.0, "", "BuffCoupl.", "beta"),
number_field("coupler_allowed_flag", 3.0, "", "BuffCoupl.", "AllowedFlag"),
text_field("control_type", "", "BuffCoupl.", "ControlType"),
number_field("max_load", 0.0, "", "Load:", "MaxLoad"),
text_field("load_unit", "", "Load:", "LoadQ"),
text_field("load_accepted", "", "Load:", "LoadAccepted"),
number_field("load_speed", 0.0, "1/s", "Load:", "LoadSpeed"),
number_field("unload_speed", 0.0, "1/s", "Load:", "UnLoadSpeed"),
// three numbers, red green blue 0-255; written as LampRed, LampGreen and LampBlue
text_field("light_color", "255 255 255", "Headlights:", "Lamp"),
// current collectors; used when the graph has el.pantograph blocks
text_field("collector_type", "", "Power:", "PantType"),
number_field("collector_min_h", 0.0, "m", "Power:", "MinH"),
number_field("collector_max_h", 0.0, "m", "Power:", "MaxH"),
number_field("collector_csw", 0.0, "m", "Power:", "CSW"),
number_field("collector_max_voltage", 0.0, "V", "Power:", "MaxVoltage"),
number_field("collector_min_voltage", 0.0, "V", "Power:", "MinV"),
number_field("collector_max_current", 0.0, "A", "Power:", "MaxCurrent"),
number_field("collector_layout", 3.0, "", "Power:", "PhysicalLayout"),
};
return schema;
}
body_field const *find_body_field(std::string_view const Key)
{
for (auto const &field : body_schema())
{
if (field.key == Key)
{
return &field;
}
}
return nullptr;
}
std::vector<profile_info> const &known_profiles()
{
static std::vector<profile_info> const profiles{
{"brake_pipe", 1},
{"feed_pipe", 1},
{"heating", 1},
{"ai", 1},
};
return profiles;
}
} // namespace vgraph