PolygonGenerator: Finished main implementation

It's been 84 years, but the polygon generator not only works, but now has bezier support. The UI could still use some work, but this was the hardest part. I guess complex masking should be possible now, if perhaps slightly cumbersome until the UI is smoothed out.
This commit is contained in:
itsmattkc
2022-01-24 22:17:19 -08:00
parent 1e7d5a1751
commit 3f7381f7cb
14 changed files with 523 additions and 93 deletions
+17 -10
View File
@@ -21,6 +21,9 @@
#ifndef POLYGONGENERATOR_H
#define POLYGONGENERATOR_H
#include <QPainterPath>
#include "common/bezier.h"
#include "node/node.h"
#include "node/inputdragger.h"
@@ -48,26 +51,30 @@ public:
virtual void GenerateFrame(FramePtr frame, const GenerateJob &job) const override;
virtual bool HasGizmos() const override;
//virtual void DrawGizmos(NodeValueDatabase& db, QPainter *p) const override;
virtual void DrawGizmos(const NodeValueRow& row, const NodeGlobals &globals, QPainter *p) override;
//virtual bool GizmoPress(NodeValueDatabase &db, const QPointF &p) override;
//virtual void GizmoMove(const QPointF &p, const QVector2D &scale, const rational &time) override;
//virtual void GizmoRelease() override;
virtual bool GizmoPress(const NodeValueRow& row, const NodeGlobals &globals, const QPointF &p) override;
virtual void GizmoMove(const QPointF &p, const rational &time, const Qt::KeyboardModifiers &modifiers) override;
virtual void GizmoRelease(MultiUndoCommand *command) override;
static const QString kPointsInput;
static const QString kColorInput;
private:
QVector<QPointF> GetGizmoCoordinates(NodeValueDatabase &db, const QVector2D &scale) const;
static void AddPointToPath(QPainterPath *path, const Bezier &before, const Bezier &after);
QVector<QRectF> GetGizmoRects(const QVector<QPointF>& points) const;
static QPainterPath GeneratePath(const QVector<NodeValue> &points);
NodeInput* gizmo_drag_;
QPainterPath gizmo_polygon_path_;
QVector<QRectF> gizmo_position_handles_;
QVector<QRectF> gizmo_bezier_handles_;
QVector<NodeKeyframeTrackReference> gizmo_x_active_;
QVector<NodeKeyframeTrackReference> gizmo_y_active_;
QVector<NodeInputDragger> gizmo_x_draggers_;
QVector<NodeInputDragger> gizmo_y_draggers_;
QPointF gizmo_drag_start_;
NodeInputDragger gizmo_x_dragger_;
NodeInputDragger gizmo_y_dragger_;
};
}