Krita Source Code Documentation
Loading...
Searching...
No Matches
KisCurveOption Class Reference

#include <KisCurveOption.h>

+ Inheritance diagram for KisCurveOption:

Classes

struct  ValueComponents
 

Public Member Functions

qreal computeRotationLikeValue (const KisPaintInformation &info, qreal baseValue, bool absoluteAxesFlipped, qreal scalingPartCoeff, bool disableScalingPart) const
 
qreal computeSizeLikeValue (const KisPaintInformation &info, bool useStrengthValue=true) const
 
ValueComponents computeValueComponents (const KisPaintInformation &info, bool useStrengthValue) const
 
bool isChecked () const
 
bool isRandom () const
 
 KisCurveOption (const KisCurveOptionData &data)
 
 KisCurveOption (KisCurveOption &)=delete
 
KisCurveOptionoperator= (KisCurveOption &)=delete
 
qreal strengthMaxValue () const
 
qreal strengthMinValue () const
 
qreal strengthValue () const
 

Private Attributes

int m_curveMode
 
bool m_isChecked
 
std::vector< std::unique_ptr< KisDynamicSensor > > m_sensors
 
qreal m_strengthMaxValue
 
qreal m_strengthMinValue
 
qreal m_strengthValue
 
bool m_useCurve
 

Detailed Description

Definition at line 17 of file KisCurveOption.h.

Constructor & Destructor Documentation

◆ KisCurveOption() [1/2]

KisCurveOption::KisCurveOption ( const KisCurveOptionData & data)

Definition at line 91 of file KisCurveOption.cpp.

◆ KisCurveOption() [2/2]

KisCurveOption::KisCurveOption ( KisCurveOption & )
delete

Member Function Documentation

◆ computeRotationLikeValue()

qreal KisCurveOption::computeRotationLikeValue ( const KisPaintInformation & info,
qreal baseValue,
bool absoluteAxesFlipped,
qreal scalingPartCoeff,
bool disableScalingPart ) const

Definition at line 171 of file KisCurveOption.cpp.

172{
173 const ValueComponents components = computeValueComponents(info, true);
174 return components.rotationLikeValue(baseValue, absoluteAxesFlipped, scalingPartCoeff, disableScalingPart);
175}
ValueComponents computeValueComponents(const KisPaintInformation &info, bool useStrengthValue) const

References computeValueComponents(), and KisCurveOption::ValueComponents::rotationLikeValue().

◆ computeSizeLikeValue()

qreal KisCurveOption::computeSizeLikeValue ( const KisPaintInformation & info,
bool useStrengthValue = true ) const

Definition at line 165 of file KisCurveOption.cpp.

166{
167 const ValueComponents components = computeValueComponents(info, useStrengthValue);
168 return components.sizeLikeValue();
169}

References computeValueComponents(), and KisCurveOption::ValueComponents::sizeLikeValue().

◆ computeValueComponents()

KisCurveOption::ValueComponents KisCurveOption::computeValueComponents ( const KisPaintInformation & info,
bool useStrengthValue ) const

Uses the curves set on the sensors to compute a single double value that can control the parameters of a brush.

This value is derives from the values stored in ValuesComponents object.

Definition at line 102 of file KisCurveOption.cpp.

103{
104 ValueComponents components;
105
106 if (m_useCurve) {
107 QList<double> sensorValues;
108 for (auto i = m_sensors.cbegin(); i != m_sensors.cend(); ++i) {
109 KisDynamicSensor *s(i->get());
110
111 qreal valueFromCurve = s->parameter(info);
112 if (s->isAdditive()) {
113 components.additive += valueFromCurve;
114 components.hasAdditive = true;
115 } else if (s->isAbsoluteRotation()) {
116 components.absoluteOffset = valueFromCurve;
117 components.hasAbsoluteOffset =true;
118 } else {
119 sensorValues << valueFromCurve;
120 components.hasScaling = true;
121 }
122 }
123
124 if (sensorValues.count() == 1) {
125 components.scaling = sensorValues.first();
126 } else if (sensorValues.count() > 1) {
127
128 if (m_curveMode == 1){ // add
129 components.scaling = 0;
130 double i;
131 foreach (i, sensorValues) {
132 components.scaling += i;
133 }
134 } else if (m_curveMode == 2){ //max
135 components.scaling = *std::max_element(sensorValues.begin(), sensorValues.end());
136
137 } else if (m_curveMode == 3){ //min
138 components.scaling = *std::min_element(sensorValues.begin(), sensorValues.end());
139
140 } else if (m_curveMode == 4){ //difference
141 double max = *std::max_element(sensorValues.begin(), sensorValues.end());
142 double min = *std::min_element(sensorValues.begin(), sensorValues.end());
143 components.scaling = max-min;
144
145 } else { //multiply - default
146 double i;
147 foreach (i, sensorValues) {
148 components.scaling *= i;
149 }
150 }
151 }
152
153 }
154
155 if (useStrengthValue) {
156 components.constant = m_strengthValue;
157 }
158
159 components.minSizeLikeValue = m_strengthMinValue;
160 components.maxSizeLikeValue = m_strengthMaxValue;
161
162 return components;
163}
T min(T a, T b, T c)
constexpr std::enable_if< sizeof...(values)==0, size_t >::type max()

