VTK  9.0.1
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 =========================================================================*/
81 #ifndef vtkSplineWidget_h
82 #define vtkSplineWidget_h
83 
84 #include "vtk3DWidget.h"
85 #include "vtkInteractionWidgetsModule.h" // For export macro
86 
87 class vtkActor;
88 class vtkCellPicker;
91 class vtkPlaneSource;
92 class vtkPoints;
93 class vtkPolyData;
94 class vtkProp;
95 class vtkProperty;
96 class vtkSphereSource;
97 class vtkTransform;
98 
99 #define VTK_PROJECTION_YZ 0
100 #define VTK_PROJECTION_XZ 1
101 #define VTK_PROJECTION_XY 2
102 #define VTK_PROJECTION_OBLIQUE 3
103 
104 class VTKINTERACTIONWIDGETS_EXPORT vtkSplineWidget : public vtk3DWidget
105 {
106 public:
110  static vtkSplineWidget* New();
111 
112  vtkTypeMacro(vtkSplineWidget, vtk3DWidget);
113  void PrintSelf(ostream& os, vtkIndent indent) override;
114 
116 
119  void SetEnabled(int) override;
120  void PlaceWidget(double bounds[6]) override;
121  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
123  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
124  {
125  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
126  }
128 
130 
138  vtkSetMacro(ProjectToPlane, vtkTypeBool);
139  vtkGetMacro(ProjectToPlane, vtkTypeBool);
140  vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
142 
147  void SetPlaneSource(vtkPlaneSource* plane);
148 
149  vtkSetClampMacro(ProjectionNormal, int, VTK_PROJECTION_YZ, VTK_PROJECTION_OBLIQUE);
150  vtkGetMacro(ProjectionNormal, int);
151  void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
152  void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
153  void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
154  void SetProjectionNormalToOblique() { this->SetProjectionNormal(3); }
155 
157 
164  void SetProjectionPosition(double position);
165  vtkGetMacro(ProjectionPosition, double);
167 
175  void GetPolyData(vtkPolyData* pd);
176 
178 
182  virtual void SetHandleProperty(vtkProperty*);
183  vtkGetObjectMacro(HandleProperty, vtkProperty);
184  virtual void SetSelectedHandleProperty(vtkProperty*);
185  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
187 
189 
193  virtual void SetLineProperty(vtkProperty*);
194  vtkGetObjectMacro(LineProperty, vtkProperty);
195  virtual void SetSelectedLineProperty(vtkProperty*);
196  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
198 
200 
203  virtual void SetNumberOfHandles(int npts);
204  vtkGetMacro(NumberOfHandles, int);
206 
208 
212  void SetResolution(int resolution);
213  vtkGetMacro(Resolution, int);
215 
217 
225  virtual void SetParametricSpline(vtkParametricSpline*);
226  vtkGetObjectMacro(ParametricSpline, vtkParametricSpline);
228 
230 
234  void SetHandlePosition(int handle, double x, double y, double z);
235  void SetHandlePosition(int handle, double xyz[3]);
236  void GetHandlePosition(int handle, double xyz[3]);
237  double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
239 
241 
248  void SetClosed(vtkTypeBool closed);
249  vtkGetMacro(Closed, vtkTypeBool);
250  vtkBooleanMacro(Closed, vtkTypeBool);
252 
258  int IsClosed();
259 
265  double GetSummedLength();
266 
273  void InitializeHandles(vtkPoints* points);
274 
276 
280  vtkSetClampMacro(ProcessEvents, vtkTypeBool, 0, 1);
281  vtkGetMacro(ProcessEvents, vtkTypeBool);
282  vtkBooleanMacro(ProcessEvents, vtkTypeBool);
284 
285 protected:
286  vtkSplineWidget();
287  ~vtkSplineWidget() override;
288 
289  // Manage the state of the widget
290  int State;
292  {
293  Start = 0,
299  Outside
300  };
301 
302  // handles the events
303  static void ProcessEventsHandler(
304  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
305 
306  // ProcessEventsHandler() dispatches to these methods.
307  void OnLeftButtonDown();
308  void OnLeftButtonUp();
309  void OnMiddleButtonDown();
310  void OnMiddleButtonUp();
311  void OnRightButtonDown();
312  void OnRightButtonUp();
313  void OnMouseMove();
314 
315  // Controlling vars
320 
321  // Projection capabilities
322  void ProjectPointsToPlane();
323  void ProjectPointsToOrthoPlane();
324  void ProjectPointsToObliquePlane();
325 
326  // The spline
331  void BuildRepresentation();
332 
333  // The line segments
335  void HighlightLine(int highlight);
337 
338  // Glyphs representing hot spots (e.g., handles)
341  void Initialize();
342  int HighlightHandle(vtkProp* prop); // returns handle index or -1 on fail
343  void SizeHandles() override;
344  void InsertHandleOnLine(double* pos);
345  void EraseHandle(const int&);
346 
347  // Do the picking
352 
353  // Register internal Pickers within PickingManager
354  void RegisterPickers() override;
355 
356  // Methods to manipulate the spline.
357  void MovePoint(double* p1, double* p2);
358  void Scale(double* p1, double* p2, int X, int Y);
359  void Translate(double* p1, double* p2);
360  void Spin(double* p1, double* p2, double* vpn);
361 
362  // Transform the control points (used for spinning)
364 
365  // Properties used to control the appearance of selected objects and
366  // the manipulator in general.
371  void CreateDefaultProperties();
372 
373  // For efficient spinning
374  double Centroid[3];
375  void CalculateCentroid();
377 
378 private:
379  vtkSplineWidget(const vtkSplineWidget&) = delete;
380  void operator=(const vtkSplineWidget&) = delete;
381 };
382 
383 #endif
vtkSphereSource ** HandleGeometry
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:47
vtkProperty * SelectedHandleProperty
void SetProjectionNormalToOblique()
vtkTypeBool ProjectToPlane
vtkParametricFunctionSource * ParametricFunctionSource
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:45
abstract base class for most VTK objects
Definition: vtkObject.h:53
vtkActor * LineActor
represent surface properties of a geometric object
Definition: vtkProperty.h:61
void PlaceWidget() override
Methods that satisfy the superclass' API.
void SetProjectionNormalToXAxes()
virtual void SetEnabled(int)
Methods for turning the interactor observer on and off, and determining its state.
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Methods that satisfy the superclass' API.
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:84
void SetProjectionNormalToZAxes()
vtkTypeBool Closed
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkProperty * LineProperty
virtual void RegisterPickers()
Register internal Pickers in the Picking Manager.
vtkTransform * Transform
int vtkTypeBool
Definition: vtkABI.h:69
create a polygonal sphere centered at the origin
parametric function for 1D interpolating splines
a simple class to control print indentation
Definition: vtkIndent.h:33
void SetProjectionNormalToYAxes()
vtkProperty * HandleProperty
vtkCellPicker * LinePicker
3D widget for manipulating a spline
vtkActor * CurrentHandle
vtkPlaneSource * PlaneSource
#define VTK_PROJECTION_YZ
#define VTK_SIZEHINT(...)
create an array of quadrilaterals located in a plane
vtkActor ** Handle
vtkTypeBool ProcessEvents
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:66
vtkCellPicker * HandlePicker
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
vtkProperty * SelectedLineProperty
#define VTK_PROJECTION_OBLIQUE
an abstract superclass for 3D widgets
Definition: vtk3DWidget.h:67
virtual void SizeHandles()
Definition: vtk3DWidget.h:152
virtual void PlaceWidget()
This method is used to initially place the widget.
represent and manipulate 3D points
Definition: vtkPoints.h:33
vtkParametricSpline * ParametricSpline
tessellate parametric functions