Chrysalis - Renderer
Loading...
Searching...
No Matches
PatternTraceRendererData.h
Go to the documentation of this file.
1#ifndef CHRYSALIS_PATTERNSPACERENDERERDATA_H
2#define CHRYSALIS_PATTERNSPACERENDERERDATA_H
3
4#include <vector>
5
6#include "Point.h"
7#include "Layout.h"
8#include "Vertex3f.h"
9#include "BaseRendererData.h"
11#include "PatternSpace.h"
12#include "observers/PatternTraceObserver.h"
13
14namespace Chrysalis {
15 class PatternTraceRendererData: public BaseObservableRendererData<Vertex3f>, public PatternTraceObserver, public PointObserver {
16 struct Arrow {
17 CG::Point baseBegin;
18 CG::Point baseEnd;
19 CG::Point leftWing;
20 CG::Point rightWing;
21 };
22 public:
23 explicit PatternTraceRendererData(BaseObservable<PatternTraceObserver>* observable,
24 const std::vector<BaseRendererObserver*>& observers);
26
27 static constexpr float POINT_RADIUS = 0.25f;
28
29 void pointMoved(const Point* point) override;
30 void pointAdded(const Point* point) override;
31 void curveAdded(const Curve* curve) override;
32 void transformed(const Transformation& transformation) override;
33 void relativePointConnectionAdded(const Point* from, const Point* to) override;
34 void relativePointConnectionRemoved(const Point* from, const Point* to) override;
35
36 size_t size() override;
37 std::vector<Vertex3f> vbo() override;
38
39 [[nodiscard]] Layout pointsLayout() const;
40 [[nodiscard]] std::vector<Layout> linesLayout() const;
41 [[nodiscard]] std::vector<Layout> arrowsLayout() const;
42
43 [[nodiscard]] const Point* pointAtPosition(float x, float y) const;
44 private:
45 static float length(const CG::Point& pointFrom, const CG::Point& pointTo);
46 static Arrow buildArrow(const CG::Point& pointFrom, const CG::Point& pointTo);
47 static CG::Point intersectionPoint(const CG::Point& pointFrom, const CG::Point& pointTo);
48
49 BaseObservable<PatternTraceObserver>* observable_;
50
51 std::vector<Vertex3f> points_;
52 std::vector<Vertex3f> arrows_;
53 std::vector<std::vector<Vertex3f>> lines_;
54
55 std::unordered_map<const Point*, int> pointIndices_;
56 std::unordered_map<const Point*, std::unordered_map<const Point*, int>> connectionsMapFrom_; // <from, <to, line index>>
57 std::unordered_map<const Point*, std::unordered_map<const Point*, int>> connectionsMapTo_; // <to, <from, line index>>
58 };
59}
60
61#endif //CHRYSALIS_PATTERNSPACERENDERERDATA_H
BaseObservableRendererData(const std::vector< BaseRendererObserver * > &observers)
Definition BaseObservableRendererData.h:11
Definition Layout.h:7
std::vector< Vertex3f > vbo() override
Definition PatternTraceRendererData.cpp:161
std::vector< Layout > linesLayout() const
Definition PatternTraceRendererData.cpp:175
~PatternTraceRendererData() override
Definition PatternTraceRendererData.cpp:14
void curveAdded(const Curve *curve) override
Definition PatternTraceRendererData.cpp:82
std::vector< Layout > arrowsLayout() const
Definition PatternTraceRendererData.cpp:186
const Point * pointAtPosition(float x, float y) const
Definition PatternTraceRendererData.cpp:146
size_t size() override
Definition PatternTraceRendererData.cpp:153
void relativePointConnectionAdded(const Point *from, const Point *to) override
Definition PatternTraceRendererData.cpp:107
Layout pointsLayout() const
Definition PatternTraceRendererData.cpp:171
PatternTraceRendererData(BaseObservable< PatternTraceObserver > *observable, const std::vector< BaseRendererObserver * > &observers)
Definition PatternTraceRendererData.cpp:8
void relativePointConnectionRemoved(const Point *from, const Point *to) override
Definition PatternTraceRendererData.cpp:125
void transformed(const Transformation &transformation) override
Definition PatternTraceRendererData.cpp:92
void pointAdded(const Point *point) override
Definition PatternTraceRendererData.cpp:75
void pointMoved(const Point *point) override
Definition PatternTraceRendererData.cpp:47
static constexpr float POINT_RADIUS
Definition PatternTraceRendererData.h:27
Definition Area.h:4