References KisCurveOption::ValueComponents::absoluteOffset, KisCurveOption::ValueComponents::additive, KisCurveOption::ValueComponents::constant, KisCurveOption::ValueComponents::hasAbsoluteOffset, KisCurveOption::ValueComponents::hasAdditive, KisCurveOption::ValueComponents::hasScaling, KisDynamicSensor::isAbsoluteRotation(), KisDynamicSensor::isAdditive(), m_curveMode, m_sensors, m_strengthMaxValue, m_strengthMinValue, m_strengthValue, m_useCurve, KisCurveOption::ValueComponents::maxSizeLikeValue, KisCurveOption::ValueComponents::minSizeLikeValue, KisDynamicSensor::parameter(), and KisCurveOption::ValueComponents::scaling.

◆ isChecked()

bool KisCurveOption::isChecked ( ) const

Definition at line 192 of file KisCurveOption.cpp.

193{
194 return m_isChecked;
195}

References m_isChecked.

◆ isRandom()

bool KisCurveOption::isRandom ( ) const

Definition at line 197 of file KisCurveOption.cpp.

198{
199 for (auto it = m_sensors.begin(); it != m_sensors.end(); ++it) {
200 const KisDynamicSensor *sensor = it->get();
201 if (sensor->id() == FuzzyPerDabId || sensor->id() == FuzzyPerStrokeId) return true;
202 }
203 return false;
204}
const KoID FuzzyPerStrokeId("fuzzystroke", ki18nc("Context: dynamic sensors", "Fuzzy Stroke"))
generate a random number
const KoID FuzzyPerDabId("fuzzy", ki18nc("Context: dynamic sensors", "Fuzzy Dab"))
generate a random number

References FuzzyPerDabId(), FuzzyPerStrokeId(), KisDynamicSensor::id(), and m_sensors.

◆ operator=()

KisCurveOption & KisCurveOption::operator= ( KisCurveOption & )
delete

◆ strengthMaxValue()

qreal KisCurveOption::strengthMaxValue ( ) const

Definition at line 187 of file KisCurveOption.cpp.

188{
189 return m_strengthMaxValue;
190}

References m_strengthMaxValue.

◆ strengthMinValue()

qreal KisCurveOption::strengthMinValue ( ) const

Definition at line 182 of file KisCurveOption.cpp.

183{
184 return m_strengthMinValue;
185}

References m_strengthMinValue.

◆ strengthValue()

qreal KisCurveOption::strengthValue ( ) const

Definition at line 177 of file KisCurveOption.cpp.

178{
179 return m_strengthValue;
180}

References m_strengthValue.

Member Data Documentation

◆ m_curveMode

int KisCurveOption::m_curveMode
private

Definition at line 68 of file KisCurveOption.h.

◆ m_isChecked

bool KisCurveOption::m_isChecked
private

Definition at line 66 of file KisCurveOption.h.

◆ m_sensors

std::vector<std::unique_ptr<KisDynamicSensor> > KisCurveOption::m_sensors
private

Definition at line 72 of file KisCurveOption.h.

◆ m_strengthMaxValue

qreal KisCurveOption::m_strengthMaxValue
private

Definition at line 71 of file KisCurveOption.h.

◆ m_strengthMinValue

qreal KisCurveOption::m_strengthMinValue
private

Definition at line 70 of file KisCurveOption.h.

◆ m_strengthValue

qreal KisCurveOption::m_strengthValue
private

Definition at line 69 of file KisCurveOption.h.

◆ m_useCurve

bool KisCurveOption::m_useCurve
private

Definition at line 67 of file KisCurveOption.h.


The documentation for this class was generated from the following files: