#include "qwt3d_color.h"
#include "qwt3d_plot.h"

using namespace Qwt3D;

StandardColor::StandardColor(Plot3D *data, unsigned size) : data_(data)
{
    Q_ASSERT(data_);

    reset(size);
}

void StandardColor::reset(unsigned size)
{
    colors_ = ColorVector(size);
    RGBA elem;

    double dsize = size;

    for (unsigned int i = 0; i != size; ++i) {
        elem.r = i / dsize;
        elem.g = i / dsize / 4;
        elem.b = 1 - i / dsize;
        elem.a = 1.0;
        colors_[i] = elem;
    }
}

/**
        Assigns a new ColorVector (Also overwrites the constructors size argument)
*/
void StandardColor::setColorVector(ColorVector const &cv)
{
    colors_ = cv;
}

void StandardColor::setAlpha(double a)
{
    if (a < 0 || a > 1)
        return;

    RGBA elem;

    for (unsigned int i = 0; i != colors_.size(); ++i) {
        elem = colors_[i];
        elem.a = a;
        colors_[i] = elem;
    }
}

RGBA StandardColor::operator()(double, double, double z) const
{
    Q_ASSERT(data_);
    int index = (int)((colors_.size() - 1) * (z - data_->hull().minVertex.z)
                      / (data_->hull().maxVertex.z - data_->hull().minVertex.z));
    if (index < 0)
        index = 0;
    if ((unsigned int)index > colors_.size() - 1)
        index = (int)(colors_.size() - 1);
    return colors_[index];
}
