/
MaximU
/
arraywidget
Обзор
Документация
Войти
/
MaximU
/
arraywidget
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
colormap.cpp
143 строки
3 KB
Максим
Отформатированы коментарии Doxygen к функциям/классам в стиле Qt.
03 июл 2026, 22:44
03 июл 2026, 22:44
cd11e22
Код
Авторство
О чём код?
#include "colormap.h" /*! * \brief Конструктор. */ ColorMap::ColorMap() : QwtLinearColorMap() { } /*! * \brief Деструктор. */ ColorMap::~ColorMap() { } /*! * \brief Создает копию объекта и возвращает указатель на нее. * \return Указатель на копию объекта. */ QwtColorMap *ColorMap::copy() const { ColorMap *tmp = new ColorMap(); tmp->mDefaultRgbValue = mDefaultRgbValue; tmp->mDefaultRgb = mDefaultRgb; std::copy(mGradientRgb, mGradientRgb + GradientSize, tmp->mGradientRgb); return tmp; } /*! * \brief Возвращает значение RGB, соответствующее значению в диапазоне. * \param interval Диапазон значений. * \param value Значение. * \return Значение RGB, соответствующее значению. */ QRgb ColorMap::rgb(const QwtInterval &interval, double value) const { if (qIsNaN(value) || qIsInf(value)) { return InvalidValueRgb; } if (value == mDefaultRgbValue) { return mDefaultRgb; } if (value < interval.minValue()) { return mGradientRgb[0]; } if (value > interval.maxValue()) { return mGradientRgb[GradientSize - 1]; } int index = int((value - interval.minValue()) / (interval.maxValue() - interval.minValue()) * (GradientSize - 1) + 0.5); return mGradientRgb[index]; } /*! * \brief Cтроит вектор из GradientSize цветов. */ void ColorMap::initGradient() { QwtInterval interval = QwtInterval(0, GradientSize); for (int i = 0; i < GradientSize; i ++) { mGradientRgb[i] = QwtLinearColorMap::rgb(interval, i); } } /*! * \brief Устанавливает значение цвета, возвращаемого для значения DefaultRgbValue. * \param color Значение цвета. */ void ColorMap::setDefaultColor(QColor color) { mDefaultRgb = color.rgb(); } /*! * \brief Устанавливает цвета, используемые в градиенте. * \param colors Цвета, используемые в градиенте. */ void ColorMap::setGradientColors(QList<QColor> colors) { if (colors.size() < 2) { colors.append(colors.first()); } setColorInterval(colors.first(), colors.last()); double step = 1.0 / (colors.size() - 1); for (int i = 1; i < colors.size() - 1; i ++) { addColorStop(step * i, colors.at(i)); } initGradient(); } /*! * \brief Отрисовывает градиент. * \param painter Указатель на QPainter. * \param rect Область рисования градиента. * \param orientation Ориентация градиента. */ void ColorMap::drawGradient(QPainter *painter, const QRect &rect, ColorMap::Orientation orientation) { if (orientation == ColorMap::Vertical) { float y = rect.bottom(); float dy = (float)(rect.height() - 1) / GradientSize; for (int i = 0; i < GradientSize; i ++) { QColor color = mGradientRgb[i]; painter->setPen(color); painter->setBrush(color); painter->drawRect(rect.left(), (int)y, rect.width(), dy); y -= dy; } painter->setPen(Qt::black); painter->setBrush(Qt::NoBrush); painter->drawRect(rect.x(), rect.y(), rect.width(), rect.height()); } else { // not implemented yet. } }