aboutsummaryrefslogtreecommitdiff
path: root/NvBlast/tools/CurveEditor/source/Internal/Curve/BezierSpline.h
diff options
context:
space:
mode:
Diffstat (limited to 'NvBlast/tools/CurveEditor/source/Internal/Curve/BezierSpline.h')
-rw-r--r--NvBlast/tools/CurveEditor/source/Internal/Curve/BezierSpline.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/NvBlast/tools/CurveEditor/source/Internal/Curve/BezierSpline.h b/NvBlast/tools/CurveEditor/source/Internal/Curve/BezierSpline.h
new file mode 100644
index 0000000..ba5da46
--- /dev/null
+++ b/NvBlast/tools/CurveEditor/source/Internal/Curve/BezierSpline.h
@@ -0,0 +1,57 @@
+#ifndef BEZIERSPLINE_H
+#define BEZIERSPLINE_H
+#include <vector>
+#include <QtCore/QPointF>
+#include "Spline.h"
+
+namespace nvidia {
+namespace CurveEditor {
+
+class BezierSplinePoint
+{
+public:
+ QPointF ctrlPoint0;
+ QPointF valuePoint;
+ QPointF ctrlPoint1;
+};
+
+class BezierSpline : public Spline
+{
+public:
+ static std::vector<QPointF> sample(const std::vector<BezierSplinePoint>& splinePoints, long segmentCount = 100);
+
+ BezierSpline(long segmentCount = 100);
+
+ virtual ~BezierSpline() {}
+
+ inline long getControlPointCount() { return (long)_controlPoints.size(); }
+
+ // index <= 0, return the first point;
+ // index >= point count, return the last point.
+ bool getControlPoint(int index, BezierSplinePoint &pt);
+
+ // add a spline point to last
+ void appendControlPoint(BezierSplinePoint pt);
+
+ // insert a spline point at the identified position.
+ // index <= 0, inert to fisrt;
+ // index >= point count, insert to last.
+ void insertControlPoint(int index, BezierSplinePoint pt);
+
+ // change a spline point value at the identified position.
+ bool setControlPoint(int index, BezierSplinePoint pt);
+
+ // remove the identified spline point.
+ bool removeControlPoint(int index);
+
+private:
+ virtual void _doSample();
+
+private:
+ std::vector<BezierSplinePoint> _controlPoints;
+};
+
+} // namespace CurveEditor
+} // namespace nvidia
+
+#endif // BEZIERSPLINE_H