VTK  9.2.6
vtkControlPointsItem.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkControlPointsItem.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
15
30
31#ifndef vtkControlPointsItem_h
32#define vtkControlPointsItem_h
33
34#include "vtkPlot.h"
35
36#include "vtkChartsCoreModule.h" // For export macro
37#include "vtkCommand.h" // For vtkCommand enum
38#include "vtkSmartPointer.h" // For SmartPointer
39#include "vtkVector.h" // For vtkVector2f
40#include <string> // Used by GetControlPointLabel
41
43class vtkContext2D;
44class vtkControlPointsAddPointItem;
46class vtkPoints2D;
47class vtkTransform2D;
48
49class VTKCHARTSCORE_EXPORT vtkControlPointsItem : public vtkPlot
50{
51public:
53 void PrintSelf(ostream& os, vtkIndent indent) override;
54
55 // Events fires by this class (and subclasses).
56 // \li CurrentPointChangedEvent is fired when the current point index is changed.
57 // \li CurrentPointEditEvent is fired to request the application to show UI to
58 // edit the current point.
59 // \li vtkCommand::StartEvent and vtkCommand::EndEvent is fired
60 // to mark groups of changes to control points.
61 enum
62 {
65 };
66
71 void GetBounds(double bounds[4]) override;
72
74
79 vtkSetVector4Macro(UserBounds, double);
80 vtkGetVector4Macro(UserBounds, double);
82
84
89 vtkSetVector4Macro(ValidBounds, double);
90 vtkGetVector4Macro(ValidBounds, double);
92
94
98 vtkGetMacro(ScreenPointRadius, float);
99 vtkSetMacro(ScreenPointRadius, float);
101
103
107 vtkGetMacro(DrawPoints, bool);
108 vtkSetMacro(DrawPoints, bool);
109 vtkBooleanMacro(DrawPoints, bool);
111
117 bool Paint(vtkContext2D* painter) override;
118
122 void SelectPoint(vtkIdType pointId);
123
129 void SelectPoint(double* currentPoint);
130
135
140
146 void DeselectPoint(double* currentPoint);
147
152
158
164 void ToggleSelectPoint(double* currentPoint);
165
169 bool SelectPoints(const vtkVector2f& min, const vtkVector2f& max) override;
170
175
180 vtkIdType FindPoint(double* pos);
181
187 bool IsOverPoint(double* pos, vtkIdType pointId);
188
193
199 void GetControlPointsIds(vtkIdTypeArray* ids, bool excludeFirstAndLast = false) const;
200
202
207 vtkSetMacro(StrokeMode, bool);
208 vtkGetMacro(StrokeMode, bool);
210
212
218 vtkSetMacro(SwitchPointsMode, bool);
219 vtkGetMacro(SwitchPointsMode, bool);
221
223
227 vtkSetMacro(EndPointsXMovable, bool);
228 vtkGetMacro(EndPointsXMovable, bool);
229 vtkSetMacro(EndPointsYMovable, bool);
230 vtkGetMacro(EndPointsYMovable, bool);
231 virtual bool GetEndPointsMovable();
233
235
239 vtkSetMacro(EndPointsRemovable, bool);
240 vtkGetMacro(EndPointsRemovable, bool);
242
244
248 vtkSetMacro(ShowLabels, bool);
249 vtkGetMacro(ShowLabels, bool);
251
253
256 vtkSetStringMacro(LabelFormat);
257 vtkGetStringMacro(LabelFormat);
259
265 virtual vtkIdType AddPoint(double* newPos) = 0;
266
272 virtual vtkIdType RemovePoint(double* pos) = 0;
273
279
284
288 virtual vtkIdType GetNumberOfPoints() const = 0;
289
295 virtual void GetControlPoint(vtkIdType index, double* point) const = 0;
296
301 virtual void SetControlPoint(vtkIdType index, double* point) = 0;
302
311 void MovePoints(const vtkVector2f& translation, vtkIdTypeArray* pointIds);
312
318 void MovePoints(const vtkVector2f& translation, bool dontMoveFirstAndLast = false);
319
328 void SpreadPoints(float factor, vtkIdTypeArray* pointIds);
329
335 void SpreadPoints(float factor, bool dontSpreadFirstAndLast = false);
336
342
347
349
352 vtkGetObjectMacro(SelectedPointPen, vtkPen);
354
356
360 vtkGetObjectMacro(SelectedPointBrush, vtkBrush);
362
364
370 vtkGetMacro(UseAddPointItem, bool);
371 vtkSetMacro(UseAddPointItem, bool);
372 vtkBooleanMacro(UseAddPointItem, bool);
374
380
386
388
391 bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
392 bool MouseDoubleClickEvent(const vtkContextMouseEvent& mouse) override;
394 bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
395 bool KeyPressEvent(const vtkContextKeyEvent& key) override;
396 bool KeyReleaseEvent(const vtkContextKeyEvent& key) override;
398
399protected:
402
404
412 virtual void emitEvent(unsigned long event, void* params = nullptr) = 0;
413
414 static void CallComputePoints(
415 vtkObject* sender, unsigned long event, void* receiver, void* params);
416
418
422 virtual void ComputePoints();
425
431 bool Hit(const vtkContextMouseEvent& mouse) override;
432
434
438 bool ClampValidDataPos(double pos[2]);
439 bool ClampValidScreenPos(double pos[2]);
441
443
449 virtual void DrawPoint(vtkContext2D* painter, vtkIdType index);
451
452 void SetCurrentPointPos(const vtkVector2f& newPos);
454 void MoveCurrentPoint(const vtkVector2f& translation);
455 vtkIdType MovePoint(vtkIdType point, const vtkVector2f& translation);
456
459
460 void Stroke(const vtkVector2f& newPos);
461 virtual void EditPoint(float vtkNotUsed(tX), float vtkNotUsed(tY));
462
466 virtual std::string GetControlPointLabel(vtkIdType index);
467
468 void AddPointId(vtkIdType addedPointId);
469
475
480
487 virtual void ComputeBounds(double* bounds);
488
496
497 double Bounds[4] = { 0., -1., 0., -1. };
498 double UserBounds[4] = { 0., -1., 0., -1. };
499 double ValidBounds[4] = { 0., -1., 0., -1. };
500
502 float ScreenPointRadius = 6.f;
503
504 bool DrawPoints = true;
505 bool StrokeMode = false;
506 bool SwitchPointsMode = false;
507 bool MouseMoved = false;
513 bool InvertShadow = false;
514 bool EndPointsXMovable = true;
515 bool EndPointsYMovable = true;
517 bool ShowLabels = false;
518 char* LabelFormat = nullptr;
519
520private:
522 void operator=(const vtkControlPointsItem&) = delete;
523
524 void ComputeBounds();
525
526 vtkIdType RemovePointId(vtkIdType removedPointId);
527
528 bool UseAddPointItem = false;
530};
531#endif
provides a brush that fills shapes drawn by vtkContext2D.
Definition vtkBrush.h:41
supports function callbacks
Class for drawing 2D primitives to a graphical context.
data structure to represent key events.
data structure to represent mouse events.
void SetCurrentPoint(vtkIdType index)
Sets the current point selected.
vtkNew< vtkCallbackCommand > Callback
virtual vtkIdType RemovePoint(double *pos)=0
Remove a point of the function.
virtual void DrawPoint(vtkContext2D *painter, vtkIdType index)
Internal function that paints a collection of points and optionally excludes some.
bool MouseButtonReleaseEvent(const vtkContextMouseEvent &mouse) override
Mouse and key events.
static void CallComputePoints(vtkObject *sender, unsigned long event, void *receiver, void *params)
vtkNew< vtkBrush > SelectedPointBrush
void SpreadPoints(float factor, bool dontSpreadFirstAndLast=false)
Utility function to spread all the control points of a given factor If dontSpreadFirstAndLast is true...
bool IsEndPointPicked()
Return true if any of the end points is current point or part of the selection.
~vtkControlPointsItem() override
bool MouseDoubleClickEvent(const vtkContextMouseEvent &mouse) override
Mouse and key events.
virtual void ComputeBounds(double *bounds)
Compute the bounds for this item.
void DeselectPoint(double *currentPoint)
Utility function that unselects a point providing its coordinates.
virtual void GetControlPoint(vtkIdType index, double *point) const =0
Returns the x and y coordinates as well as the midpoint and sharpness of the control point correspond...
vtkIdType GetCurrentPoint() const
Returns the current point ID selected or -1 if there is no point current.
friend class vtkPiecewisePointHandleItem
bool Paint(vtkContext2D *painter) override
Paint the points with a fixed size (cosmetic) which doesn't depend on the scene zoom factor.
void AddPointId(vtkIdType addedPointId)
bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse) override
Mouse and key events.
void ToggleSelectPoint(double *currentPoint)
Utility function that toggles the selection a point providing its coordinates.
vtkPlot * GetAddPointItem()
Item dedicated to add point, to be added below all other items.
void ToggleSelectPoint(vtkIdType pointId)
Toggle the selection of a point by its ID.
virtual void SetControlPoint(vtkIdType index, double *point)=0
Sets the x and y coordinates as well as the midpoint and sharpness of the control point corresponding...
void MovePoints(const vtkVector2f &translation, bool dontMoveFirstAndLast=false)
Utility function to move all the control points of the given translation If dontMoveFirstAndLast is t...
void StartInteractionIfNotStarted()
void ResetBounds()
Recompute the bounds next time they are requested.
bool IsPointRemovable(vtkIdType pointId)
Return true if the point is removable.
bool SelectPoints(const vtkVector2f &min, const vtkVector2f &max) override
Select all points in the specified rectangle.
virtual void ComputePoints()
Must be reimplemented by subclasses to calculate the points to draw.
virtual bool GetEndPointsMovable()
If EndPointsMovable is false, the two end points will not be moved.
vtkIdType RemovePoint(vtkIdType pointId)
Remove a point give its id.
bool KeyPressEvent(const vtkContextKeyEvent &key) override
Mouse and key events.
void GetBounds(double bounds[4]) override
Bounds of the item, typically the bound of all the control points except if custom bounds have been s...
vtkVector2f GetSelectionCenterOfMass() const
void MoveCurrentPoint(const vtkVector2f &translation)
void SpreadPoints(float factor, vtkIdTypeArray *pointIds)
Spread the points referred by pointIds If factor > 0, points are moved away from each other.
virtual vtkIdType AddPoint(double *newPos)=0
Add a point to the function.
virtual void emitEvent(unsigned long event, void *params=nullptr)=0
vtkIdType FindPoint(double *pos)
Returns the vtkIdType of the point given its coordinates and a tolerance based on the screen point si...
void RemoveCurrentPoint()
Remove the current point.
void SelectPoint(double *currentPoint)
Utility function that selects a point providing its coordinates.
bool Hit(const vtkContextMouseEvent &mouse) override
Returns true if the supplied x, y are within the bounds or on a control point.
void Stroke(const vtkVector2f &newPos)
virtual std::string GetControlPointLabel(vtkIdType index)
Generate label for a control point.
virtual vtkMTimeType GetControlPointsMTime()=0
Must be reimplemented by subclasses to calculate the points to draw.
void SelectAllPoints()
Select all the points.
vtkIdType SetPointPos(vtkIdType point, const vtkVector2f &newPos)
void DrawUnselectedPoints(vtkContext2D *painter)
Internal function that paints a collection of points and optionally excludes some.
bool IsOverPoint(double *pos, vtkIdType pointId)
Returns true if pos is above the pointId point, false otherwise.
vtkIdType MovePoint(vtkIdType point, const vtkVector2f &translation)
void DeselectAllPoints()
Unselect all the previously selected points.
void DrawSelectedPoints(vtkContext2D *painter)
Internal function that paints a collection of points and optionally excludes some.
virtual vtkIdType GetNumberOfPoints() const =0
Returns the total number of points.
vtkVector2f GetCenterOfMass(vtkIdTypeArray *pointIDs) const
bool ClampValidDataPos(double pos[2])
Clamp the given 2D pos into the bounds of the function.
void SetCurrentPointPos(const vtkVector2f &newPos)
void SelectPoint(vtkIdType pointId)
Select a point by its ID.
bool KeyReleaseEvent(const vtkContextKeyEvent &key) override
Mouse and key events.
vtkIdType GetControlPointId(double *pos)
Returns the id of the control point exactly matching pos, -1 if not found.
void MovePoints(const vtkVector2f &translation, vtkIdTypeArray *pointIds)
Move the points referred by pointIds by a given translation.
int GetInteractionsCount() const
vtkIdType GetNumberOfSelectedPoints() const
Return the number of selected points.
void GetControlPointsIds(vtkIdTypeArray *ids, bool excludeFirstAndLast=false) const
Utility function that returns an array of all the control points IDs Typically: [0,...
vtkNew< vtkTransform2D > ControlPointsTransform
void DeselectPoint(vtkIdType pointId)
Unselect a point by its ID.
bool ClampValidScreenPos(double pos[2])
Clamp the given 2D pos into the bounds of the function.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkNew< vtkPen > SelectedPointPen
bool MouseMoveEvent(const vtkContextMouseEvent &mouse) override
Mouse and key events.
virtual void EditPoint(float vtkNotUsed(tX), float vtkNotUsed(tY))
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition vtkIndent.h:40
Allocate and hold a VTK object.
Definition vtkNew.h:62
abstract base class for most VTK objects
Definition vtkObject.h:63
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition vtkPen.h:40
a vtkContextItem that draws handles around a point of a piecewise function
represent and manipulate 2D points
Definition vtkPoints2D.h:37
describes linear transformations via a 3x3 matrix
int vtkIdType
Definition vtkType.h:332
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:287
#define max(a, b)