VTK  9.0.2
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 =========================================================================*/
90 #ifndef vtkSplineWidget_h
91 #define vtkSplineWidget_h
92 
93 #include "vtk3DWidget.h"
94 #include "vtkInteractionWidgetsModule.h" // For export macro
95 
96 class vtkActor;
97 class vtkCellPicker;
100 class vtkPlaneSource;
101 class vtkPoints;
102 class vtkPolyData;
103 class vtkProp;
104 class vtkProperty;
105 class vtkSphereSource;
106 class vtkTransform;
107 
108 #define VTK_PROJECTION_YZ 0
109 #define VTK_PROJECTION_XZ 1
110 #define VTK_PROJECTION_XY 2
111 #define VTK_PROJECTION_OBLIQUE 3
112 
113 class VTKINTERACTIONWIDGETS_EXPORT vtkSplineWidget : public vtk3DWidget
114 {
115 public:
119  static vtkSplineWidget* New();
120 
121  vtkTypeMacro(vtkSplineWidget, vtk3DWidget);
122  void PrintSelf(ostream& os, vtkIndent indent) override;
123 
125 
128  void SetEnabled(int) override;
129  void PlaceWidget(double bounds[6]) override;
130  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
132  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
133  {
134  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
135  }
137 
139 
147  vtkSetMacro(ProjectToPlane, vtkTypeBool);
148  vtkGetMacro(ProjectToPlane, vtkTypeBool);
149  vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
151 
157 
158  vtkSetClampMacro(ProjectionNormal, int, VTK_PROJECTION_YZ, VTK_PROJECTION_OBLIQUE);
159  vtkGetMacro(ProjectionNormal, int);
160  void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
161  void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
162  void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
163  void SetProjectionNormalToOblique() { this->SetProjectionNormal(3); }
164 
166 
174  vtkGetMacro(ProjectionPosition, double);
176 
185 
187 
192  vtkGetObjectMacro(HandleProperty, vtkProperty);
194  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
196 
198 
202  virtual void SetLineProperty(vtkProperty*);
203  vtkGetObjectMacro(LineProperty, vtkProperty);
205  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
207 
209 
212  virtual void SetNumberOfHandles(int npts);
213  vtkGetMacro(NumberOfHandles, int);
215 
217 
222  vtkGetMacro(Resolution, int);
224 
226 
235  vtkGetObjectMacro(ParametricSpline, vtkParametricSpline);
237 
239 
243  void SetHandlePosition(int handle, double x, double y, double z);
244  void SetHandlePosition(int handle, double xyz[3]);
245  void GetHandlePosition(int handle, double xyz[3]);
246  double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
248 
250 
257  void SetClosed(vtkTypeBool closed);
258  vtkGetMacro(Closed, vtkTypeBool);
259  vtkBooleanMacro(Closed, vtkTypeBool);
261 
267  int IsClosed();
268 
274  double GetSummedLength();
275 
283 
285 
289  vtkSetClampMacro(ProcessEvents, vtkTypeBool, 0, 1);
290  vtkGetMacro(ProcessEvents, vtkTypeBool);
291  vtkBooleanMacro(ProcessEvents, vtkTypeBool);
293 
294 protected:
296  ~vtkSplineWidget() override;
297 
298  // Manage the state of the widget
299  int State;
301  {
302  Start = 0,
308  Outside
309  };
310 
311  // handles the events
312  static void ProcessEventsHandler(
313  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
314 
315  // ProcessEventsHandler() dispatches to these methods.
322  void OnMouseMove();
323 
324  // Controlling vars
329 
330  // Projection capabilities
334 
335  // The spline
341 
342  // The line segments
344  void HighlightLine(int highlight);
346 
347  // Glyphs representing hot spots (e.g., handles)
350  void Initialize();
351  int HighlightHandle(vtkProp* prop); // returns handle index or -1 on fail
352  void SizeHandles() override;
353  void InsertHandleOnLine(double* pos);
354  void EraseHandle(const int&);
355 
356  // Do the picking
361 
362  // Register internal Pickers within PickingManager
363  void RegisterPickers() override;
364 
365  // Methods to manipulate the spline.
366  void MovePoint(double* p1, double* p2);
367  void Scale(double* p1, double* p2, int X, int Y);
368  void Translate(double* p1, double* p2);
369  void Spin(double* p1, double* p2, double* vpn);
370 
371  // Transform the control points (used for spinning)
373 
374  // Properties used to control the appearance of selected objects and
375  // the manipulator in general.
381 
382  // For efficient spinning
383  double Centroid[3];
386 
387 private:
388  vtkSplineWidget(const vtkSplineWidget&) = delete;
389  void operator=(const vtkSplineWidget&) = delete;
390 };
391 
392 #endif
an abstract superclass for 3D widgets
Definition: vtk3DWidget.h:71
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:46
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:67
a simple class to control print indentation
Definition: vtkIndent.h:34
abstract base class for most VTK objects
Definition: vtkObject.h:63
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:34
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:85
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:54
represent surface properties of a geometric object
Definition: vtkProperty.h:62
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])
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
This method is used to initially place the widget.
void SizeHandles() override
void OnRightButtonDown()
static vtkSplineWidget * New()
Instantiate the object.
vtkProperty * SelectedHandleProperty
vtkSphereSource ** HandleGeometry
void PlaceWidget() override
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 *)
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])
double * GetHandlePosition(int handle)
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
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 *)
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:55
@ 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(...)