Krita Source Code Documentation
Loading...
Searching...
No Matches
KisDynamicSensor.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#include "KisDynamicSensor.h"
7
8#include <kis_algebra_2d.h>
9#include <KisSensorData.h>
10
12 const KisSensorData &data,
13 std::optional<KisCubicCurve> curveOverride)
14 : m_id(id),
15 m_curve(curveOverride ?
16 *curveOverride :
17 KisCubicCurve(data.curve))
18{
20
21 if (m_curve->isIdentity()) {
22 m_curve = std::nullopt;
23 }
24}
25
29
31{
32 return m_id;
33}
34
36{
37 const qreal val = value(info);
38 if (m_curve) {
39 qreal scaledVal = isAdditive() ? additiveToScaling(val) :
40 isAbsoluteRotation() ? KisAlgebra2D::wrapValue(val + 0.5, 0.0, 1.0) : val;
41
42 const QVector<qreal> transfer = m_curve->floatTransfer(256);
43 scaledVal = KisCubicCurve::interpolateLinear(scaledVal, transfer);
44
45 return isAdditive() ? scalingToAdditive(scaledVal) :
46 isAbsoluteRotation() ? KisAlgebra2D::wrapValue(scaledVal + 0.5, 0.0, 1.0) : scaledVal;
47 }
48 else {
49 return val;
50 }
51}
52
54{
55 return false;
56}
57
59{
60 return false;
61}
qreal parameter(const KisPaintInformation &info) const
static qreal additiveToScaling(qreal x)
KisDynamicSensor(const KoID &id, const KisSensorData &data, std::optional< KisCubicCurve > curveOverride)
virtual bool isAdditive() const
virtual qreal value(const KisPaintInformation &info) const =0
std::optional< KisCubicCurve > m_curve
static qreal scalingToAdditive(qreal x)
virtual bool isAbsoluteRotation() const
Definition KoID.h:30
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
T wrapValue(T value, T wrapBounds)
static qreal interpolateLinear(qreal normalizedValue, const QVector< qreal > &transfer)