-
Notifications
You must be signed in to change notification settings - Fork 0
/
Graph.h
204 lines (165 loc) · 8.86 KB
/
Graph.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#pragma once
/**************************************************************************************/
/* */
/* Visualization Library */
/* http://visualizationlibrary.org */
/* */
/* Copyright (c) 2005-2020, Michele Bosi */
/* All rights reserved. */
/* */
/* Redistribution and use in source and binary forms, with or without modification, */
/* are permitted provided that the following conditions are met: */
/* */
/* - Redistributions of source code must retain the above copyright notice, this */
/* list of conditions and the following disclaimer. */
/* */
/* - Redistributions in binary form must reproduce the above copyright notice, this */
/* list of conditions and the following disclaimer in the documentation and/or */
/* other materials provided with the distribution. */
/* */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND */
/* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED */
/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR */
/* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */
/* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */
/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */
/* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
/* */
/**************************************************************************************/
#include <vlGraphics/Font.hpp>
#include <vlGraphics/Renderable.hpp>
#include <vlCore/vlnamespace.hpp>
#include <vlCore/String.hpp>
#include <vlCore/Rect.hpp>
#include <map>
namespace vl
{
typedef enum
{
Graph2D = 1,
Graph3D = 2
} EGraphMode;
/**
* A Renderable that renders a graph.
* \sa
* - Actor
* - VectorGraphics
*/
class VLGRAPHICS_EXPORT Graph: public Renderable
{
VL_INSTRUMENT_CLASS(vl::Graph, Renderable)
public:
Graph(): mColor(1,1,1,1), mBorderColor(0,0,0,1), mBackgroundColor(1,1,1,1), mOutlineColor(0,0,0,1), mShadowColor(0,0,0,0.5f), mShadowVector(2,-2), mMarkerColor(1,1,1,1),
mMarkerPosition(0),mInterlineSpacing(5), mAlignment(AlignBottom|AlignLeft), mViewportAlignment(AlignBottom|AlignLeft), mMargin(5), mMode(Graph2D),
mBorderEnabled(false), mBackgroundEnabled(false), mOutlineEnabled(false), mShadowEnabled(false), mMarkerEnabled(false), mEnabled(true)
{
VL_DEBUG_SET_OBJECT_NAME()
}
void setData( const std::vector<vl::fvec2>& data ) { mData = data; }
const std::vector<vl::fvec2>& data() const { return mData; }
void setXMinMax( float xMin, float xMax ) {
mMin.x() = xMin;
mMax.x() = xMax;
}
void setYMinMax( float yMin, float yMax ) {
mMin.y() = yMin;
mMax.y() = yMax;
}
const fvec4& color() const { return mColor; }
void setColor(const fvec4& color) { mColor = color; }
const fvec4& borderColor() const { return mBorderColor; }
void setBorderColor(const fvec4& border_color) { mBorderColor = border_color; }
const fvec4& outlineColor() const { return mOutlineColor; }
void setOutlineColor(const fvec4& outline_color) { mOutlineColor = outline_color; }
const fvec4& backgroundColor() const { return mBackgroundColor; }
void setBackgroundColor(const fvec4& background_color) { mBackgroundColor = background_color; }
const fvec4& shadowColor() const { return mShadowColor; }
void setShadowColor(const fvec4& shadow_color) { mShadowColor = shadow_color; }
const fvec2& shadowVector() const { return mShadowVector; }
void setShadowVector(const fvec2& shadow_vector) { mShadowVector = shadow_vector; }
const fvec4& markerColor() const { return mMarkerColor; }
void setMarkerColor(const fvec4& marker_color) { mMarkerColor = marker_color; }
const float markerPosition() const { return mMarkerPosition; }
void setMarkerPosition( float marker_position ) { mMarkerPosition = marker_position; }
int margin() const { return mMargin; }
void setMargin(int margin) { mMargin = margin; }
const fmat4& matrix() const { return mMatrix; }
void setMatrix(const fmat4& matrix) { mMatrix = matrix; }
unsigned int alignment() const { return mAlignment; }
void setAlignment(unsigned int align) { mAlignment = align; }
unsigned int viewportAlignment() const { return mViewportAlignment; }
void setViewportAlignment(unsigned int align) { mViewportAlignment = align; }
float interlineSpacing() const { return mInterlineSpacing; }
void setInterlineSpacing(float spacing) { mInterlineSpacing = spacing; }
EGraphMode mode() const { return mMode; }
void setMode(EGraphMode mode) { mMode = mode; }
bool borderEnabled() const { return mBorderEnabled; }
void setBorderEnabled(bool border) { mBorderEnabled = border; }
bool backgroundEnabled() const { return mBackgroundEnabled; }
void setBackgroundEnabled(bool background) { mBackgroundEnabled = background; }
bool outlineEnabled() const { return mOutlineEnabled; }
void setOutlineEnabled(bool outline) { mOutlineEnabled = outline; }
bool shadowEnabled() const { return mShadowEnabled; }
void setShadowEnabled(bool shadow) { mShadowEnabled = shadow; }
bool markerEnabled() const { return mMarkerEnabled; }
void setMarkerEnabled(bool marker) { mMarkerEnabled = marker; }
void render_Implementation(const Actor* actor, const Shader* shader, const Camera* camera, OpenGLContext* gl_context) const override;
void computeBounds_Implementation() override {
setBoundingBox(AABB());
setBoundingSphere(Sphere());
}
AABB boundingRect() const;
AABB boundingRectTransformed(vec3& a, vec3& b, vec3& c, vec3& d, const Camera* camera, const Actor* actor=NULL) const;
AABB boundingRectTransformed(const Camera* camera, const Actor* actor=NULL) const;
void translate(float x, float y, float z);
void rotate(float degrees, float x, float y, float z);
void resetMatrix();
// Renderable interface implementation.
void updateDirtyBufferObject(EBufferObjectUpdateMode) override {}
void deleteBufferObject() override {}
void setSize( unsigned int width, unsigned int height ) {
mWidth = width;
mHeight = height;
}
void setEnabled( bool enabled ) {
mEnabled = enabled;
}
bool enabled() const {
return mEnabled;
}
protected:
void renderGraph(const Actor*, const Camera* camera, const fvec4& color, const fvec2& offset) const;
void renderBackground(const Actor* actor, const Camera* camera) const;
void renderBorder(const Actor* actor, const Camera* camera) const;
AABB rawboundingRect() const;
protected:
fvec4 mColor;
fvec4 mBorderColor;
fvec4 mBackgroundColor;
fvec4 mOutlineColor;
fvec4 mShadowColor;
fvec2 mShadowVector;
fvec4 mMarkerColor;
float mMarkerPosition;
fmat4 mMatrix;
float mInterlineSpacing;
unsigned int mAlignment;
unsigned int mViewportAlignment;
int mMargin;
EGraphMode mMode;
bool mBorderEnabled;
bool mBackgroundEnabled;
bool mOutlineEnabled;
bool mShadowEnabled;
bool mMarkerEnabled;
std::vector<vl::fvec2> mData;
vl::fvec2 mMin;
vl::fvec2 mMax;
unsigned int mWidth;
unsigned int mHeight;
bool mEnabled;
};
}