namespace Marklin {
+void Profile::append_point(const Point &p)
+{
+ points.push_back(p);
+ if(points.size()==1)
+ {
+ min_coords = p;
+ max_coords = p;
+ }
+ else
+ {
+ min_coords.x = min(min_coords.x, p.x);
+ min_coords.y = min(min_coords.y, p.y);
+ max_coords.x = max(max_coords.x, p.x);
+ max_coords.y = max(max_coords.y, p.y);
+ }
+}
+
const Point &Profile::get_point(unsigned i) const
{
if(i>=points.size())
float dx = points[i+1].x-points[i].x;
float dy = points[i+1].y-points[i].y;
float len = sqrt(dx*dx+dy*dy);
- return Point(-dx/len, dy/len);
+ return Point(dy/len, -dx/len);
}
add("point", &Loader::point);
}
-void Profile::Loader::finish()
-{
- obj.min_coords = obj.points[0];
- obj.max_coords = obj.points[0];
- for(unsigned i=1; i<obj.points.size(); ++i)
- {
- obj.min_coords.x = min(obj.min_coords.x, obj.points[i].x);
- obj.min_coords.y = min(obj.min_coords.y, obj.points[i].y);
- obj.max_coords.x = max(obj.max_coords.x, obj.points[i].x);
- obj.max_coords.y = max(obj.max_coords.y, obj.points[i].y);
- }
-}
-
void Profile::Loader::point(float x, float y)
{
- obj.points.push_back(Point(x/1000, y/1000));
+ obj.append_point(Point(x/1000, y/1000));
}
} // namespace Marklin