Tulip 5.7.1
Large graphs analysis and drawing
Loading...
Searching...
No Matches
GlAxis.h
1/*
2 *
3 * This file is part of Tulip (https://tulip.labri.fr)
4 *
5 * Authors: David Auber and the Tulip development Team
6 * from LaBRI, University of Bordeaux
7 *
8 * Tulip is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation, either version 3
11 * of the License, or (at your option) any later version.
12 *
13 * Tulip is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 * See the GNU General Public License for more details.
17 *
18 */
19
20#ifndef GLAXIS_H_
21#define GLAXIS_H_
22
23#include <tulip/GlComposite.h>
24#include <tulip/Color.h>
25
26const float DEFAULT_GRAD_WIDTH = 6.;
27
28const float MAGIG_FACTOR = (1.f / (1.3f));
29
30namespace tlp {
31
32class GlLabel;
33
34/**
35 * @ingroup OpenGL
36 * @brief A base class to draw an axis with graduations
37 *
38 * This class allow to render an axis with graduations. This class is there for code factorisation
39 * and should not be used directly. Use derivated classes instead : GlQuantitativeAxis for a
40 * numerical
41 * graduated axis and GlNominativeAxis for a string graduated axis
42 */
43class TLP_GL_SCOPE GlAxis : public GlComposite {
44
45public:
46 enum AxisOrientation { HORIZONTAL_AXIS, VERTICAL_AXIS };
47
48 enum LabelPosition { LEFT_OR_BELOW, RIGHT_OR_ABOVE };
49 enum CaptionLabelPosition { LEFT, RIGHT, BELOW, ABOVE };
50
51 /**
52 * @brief GlAxis constructor
53 *
54 * @param axisName the name of the axis
55 * @param axisBaseCoord the base coord of the axis (if the axis is horizontal, it is the the left
56 * end, if vertical it is the down end)
57 * @param axisLength the length of the axis
58 * @param axisOrientation the orientation of the axis, 2 possible values (HORIZONTAL_AXIS or
59 * VERTICAL_AXIS)
60 * @param axisColor the color of the axis
61 */
62 GlAxis(const std::string &axisName, const Coord &axisBaseCoord, const float axisLength,
63 const AxisOrientation &axisOrientation, const Color &axisColor);
64
65 /**
66 * @brief GlAxis destructor
67 */
68 ~GlAxis() override;
69
70 /**
71 * @brief Method which returns the base coordinates of the axis
72 */
73 const Coord &getAxisBaseCoord() const {
74 return axisBaseCoord;
75 }
76 /**
77 * @brief Method which returns the length of the axis
78 */
79 float getAxisLength() const {
80 return axisLength;
81 }
82 /**
83 * @brief Method which returns the name of the axis
84 */
85 const std::string &getAxisName() const {
86 return axisName;
87 }
88 /**
89 * @brief Method which returns the orientation of the axis
90 */
91 AxisOrientation getAxisOrientation() const {
92 return axisOrientation;
93 }
94 /**
95 * @brief Method which returns the width of the axis graduations
96 */
97 float getAxisGradsWidth() const {
98 return axisGradsWidth;
99 }
100 /**
101 * @brief Method which returns the distance between the axis graduations
102 */
104 return spaceBetweenAxisGrads;
105 }
106 /**
107 * @brief Method which returns the axis graduations labels height
108 */
109 float getLabelHeight() const {
110 return labelHeight;
111 }
112
113 /**
114 * @brief Method which returns the max axis graduations labels width
115 */
116 float getMaxLabelWidth() const {
117 return maxGraduationLabelWidth;
118 }
119
120 /**
121 * @brief Method which returns the color of the axis
122 */
123 Color getAxisColor() const {
124 return axisColor;
125 }
126
127 /**
128 * @brief Method to set the axis name
129 */
130 void setAxisName(const std::string &axisName) {
131 this->axisName = axisName;
132 }
133 /**
134 * @brief Method to set the axis length
135 */
136 void setAxisLength(const float axisLength) {
137 this->axisLength = axisLength;
138 }
139 /**
140 * @brief Method to set the axis color
141 */
142 void setAxisColor(const Color &axisColor) {
143 this->axisColor = axisColor;
144 }
145 /**
146 * @brief Methods to set the axis graduations Width
147 */
148 void setAxisGradsWidth(const float axisGradsWidth) {
149 this->axisGradsWidth = axisGradsWidth;
150 }
151
152 /**
153 * @brief Methods to set the max caption width
154 */
155 void setMaxCaptionWidth(const float maxCaptionWidth) {
156 this->maxCaptionWidth = maxCaptionWidth;
157 }
158
159 /**
160 * @brief Method to update the axis drawing.
161 *
162 * It has to be called when one (ore more) of the setters methods above has been used
163 * This method erase the whole axis drawing and redraw the axis line and the caption (if any)
164 * The axis graduations have to be reset by calling setAxisGraduations
165 */
166 virtual void updateAxis();
167
168 /**
169 * @brief Method to set the axis graduations. No need to call updateAxis after calling this
170 * method.
171 *
172 * @param axisGradsLabels the labels of the graduations, they will be equally spaced on the axis
173 * @param axisGradsLabelsPosition the relative position of the axis graduations label. Two
174 * possible values : LEFT_OR_BELOW (if the axis is horizontal, labels will be on the left of the
175 * axis, otherwise below) or RIGHT_OR_ABOVE
176 *
177 */
178 void setAxisGraduations(const std::vector<std::string> &axisGradsLabels,
179 const LabelPosition &axisGradsLabelsPosition = LEFT_OR_BELOW);
180
181 void setAxisGraduationsMaxLabelWidth(const float maxWidth) {
182 maxGraduationLabelWidth = maxWidth;
183 }
184
185 /**
186 * @brief Method which adds a caption to the axis. No need to call updateAxis after calling this
187 * method.
188 *
189 * @param captionPos the relative position of the caption. Two possible values : LEFT_OR_BELOW (if
190 * the axis is vertical, caption will be below of the axis, otherwise on the left) or
191 * RIGHT_OR_ABOVE
192 * @param captionHeight the caption text height
193 * @param captionFrame if true the caption will be framed
194 * @param maxCaptionWidth fill this parameter if you want to restrain the caption width
195 * @param captionOffset fill this parameter if you want to fix the offset between the axis and the
196 * caption
197 * @param caption if this parameter is filled, use this value as caption text, otherwise the
198 * caption text will be the axis name
199 */
200 void addCaption(const CaptionLabelPosition &captionPos, const float captionHeight,
201 const bool captionFrame = false, const float maxCaptionWidth = 0,
202 const float captionOffset = 0, const std::string caption = "");
203
204 /**
205 * @brief Method to set the axis graduations labels size.
206 *
207 * This method can be used if you want axis with same labels size
208 *
209 * @param height the height for labels
210 *
211 */
212 void setGradsLabelsHeight(float height);
213
214 void translate(const Coord &c) override;
215
216 float getCaptionHeight() const;
217
218 void setCaptionHeight(float height, bool frame);
219
220private:
221 void buildAxisLine();
222
223protected:
224 void computeBoundingBox();
225 virtual Coord computeCaptionCenter(const bool captionFrame);
226 virtual void computeCaptionSize(float height);
227 void addAxisCaption(const Coord &captionLabelCenter, const bool captionFrame);
228
229 std::string axisName;
230 Coord axisBaseCoord;
231 float axisLength;
232 AxisOrientation axisOrientation;
233 LabelPosition axisGradsPosition;
234 Color axisColor;
235 float axisGradsWidth;
236 float spaceBetweenAxisGrads;
237 float captionWidth;
238 float captionHeight;
239 float baseCaptionHeight;
240 bool captionFrame;
241 std::string captionText;
242 GlLabel *captionLabel;
243 float labelHeight;
244 float captionOffset;
245 GlComposite *axisLinesComposite;
246 GlComposite *captionComposite;
247 GlComposite *gradsComposite;
248 std::vector<GlLabel *> gradsLabelsVector;
249 bool captionSet;
250 CaptionLabelPosition captionPosition;
251 float maxCaptionWidth;
252 float maxGraduationLabelWidth;
253};
254} // namespace tlp
255
256#endif /* GLAXIS_H_ */
A base class to draw an axis with graduations.
Definition: GlAxis.h:43
Color getAxisColor() const
Method which returns the color of the axis.
Definition: GlAxis.h:123
void setAxisGradsWidth(const float axisGradsWidth)
Methods to set the axis graduations Width.
Definition: GlAxis.h:148
float getAxisGradsWidth() const
Method which returns the width of the axis graduations.
Definition: GlAxis.h:97
void setAxisLength(const float axisLength)
Method to set the axis length.
Definition: GlAxis.h:136
const std::string & getAxisName() const
Method which returns the name of the axis.
Definition: GlAxis.h:85
float getAxisLength() const
Method which returns the length of the axis.
Definition: GlAxis.h:79
AxisOrientation getAxisOrientation() const
Method which returns the orientation of the axis.
Definition: GlAxis.h:91
GlAxis(const std::string &axisName, const Coord &axisBaseCoord, const float axisLength, const AxisOrientation &axisOrientation, const Color &axisColor)
GlAxis constructor.
void setMaxCaptionWidth(const float maxCaptionWidth)
Methods to set the max caption width.
Definition: GlAxis.h:155
void setGradsLabelsHeight(float height)
Method to set the axis graduations labels size.
const Coord & getAxisBaseCoord() const
Method which returns the base coordinates of the axis.
Definition: GlAxis.h:73
void addCaption(const CaptionLabelPosition &captionPos, const float captionHeight, const bool captionFrame=false, const float maxCaptionWidth=0, const float captionOffset=0, const std::string caption="")
Method which adds a caption to the axis. No need to call updateAxis after calling this method.
void setAxisGraduations(const std::vector< std::string > &axisGradsLabels, const LabelPosition &axisGradsLabelsPosition=LEFT_OR_BELOW)
Method to set the axis graduations. No need to call updateAxis after calling this method.
virtual void updateAxis()
Method to update the axis drawing.
float getMaxLabelWidth() const
Method which returns the max axis graduations labels width.
Definition: GlAxis.h:116
void setAxisName(const std::string &axisName)
Method to set the axis name.
Definition: GlAxis.h:130
float getLabelHeight() const
Method which returns the axis graduations labels height.
Definition: GlAxis.h:109
float getSpaceBetweenAxisGrads() const
Method which returns the distance between the axis graduations.
Definition: GlAxis.h:103
~GlAxis() override
GlAxis destructor.
void setAxisColor(const Color &axisColor)
Method to set the axis color.
Definition: GlAxis.h:142
GlSimpleEntity used to aggregate other GlEntity.
Definition: GlComposite.h:39
Create a label into Tulip 3D engine.
Definition: GlLabel.h:46