34 PL_DECLARE_POD_TYPE();
49 plUInt16 m_uiOriginalIndex;
64 ControlPoint& AddControlPoint(
double fPos);
70 void RecomputeExtents();
76 void QueryExtents(
double& ref_fMinx,
double& ref_fMaxx)
const;
81 void QueryExtremeValues(
double& ref_fMinVal,
double& ref_fMaxVal)
const;
84 plUInt32 GetNumControlPoints()
const;
95 void SortControlPoints();
102 double Evaluate(
double fPosition)
const;
110 double ConvertNormalizedPos(
double fPos)
const;
115 double NormalizeValue(
double value)
const;
118 plUInt64 GetHeapMemoryUsage()
const;
129 void CreateLinearApproximation(
double fMaxError = 0.01, plUInt8 uiMaxSubDivs = 8);
134 void ClampTangents();
139 void ApplyTangentModes();
142 void MakeFixedLengthTangentLeft(plUInt32 uiCpIdx);
144 void MakeFixedLengthTangentRight(plUInt32 uiCpIdx);
146 void MakeLinearTangentLeft(plUInt32 uiCpIdx);
148 void MakeLinearTangentRight(plUInt32 uiCpIdx);
150 void MakeAutoTangentLeft(plUInt32 uiCpIdx);
151 void MakeAutoTangentRight(plUInt32 uiCpIdx);
154 void RecomputeLinearApproxExtremes();
155 void ApproximateMinMaxValues(
const ControlPoint& lhs,
const ControlPoint& rhs,
double& fMinY,
double& fMaxY);
156 void ApproximateCurve(
159 double tRight,
const plVec2d& pRight,
double fMaxErrorX,
double fMaxErrorY, plInt32 iSubDivLeft);
160 plInt32 FindApproxControlPoint(
double x)
const;
162 double m_fMinX, m_fMaxX;
163 double m_fMinY, m_fMaxY;