Blob Blame Raw

#include "raster.h"


void Raster::touch(int index, Real value, Real x, Real y, Real dx, Real dy, TouchPointList &points) {
    dx = std::max(0.500001, dx);
    dy = std::max(0.500001, dy);
    int x0 = std::max(0, (int)ceil(x - dx));
    int y0 = std::max(0, (int)ceil(y - dy));
    int x1 = std::min(width, (int)ceil(x + dx));
    int y1 = std::min(height, (int)ceil(y + dy));
    dx = 1/dx;
    dy = 1/dy;
    
    for(int iy = y0; iy < y1; ++iy) {
        for(int ix = x0; ix < x1; ++ix) {
            Real ddx = (x-ix)*dx;
            Real ddy = (y-iy)*dy;
            if (ddx + ddy <= 1.00001) {
                Real &pixel = (*this)[iy][ix];
                if (pixel > value) {
                    points.push_back( TouchPoint(index, iy, ix, pixel, value) );
                    pixel = value;
                }
            }
        }
    }
}