VTK  9.1.0
vtkSplineWidget.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkSplineWidget.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 =========================================================================*/
100 #ifndef vtkSplineWidget_h
101 #define vtkSplineWidget_h
102 
103 #include "vtk3DWidget.h"
104 #include "vtkInteractionWidgetsModule.h" // For export macro
105 
106 class vtkActor;
107 class vtkCellPicker;
108 class vtkParametricSpline;
110 class vtkPlaneSource;
111 class vtkPoints;
112 class vtkPolyData;
113 class vtkProp;
114 class vtkProperty;
115 class vtkSphereSource;
116 class vtkTransform;
117 
118 #define VTK_PROJECTION_YZ 0
119 #define VTK_PROJECTION_XZ 1
120 #define VTK_PROJECTION_XY 2
121 #define VTK_PROJECTION_OBLIQUE 3
122 
123 class VTKINTERACTIONWIDGETS_EXPORT vtkSplineWidget : public vtk3DWidget
124 {
125 public:
129  static vtkSplineWidget* New();
130 
131  vtkTypeMacro(vtkSplineWidget, vtk3DWidget);
132  void PrintSelf(ostream& os, vtkIndent indent) override;
133 
135 
138  void SetEnabled(int) override;
139  void PlaceWidget(double bounds[6]) override;
140  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
142  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
143  {
144  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
145  }
147 
149 
157  vtkSetMacro(ProjectToPlane, vtkTypeBool);
158  vtkGetMacro(ProjectToPlane, vtkTypeBool);
159  vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
161 
167 
168  vtkSetClampMacro(ProjectionNormal, int, VTK_PROJECTION_YZ, VTK_PROJECTION_OBLIQUE);
169  vtkGetMacro(ProjectionNormal, int);
170  void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
171  void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
172  void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
173  void SetProjectionNormalToOblique() { this->SetProjectionNormal(3); }
174 
176 
184  vtkGetMacro(ProjectionPosition, double);
186 
195 
197 
202  vtkGetObjectMacro(HandleProperty, vtkProperty);
204  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
206 
208 
212  virtual void SetLineProperty(vtkProperty*);
213  vtkGetObjectMacro(LineProperty, vtkProperty);
215  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
217 
219 
222  virtual void SetNumberOfHandles(int npts);
223  vtkGetMacro(NumberOfHandles, int);
225 
227 
232  vtkGetMacro(Resolution, int);
234 
236 
245  vtkGetObjectMacro(ParametricSpline, vtkParametricSpline);
247 
249 
253  void SetHandlePosition(int handle, double x, double y, double z);
254  void SetHandlePosition(int handle, double xyz[3]);
255  void GetHandlePosition(int handle, double xyz[3]);
256  double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
258 
260 
267  void SetClosed(vtkTypeBool closed);
268  vtkGetMacro(Closed, vtkTypeBool);
269  vtkBooleanMacro(Closed, vtkTypeBool);
271 
277  int IsClosed();
278 
284  double GetSummedLength();
285 
293 
295 
299  vtkSetClampMacro(ProcessEvents, vtkTypeBool, 0, 1);
300  vtkGetMacro(ProcessEvents, vtkTypeBool);
301  vtkBooleanMacro(ProcessEvents, vtkTypeBool);
303 
304 protected:
306  ~vtkSplineWidget() override;
307 
308  // Manage the state of the widget
309  int State;
311  {
312  Start = 0,
318  Outside
319  };
320 
321  // handles the events
322  static void ProcessEventsHandler(
323  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
324 
325  // ProcessEventsHandler() dispatches to these methods.
332  void OnMouseMove();
333 
334  // Controlling vars
339 
340  // Projection capabilities
344 
345  // The spline
351 
352  // The line segments
354  void HighlightLine(int highlight);
356 
357  // Glyphs representing hot spots (e.g., handles)
360  void Initialize();
361  int HighlightHandle(vtkProp* prop); // returns handle index or -1 on fail
362  void SizeHandles() override;
363  void InsertHandleOnLine(double* pos);
364  void EraseHandle(const int&);
365 
366  // Do the picking
371 
372  // Register internal Pickers within PickingManager
373  void RegisterPickers() override;
374 
375  // Methods to manipulate the spline.
376  void MovePoint(double* p1, double* p2);
377  void Scale(double* p1, double* p2, int X, int Y);
378  void Translate(double* p1, double* p2);
379  void Spin(double* p1, double* p2, double* vpn);
380 
381  // Transform the control points (used for spinning)
383 
384  // Properties used to control the appearance of selected objects and
385  // the manipulator in general.
391 
392  // For efficient spinning
393  double Centroid[3];
396 
397 private:
398  vtkSplineWidget(const vtkSplineWidget&) = delete;
399  void operator=(const vtkSplineWidget&) = delete;
400 };
401 
402 #endif
an abstract superclass for 3D widgets
Definition: vtk3DWidget.h:68
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:155
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:96
a simple class to control print indentation
Definition: vtkIndent.h:113
abstract base class for most VTK objects
Definition: vtkObject.h:73
tessellate parametric functions
parametric function for 1D interpolating splines
create an array of quadrilaterals located in a plane
represent and manipulate 3D points
Definition: vtkPoints.h:143
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:67
represent surface properties of a geometric object
Definition: vtkProperty.h:171
create a polygonal sphere centered at the origin
3D widget for manipulating a spline
vtkProperty * LineProperty
vtkActor ** Handle
void EraseHandle(const int &)
vtkProperty * HandleProperty
void GetHandlePosition(int handle, double xyz[3])
Set/Get the position of the spline handles.
void SetHandlePosition(int handle, double x, double y, double z)
Set/Get the position of the spline handles.
void SetProjectionNormalToZAxes()
void PlaceWidget(double bounds[6]) override
Methods that satisfy the superclass' API.
void SizeHandles() override
void OnRightButtonDown()
static vtkSplineWidget * New()
Instantiate the object.
vtkProperty * SelectedHandleProperty
vtkSphereSource ** HandleGeometry
void PlaceWidget() override
Methods that satisfy the superclass' API.
void Spin(double *p1, double *p2, double *vpn)
void SetProjectionPosition(double position)
Set the position of spline handles and points in terms of a plane's position.
void OnRightButtonUp()
virtual void SetNumberOfHandles(int npts)
Set/Get the number of handles for this widget.
int HighlightHandle(vtkProp *prop)
virtual void SetSelectedLineProperty(vtkProperty *)
Set/Get the line properties.
void GetPolyData(vtkPolyData *pd)
Grab the polydata (including points) that defines the spline.
void CreateDefaultProperties()
void CalculateCentroid()
void SetResolution(int resolution)
Set/Get the number of line segments representing the spline for this widget.
vtkActor * CurrentHandle
void SetHandlePosition(int handle, double xyz[3])
Set/Get the position of the spline handles.
double * GetHandlePosition(int handle)
Set/Get the position of the spline handles.
void MovePoint(double *p1, double *p2)
vtkTypeBool ProcessEvents
void Scale(double *p1, double *p2, int X, int Y)
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Methods that satisfy the superclass' API.
vtkTypeBool Closed
void OnLeftButtonUp()
void InsertHandleOnLine(double *pos)
vtkParametricSpline * ParametricSpline
double GetSummedLength()
Get the approximate vs.
void SetProjectionNormalToXAxes()
void InitializeHandles(vtkPoints *points)
Convenience method to allocate and set the handles from a vtkPoints instance.
vtkCellPicker * LinePicker
vtkProperty * SelectedLineProperty
void ProjectPointsToOrthoPlane()
void SetProjectionNormalToYAxes()
vtkPlaneSource * PlaneSource
virtual void SetParametricSpline(vtkParametricSpline *)
Set the parametric spline object.
vtkTypeBool ProjectToPlane
vtkParametricFunctionSource * ParametricFunctionSource
vtkTransform * Transform
virtual void SetLineProperty(vtkProperty *)
Set/Get the line properties.
virtual void SetHandleProperty(vtkProperty *)
Set/Get the handle properties (the spheres are the handles).
void BuildRepresentation()
void SetProjectionNormalToOblique()
static void ProcessEventsHandler(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
void RegisterPickers() override
Register internal Pickers in the Picking Manager.
void SetClosed(vtkTypeBool closed)
Control whether the spline is open or closed.
void ProjectPointsToObliquePlane()
void Translate(double *p1, double *p2)
void OnLeftButtonDown()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void ProjectPointsToPlane()
void OnMiddleButtonUp()
void OnMiddleButtonDown()
void SetEnabled(int) override
Methods that satisfy the superclass' API.
void HighlightLine(int highlight)
vtkCellPicker * HandlePicker
virtual void SetSelectedHandleProperty(vtkProperty *)
Set/Get the handle properties (the spheres are the handles).
void SetPlaneSource(vtkPlaneSource *plane)
Set up a reference to a vtkPlaneSource that could be from another widget object, e....
int IsClosed()
Convenience method to determine whether the spline is closed in a geometric sense.
vtkActor * LineActor
~vtkSplineWidget() override
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
@ resolution
Definition: vtkX3D.h:472
@ points
Definition: vtkX3D.h:452
@ position
Definition: vtkX3D.h:267
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_PROJECTION_YZ
#define VTK_PROJECTION_OBLIQUE
#define VTK_SIZEHINT(...)