X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fsvgexporter.cpp;h=890112f84c5d57431ddd81f36e357b1feb46288a;hb=7d6f95321585b41bb5a6f11ff148486612bbc19e;hp=9f42ab4eacfe8c907b5218fa366982a1c56dfed8;hpb=e214fd389b9819eac0379cfb78e0f446e267b839;p=r2c2.git diff --git a/source/designer/svgexporter.cpp b/source/designer/svgexporter.cpp index 9f42ab4..890112f 100644 --- a/source/designer/svgexporter.cpp +++ b/source/designer/svgexporter.cpp @@ -19,10 +19,8 @@ void SvgExporter::save(const string &fn) { gauge = layout.get_catalogue().get_gauge()*1000; - const Profile &rail_profile = layout.get_catalogue().get_rail_profile(); - const Vector &rail_min = rail_profile.get_min_coords(); - const Vector &rail_max = rail_profile.get_max_coords(); - rail_width = (rail_max.x-rail_min.x)*1000; + // XXX This should be retrieved from track appearance + rail_width = 2; xmlpp::Document *doc = new xmlpp::Document; xmlpp::Element *root = doc->create_root_node("svg", "http://www.w3.org/2000/svg"); @@ -90,30 +88,30 @@ void SvgExporter::save_track(const Track &track, xmlpp::Element &group) const vector &parts = type.get_parts(); for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) { - TrackPoint start = i->get_point(0); - TrackPoint end = i->get_point(i->get_length()); + OrientedPoint start = i->get_point(0); + OrientedPoint end = i->get_point(i->get_length()); if(i->is_curved()) { xmlpp::Element *elem = group.add_child("path"); elem->set_attribute("class", "rail"); - Vector delta1 = rotated_vector(Vector(0, (gauge+rail_width)*0.5, 0), start.dir); - Vector delta2 = rotated_vector(Vector(0, (gauge+rail_width)*0.5, 0), end.dir); + Vector delta1 = rotated_vector(Vector(0, (gauge+rail_width)*0.5, 0), start.rotation); + Vector delta2 = rotated_vector(Vector(0, (gauge+rail_width)*0.5, 0), end.rotation); // Largely an educated guess, but seems to be accurate enough float clen = i->get_length()*1000/2.9; - Vector ctrl1 = rotated_vector(Vector(clen, 0, 0), start.dir); - Vector ctrl2 = rotated_vector(Vector(clen, 0, 0), end.dir); + Vector ctrl1 = rotated_vector(Vector(clen, 0, 0), start.rotation); + Vector ctrl2 = rotated_vector(Vector(clen, 0, 0), end.rotation); string data = format("M %.3f %.3f C %.3f %.3f %.3f %.3f %.3f %.3f") - (start.pos.x*1000+delta1.x)(-start.pos.y*1000-delta1.y) - (start.pos.x*1000+delta1.x+ctrl1.x)(-start.pos.y*1000-delta1.y-ctrl1.y) - (end.pos.x*1000+delta2.x-ctrl2.x)(-end.pos.y*1000-delta2.y+ctrl2.y) - (end.pos.x*1000+delta2.x)(-end.pos.y*1000-delta2.y).str(); + (start.position.x*1000+delta1.x)(-start.position.y*1000-delta1.y) + (start.position.x*1000+delta1.x+ctrl1.x)(-start.position.y*1000-delta1.y-ctrl1.y) + (end.position.x*1000+delta2.x-ctrl2.x)(-end.position.y*1000-delta2.y+ctrl2.y) + (end.position.x*1000+delta2.x)(-end.position.y*1000-delta2.y).str(); data += format(" M %.3f %.3f C %.3f %.3f %.3f %.3f %.3f %.3f") - (start.pos.x*1000-delta1.x)(-start.pos.y*1000+delta1.y) - (start.pos.x*1000-delta1.x+ctrl1.x)(-start.pos.y*1000+delta1.y-ctrl1.y) - (end.pos.x*1000-delta2.x-ctrl2.x)(-end.pos.y*1000+delta2.y+ctrl2.y) - (end.pos.x*1000-delta2.x)(-end.pos.y*1000+delta2.y).str(); + (start.position.x*1000-delta1.x)(-start.position.y*1000+delta1.y) + (start.position.x*1000-delta1.x+ctrl1.x)(-start.position.y*1000+delta1.y-ctrl1.y) + (end.position.x*1000-delta2.x-ctrl2.x)(-end.position.y*1000+delta2.y+ctrl2.y) + (end.position.x*1000-delta2.x)(-end.position.y*1000+delta2.y).str(); elem->set_attribute("d", data); } else @@ -121,30 +119,30 @@ void SvgExporter::save_track(const Track &track, xmlpp::Element &group) xmlpp::Element *elem = group.add_child("path"); elem->set_attribute("class", "rail"); - Vector delta = rotated_vector(Vector(0, (gauge+rail_width)*0.5, 0), start.dir); + Vector delta = rotated_vector(Vector(0, (gauge+rail_width)*0.5, 0), start.rotation); string data = format("M %.3f %.3f L %.3f %.3f", - start.pos.x*1000+delta.x, -start.pos.y*1000-delta.y, - end.pos.x*1000+delta.x, -end.pos.y*1000-delta.y); + start.position.x*1000+delta.x, -start.position.y*1000-delta.y, + end.position.x*1000+delta.x, -end.position.y*1000-delta.y); data += format(" M %.3f %.3f L %.3f %.3f", - start.pos.x*1000-delta.x, -start.pos.y*1000+delta.y, - end.pos.x*1000-delta.x, -end.pos.y*1000+delta.y); + start.position.x*1000-delta.x, -start.position.y*1000+delta.y, + end.position.x*1000-delta.x, -end.position.y*1000+delta.y); elem->set_attribute("d", data); } } - TrackPoint label_pt = parts.front().get_point(parts.front().get_length()/2); + OrientedPoint label_pt = parts.front().get_point(parts.front().get_length()/2); - label_pt.dir.wrap_with_base(-Angle::quarter_turn()); - if(label_pt.dir>Angle::quarter_turn()) - label_pt.dir -= Angle::half_turn(); + label_pt.rotation.wrap_with_base(-Angle::quarter_turn()); + if(label_pt.rotation>Angle::quarter_turn()) + label_pt.rotation -= Angle::half_turn(); - label_pt.pos *= 1000; - label_pt.pos += rotated_vector(Vector(0, -gauge*0.25, 0), label_pt.dir); + label_pt.position *= 1000; + label_pt.position += rotated_vector(Vector(0, -gauge*0.25, 0), label_pt.rotation); xmlpp::Element *elem = group.add_child("text"); elem->set_attribute("class", "artnr"); elem->set_attribute("transform", format("translate(%.3f %.3f) rotate(%.3f)", - label_pt.pos.x, -label_pt.pos.y, -label_pt.dir.degrees())); + label_pt.position.x, -label_pt.position.y, -label_pt.rotation.degrees())); elem->set_child_text(track.get_type().get_article_number().str()); }