25 #ifndef AAX_CPIECEWISELINEARTAPERDELEGATE_H
26 #define AAX_CPIECEWISELINEARTAPERDELEGATE_H
57 template <
typename T,
int32_t RealPrecision=100>
83 T
Round(
double iValue)
const;
86 double* mNormalizedValues;
93 template <
typename T,
int32_t RealPrecision>
96 if (RealPrecision > 0)
97 return static_cast<T
>(floor(iValue * RealPrecision + 0.5) / RealPrecision);
99 return static_cast<T
>(iValue);
102 template <
typename T,
int32_t RealPrecision>
104 mNormalizedValues(0),
110 mNormalizedValues =
new double[numValues];
111 mRealValues =
new T[numValues];
112 mNumValues = numValues;
116 mMaxValue = realValues[0];
117 mMinValue = realValues[0];
119 for (int32_t i=0; i< numValues; i++)
121 mNormalizedValues[i] = normalizedValues[i];
122 mRealValues[i] = realValues[i];
123 if (mRealValues[i] > mMaxValue)
124 mMaxValue = mRealValues[i];
125 if (mRealValues[i] < mMinValue)
126 mMinValue = mRealValues[i];
130 template <
typename T,
int32_t RealPrecision>
132 mNormalizedValues(0),
138 mNormalizedValues =
new double[other.mNumValues];
139 mRealValues =
new T[other.mNumValues];
140 mNumValues = other.mNumValues;
141 mMaxValue = other.mMaxValue;
142 mMinValue = other.mMinValue;
143 for (int32_t i=0; i< mNumValues; i++)
145 mNormalizedValues[i] = other.mNormalizedValues[i];
146 mRealValues[i] = other.mRealValues[i];
150 template <
typename T,
int32_t RealPrecision>
154 delete [] mNormalizedValues;
155 delete [] mRealValues;
159 template <
typename T,
int32_t RealPrecision>
165 template <
typename T,
int32_t RealPrecision>
168 if (mMinValue == mMaxValue)
172 value = Round(value);
174 const T& highValue = mMaxValue > mMinValue ? mMaxValue : mMinValue;
175 const T& lowValue = mMaxValue > mMinValue ? mMinValue : mMaxValue;
177 if (value > highValue)
179 if (value < lowValue)
185 template <
typename T,
int32_t RealPrecision>
190 if (normalizedValue > 1.0)
191 normalizedValue = 1.0;
192 if (normalizedValue < 0.0)
193 normalizedValue = 0.0;
196 int32_t mLowerIndex = 0;
197 int32_t mUpperIndex = 0;
198 for (int32_t i=1;i<mNumValues;i++)
201 if (mNormalizedValues[i] >= normalizedValue)
207 double delta = normalizedValue - mNormalizedValues[mLowerIndex];
208 double slope = double(mRealValues[mUpperIndex] - mRealValues[mLowerIndex]) / (mNormalizedValues[mUpperIndex] - mNormalizedValues[mLowerIndex]);
209 double interpolatedValue = mRealValues[mLowerIndex] + (delta * slope);
210 return ConstrainRealValue(
static_cast<T
>(interpolatedValue));
213 template <
typename T,
int32_t RealPrecision>
216 realValue = ConstrainRealValue(realValue);
219 int32_t mLowerIndex = 0;
220 int32_t mUpperIndex = 0;
221 if (mRealValues[0] < mRealValues[mNumValues-1])
224 for (int32_t i=1;i<mNumValues;i++)
227 if (mRealValues[i] >= realValue)
235 for (int32_t i=1;i<mNumValues;i++)
238 if (mRealValues[i] <= realValue)
245 double delta = realValue - mRealValues[mLowerIndex];
246 double slope = (mRealValues[mUpperIndex] == mRealValues[mLowerIndex]) ? 0.5 :
double(mNormalizedValues[mUpperIndex] - mNormalizedValues[mLowerIndex]) / (mRealValues[mUpperIndex] - mRealValues[mLowerIndex]);
247 double interpolatedValue = mNormalizedValues[mLowerIndex] + (delta * slope);
248 return static_cast<T
>(interpolatedValue);
Various utility definitions for AAX.
#define AAX_OVERRIDE
override keyword macro
Definition: AAX.h:141
Defines the taper conversion behavior for a parameter.
A piece-wise linear taper conforming to AAX_ITaperDelegate.
Definition: AAX_CPieceWiseLinearTaperDelegate.h:59
T GetMaximumValue() const AAX_OVERRIDE
Returns the taper's maximum real value.
Definition: AAX_CPieceWiseLinearTaperDelegate.h:77
AAX_CPieceWiseLinearTaperDelegate(const double *normalizedValues, const T *realValues, int32_t numValues)
Constructs a Piece-wise Linear Taper with paired normalized and real values.
Definition: AAX_CPieceWiseLinearTaperDelegate.h:103
T GetMinimumValue() const AAX_OVERRIDE
Returns the taper's minimum real value.
Definition: AAX_CPieceWiseLinearTaperDelegate.h:76
~AAX_CPieceWiseLinearTaperDelegate()
Definition: AAX_CPieceWiseLinearTaperDelegate.h:151
double RealToNormalized(T realValue) const AAX_OVERRIDE
Normalizes a real parameter value.
Definition: AAX_CPieceWiseLinearTaperDelegate.h:214
T Round(double iValue) const
Definition: AAX_CPieceWiseLinearTaperDelegate.h:94
T NormalizedToReal(double normalizedValue) const AAX_OVERRIDE
Converts a normalized value to a real value.
Definition: AAX_CPieceWiseLinearTaperDelegate.h:186
AAX_CPieceWiseLinearTaperDelegate< T, RealPrecision > * Clone() const AAX_OVERRIDE
Constructs and returns a copy of the taper delegate.
Definition: AAX_CPieceWiseLinearTaperDelegate.h:160
T ConstrainRealValue(T value) const AAX_OVERRIDE
Applies a contraint to the value and returns the constrained value.
Definition: AAX_CPieceWiseLinearTaperDelegate.h:166
Classes for conversion to and from normalized parameter values.
Definition: AAX_ITaperDelegate.h:89