Blob Blame Raw

#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