#ifndef SIMULATOR_H
#define SIMULATOR_H
#include <algorithm>
#include "track.h"
#include "raster.h"
class Simulator {
public:
virtual ~Simulator() { }
virtual void simulate(const Track &track, Real tool_radius) = 0;
virtual void scroll_to(int index) = 0;
virtual void draw() const = 0;
};
class SimulatorXYZA: public Simulator {
private:
TouchPointList points;
int simu_index;
public:
Real x0;
Real x1;
Raster raster;
SimulatorXYZA(): simu_index(), x0(), x1() { }
SimulatorXYZA(int xpixels, int ypixels):
SimulatorXYZA()
{ resize(xpixels, ypixels); }
const TouchPointList& get_points() const { return points; }
int get_simu_index() const { return simu_index; }
int get_index() const { return simu_index <= 0 ? -1 : points[simu_index-1].index; }
void resize(int xpixels, int ypixels) {
points.clear();
simu_index = 0;
raster.resize(xpixels, ypixels);
}
void simulate(const Track &track, Real tool_radius);
void scroll_to(int index);
void draw() const;
};
#endif