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 
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 
165  vtkGetMacro(ProjectionPosition, double);
167 
176 
178 
183  vtkGetObjectMacro(HandleProperty, vtkProperty);
185  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
187 
189 
193  virtual void SetLineProperty(vtkProperty*);
194  vtkGetObjectMacro(LineProperty, vtkProperty);
196  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
198 
200 
203  virtual void SetNumberOfHandles(int npts);
204  vtkGetMacro(NumberOfHandles, int);
206 
208 
213  vtkGetMacro(Resolution, int);
215 
217 
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 
274 
276 
280  vtkSetClampMacro(ProcessEvents, vtkTypeBool, 0, 1);
281  vtkGetMacro(ProcessEvents, vtkTypeBool);
282  vtkBooleanMacro(ProcessEvents, vtkTypeBool);
284 
285 protected:
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.
313  void OnMouseMove();
314 
315  // Controlling vars
320 
321  // Projection capabilities
325 
326  // The spline
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.
372 
373  // For efficient spinning
374  double Centroid[3];
377 
378 private:
379  vtkSplineWidget(const vtkSplineWidget&) = delete;
380  void operator=(const vtkSplineWidget&) = delete;
381 };
382 
383 #endif
an abstract superclass for 3D widgets
Definition: vtk3DWidget.h:68
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:54
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:48
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(...)