using namespace std;
using namespace Msp;
-#include <iostream>
-
namespace Marklin {
Track::Track(const TrackType &t):
flex=f;
}
+void Track::check_slope()
+{
+ if(links.size()!=2)
+ return;
+
+ if(links[0] && links[1])
+ {
+ Point epp0=links[0]->get_endpoint_position(links[0]->get_endpoint_by_link(*this));
+ Point epp1=links[1]->get_endpoint_position(links[1]->get_endpoint_by_link(*this));
+ pos.z=epp0.z;
+ slope=epp1.z-pos.z;
+ }
+ else
+ {
+ slope=0;
+ if(links[0])
+ {
+ Point epp=links[0]->get_endpoint_position(links[0]->get_endpoint_by_link(*this));
+ pos.z=epp.z;
+ }
+ else if(links[1])
+ {
+ Point epp=links[1]->get_endpoint_position(links[1]->get_endpoint_by_link(*this));
+ pos.z=epp.z;
+ }
+ }
+}
+
void Track::set_turnout_id(unsigned i)
{
turnout_id=i;
return links[i];
}
-void Track::check_slope()
-{
- if(links.size()!=2)
- return;
-
- if(links[0] && links[1])
- {
- Point epp0=links[0]->get_endpoint_position(links[0]->get_endpoint_by_link(*this));
- Point epp1=links[1]->get_endpoint_position(links[1]->get_endpoint_by_link(*this));
- pos.z=epp0.z;
- slope=epp1.z-pos.z;
- }
- else
- {
- slope=0;
- if(links[0])
- {
- Point epp=links[0]->get_endpoint_position(links[0]->get_endpoint_by_link(*this));
- pos.z=epp.z;
- }
- else if(links[1])
- {
- Point epp=links[1]->get_endpoint_position(links[1]->get_endpoint_by_link(*this));
- pos.z=epp.z;
- }
- }
-}
-
int Track::traverse(unsigned i, unsigned route) const
{
const vector<Endpoint> &eps=type.get_endpoints();
return trk;
}
-/*******************
-** Track::Loader
-*/
+void Track::save(list<DataFile::Statement> &st) const
+{
+ st.push_back((DataFile::Statement("position"), pos.x, pos.y, pos.z));
+ st.push_back((DataFile::Statement("rotation"), rot));
+ st.push_back((DataFile::Statement("slope"), slope));
+ if(turnout_id)
+ st.push_back((DataFile::Statement("turnout_id"), turnout_id));
+ if(sensor_id)
+ st.push_back((DataFile::Statement("sensor_id"), sensor_id));
+ if(flex)
+ st.push_back((DataFile::Statement("flex"), true));
+}
+
Track::Loader::Loader(Track &t):
- track(t)
+ DataFile::BasicLoader<Track>(t)
{
- add("position", &Loader::position);
- add("rotation", &Track::rot);
- add("slope", &Track::slope);
- add("turnout_id", &Track::turnout_id);
- add("sensor_id", &Track::sensor_id);
- add("flex", &Track::flex);
+ add("position", &Loader::position);
+ add("rotation", &Track::rot);
+ add("slope", &Track::slope);
+ add("turnout_id", &Track::turnout_id);
+ add("sensor_id", &Track::sensor_id);
+ add("flex", &Track::flex);
}
void Track::Loader::position(float x, float y, float z)
{
- track.pos=Point(x, y, z);
+ obj.pos=Point(x, y, z);
}
} // namespace Marklin