VTK  9.3.0
vtkChartMatrix.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
3
17#ifndef vtkChartMatrix_h
18#define vtkChartMatrix_h
19
21#include "vtkChartsCoreModule.h" // For export macro
22#include "vtkRect.h" // for ivars
23#include "vtkVector.h" // For ivars
24
25#include <map> // For specific gutter
26#include <utility> // For specific gutter
27
28VTK_ABI_NAMESPACE_BEGIN
29class vtkChart;
30
31class VTKCHARTSCORE_EXPORT vtkChartMatrix : public vtkAbstractContextItem
32{
33public:
35 void PrintSelf(ostream& os, vtkIndent indent) override;
36
41
45 void Update() override;
46
50 bool Paint(vtkContext2D* painter) override;
51
57 virtual void SetSize(const vtkVector2i& size);
58
62 virtual vtkVector2i GetSize() const { return this->Size; }
63
65
68 virtual void SetBorders(int left, int bottom, int right, int top);
69 void SetBorderLeft(int value);
70 void SetBorderBottom(int value);
71 void SetBorderRight(int value);
72 void SetBorderTop(int value);
73 virtual void GetBorders(int borders[4])
74 {
75 for (int i = 0; i < 4; i++)
76 {
77 borders[i] = this->Borders[i];
78 }
79 }
81
83
86 virtual void SetGutter(const vtkVector2f& gutter);
87 void SetGutterX(float value);
88 void SetGutterY(float value);
90
92
95 virtual void SetPadding(const float& padding);
97
99
102 virtual void SetSpecificResize(const vtkVector2i& index, const vtkVector2f& resize);
103 virtual void ClearSpecificResizes();
105
109 virtual vtkVector2f GetGutter() const { return this->Gutter; }
110
114 virtual void Allocate();
115
122 virtual bool SetChart(const vtkVector2i& position, vtkChart* chart);
123
129 virtual vtkChart* GetChart(const vtkVector2i& position);
130
136 virtual bool SetChartSpan(const vtkVector2i& position, const vtkVector2i& span);
137
141 virtual vtkVector2i GetChartSpan(const vtkVector2i& position);
142
147 virtual vtkVector2i GetChartIndex(const vtkVector2f& position);
148
152 virtual std::size_t GetFlatIndex(const vtkVector2i& index);
153
157 virtual std::size_t GetNumberOfCharts();
158
164 virtual void LabelOuter(const vtkVector2i& leftBottomIdx, const vtkVector2i& rightTopIdx);
165
167
173 virtual void Link(const vtkVector2i& index1, const vtkVector2i& index2, int axis = 1);
174 virtual void Link(const size_t& flatIndex1, const size_t& flatIndex2, int axis = 1);
176
178
181 virtual void LinkAll(const vtkVector2i& index, int axis = 1);
182 virtual void LinkAll(const size_t& flatIndex, int axis = 1);
184
186
190 virtual void Unlink(const vtkVector2i& index1, const vtkVector2i& index2, int axis = 1);
191 virtual void Unlink(const size_t& flatIndex1, const size_t& flatIndex2, int axis = 1);
193
195
198 virtual void UnlinkAll(const vtkVector2i& index, int axis = 1);
199 virtual void UnlinkAll(const size_t& flatIndex, int axis = 1);
201
203
210 virtual void ResetLinks(int axis = 1);
211 virtual void ResetLinkedLayout();
213
215
219 virtual void SetRect(vtkRecti rect);
220 vtkGetMacro(Rect, vtkRecti);
222
230 virtual bool SetChartMatrix(const vtkVector2i& position, vtkChartMatrix* chartMatrix);
231
237 virtual vtkChartMatrix* GetChartMatrix(const vtkVector2i& position);
238
240
245 virtual void InitLayoutTraversal(vtkVector2i& index, vtkVector2f& offset, vtkVector2f& increment);
246 virtual void GoToNextElement(vtkVector2i& index, vtkVector2f& offset);
247 virtual bool IsDoneWithTraversal();
249
256 const vtkVector2i& index, const vtkVector2f& offset, const vtkVector2f& increment);
257
258 enum class StretchType : unsigned int
259 {
260 SCENE = 0,
261 CUSTOM
262 };
264
269 StretchType GetFillStrategy() { return this->FillStrategy; }
271
272protected:
274 ~vtkChartMatrix() override;
275
276 // The number of charts in x and y.
278
279 // The gutter between each chart.
281
282 // The padding used inside each chart
283 float Padding;
284 std::map<vtkVector2i, vtkVector2f> SpecificResize;
285 int Borders[4];
287
288 // The rectangular region to occupy. (in scene coordinates.)
289 vtkRecti Rect = { 0, 0, 100, 100 };
290 StretchType FillStrategy = StretchType::SCENE;
291
292 virtual void SynchronizeAxisRanges(vtkObject* caller, unsigned long eventId, void* calldata);
293
294private:
295 vtkChartMatrix(const vtkChartMatrix&) = delete;
296 void operator=(const vtkChartMatrix&) = delete;
297
298 class PIMPL;
299 PIMPL* Private;
300};
301
302VTK_ABI_NAMESPACE_END
303#endif // vtkChartMatrix_h
base class for items that are part of a vtkContextScene.
container for a matrix of charts.
virtual void Link(const vtkVector2i &index1, const vtkVector2i &index2, int axis=1)
The chart at index2 will be setup to mimic axis range of chart at index1 for specified axis.
StretchType GetFillStrategy()
This specifies whether the chart matrix will fill the entire scene or instead draw itself in a user p...
void SetBorderBottom(int value)
Set/get the borders of the chart matrix (space in pixels around each chart).
void SetBorderRight(int value)
Set/get the borders of the chart matrix (space in pixels around each chart).
virtual void SynchronizeAxisRanges(vtkObject *caller, unsigned long eventId, void *calldata)
virtual vtkChartMatrix * GetChartMatrix(const vtkVector2i &position)
Get the specified chart matrix element.
static vtkChartMatrix * New()
Creates a new object.
virtual void SetGutter(const vtkVector2f &gutter)
Set the gutter that should be left between the charts in the matrix.
virtual bool SetChart(const vtkVector2i &position, vtkChart *chart)
Set the chart element, note that the chart matrix must be large enough to accommodate the element bei...
virtual void GoToNextElement(vtkVector2i &index, vtkVector2f &offset)
These methods offer an API to iterate over the layout and obtain the offset of each child element (ch...
virtual vtkVector2i GetSize() const
Get the width and height of the chart matrix.
virtual void GetBorders(int borders[4])
Set/get the borders of the chart matrix (space in pixels around each chart).
vtkVector2i Size
virtual void Unlink(const vtkVector2i &index1, const vtkVector2i &index2, int axis=1)
Unlink the two charts for specified axis i.e, Chart at index2 will no longer mimic the axis range of ...
vtkVector2f Gutter
virtual vtkVector2i GetChartSpan(const vtkVector2i &position)
Get the span of the specified element.
virtual void InitLayoutTraversal(vtkVector2i &index, vtkVector2f &offset, vtkVector2f &increment)
These methods offer an API to iterate over the layout and obtain the offset of each child element (ch...
void SetBorderTop(int value)
Set/get the borders of the chart matrix (space in pixels around each chart).
virtual std::size_t GetFlatIndex(const vtkVector2i &index)
Get internal 1-D index corresponding to the 2-D element index.
virtual void Unlink(const size_t &flatIndex1, const size_t &flatIndex2, int axis=1)
Unlink the two charts for specified axis i.e, Chart at index2 will no longer mimic the axis range of ...
virtual void LinkAll(const size_t &flatIndex, int axis=1)
Link a chart to all other charts in this chart matrix for specified axis.
std::map< vtkVector2i, vtkVector2f > SpecificResize
void SetGutterY(float value)
Set the gutter that should be left between the charts in the matrix.
~vtkChartMatrix() override
virtual void UnlinkAll(const vtkVector2i &index, int axis=1)
Unlink all charts from given chart for a specified axis.
bool Paint(vtkContext2D *painter) override
Paint event for the chart matrix.
void SetGutterX(float value)
Set the gutter that should be left between the charts in the matrix.
virtual bool SetChartSpan(const vtkVector2i &position, const vtkVector2i &span)
Set the span of an element in the matrix.
virtual bool SetChartMatrix(const vtkVector2i &position, vtkChartMatrix *chartMatrix)
Set the element at position to a chart matrix, note that the chart matrix must be large enough to acc...
virtual void ResetLinkedLayout()
Unlink every chart from all other charts for a specified axis.
virtual vtkVector2f GetGutter() const
Get the gutter that should be left between the charts in the matrix.
virtual void SetRect(vtkRecti rect)
Set the rectangular region that this chart matrix will occupy.
virtual void ResetLinks(int axis=1)
Unlink every chart from all other charts for a specified axis.
virtual void SetPadding(const float &padding)
Set the gutter that should be left between the charts in the matrix.
virtual std::size_t GetNumberOfCharts()
Total number of charts within this chart matrix.
virtual void Link(const size_t &flatIndex1, const size_t &flatIndex2, int axis=1)
The chart at index2 will be setup to mimic axis range of chart at index1 for specified axis.
virtual vtkChart * GetChart(const vtkVector2i &position)
Get the specified chart element, if the element does not exist nullptr will be returned.
virtual void LabelOuter(const vtkVector2i &leftBottomIdx, const vtkVector2i &rightTopIdx)
Link all charts in the rectangle from leftBottom to rightTop.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void SetSize(const vtkVector2i &size)
Set the width and height of the chart matrix.
virtual void LinkAll(const vtkVector2i &index, int axis=1)
Link a chart to all other charts in this chart matrix for specified axis.
virtual vtkVector2i GetChartIndex(const vtkVector2f &position)
Get the position of an element in the matrix at the specified location.
virtual void SetSpecificResize(const vtkVector2i &index, const vtkVector2f &resize)
Set a specific resize that will move the bottom left point of a chart.
virtual void ClearSpecificResizes()
Set a specific resize that will move the bottom left point of a chart.
virtual vtkRectf ComputeCurrentElementSceneRect(const vtkVector2i &index, const vtkVector2f &offset, const vtkVector2f &increment)
Override this method if you want to customize layout instead of the default.
virtual void Allocate()
Allocate the charts, this will cause any null chart to be allocated.
virtual bool IsDoneWithTraversal()
These methods offer an API to iterate over the layout and obtain the offset of each child element (ch...
virtual void SetBorders(int left, int bottom, int right, int top)
Set/get the borders of the chart matrix (space in pixels around each chart).
vtkSetEnumMacro(FillStrategy, StretchType)
This specifies whether the chart matrix will fill the entire scene or instead draw itself in a user p...
void Update() override
Perform any updates to the item that may be necessary before rendering.
virtual void UnlinkAll(const size_t &flatIndex, int axis=1)
Unlink all charts from given chart for a specified axis.
void SetBorderLeft(int value)
Set/get the borders of the chart matrix (space in pixels around each chart).
Factory class for drawing 2D charts.
Definition vtkChart.h:41
Class for drawing 2D primitives to a graphical context.
a simple class to control print indentation
Definition vtkIndent.h:29
abstract base class for most VTK objects
Definition vtkObject.h:49
Some derived classes for the different vectors commonly used.
Definition vtkVector.h:411