VTK  9.2.6
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 =========================================================================*/
106 #ifndef vtkSplineWidget_h
107 #define vtkSplineWidget_h
108 
109 #include "vtk3DWidget.h"
110 #include "vtkInteractionWidgetsModule.h" // For export macro
111 
112 class vtkActor;
113 class vtkCellPicker;
114 class vtkParametricSpline;
116 class vtkPlaneSource;
117 class vtkPoints;
118 class vtkPolyData;
119 class vtkProp;
120 class vtkProperty;
121 class vtkSphereSource;
122 class vtkTransform;
123 
124 #define VTK_PROJECTION_YZ 0
125 #define VTK_PROJECTION_XZ 1
126 #define VTK_PROJECTION_XY 2
127 #define VTK_PROJECTION_OBLIQUE 3
128 
129 class VTKINTERACTIONWIDGETS_EXPORT vtkSplineWidget : public vtk3DWidget
130 {
131 public:
135  static vtkSplineWidget* New();
136 
137  vtkTypeMacro(vtkSplineWidget, vtk3DWidget);
138  void PrintSelf(ostream& os, vtkIndent indent) override;
139 
141 
144  void SetEnabled(int) override;
145  void PlaceWidget(double bounds[6]) override;
146  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
148  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
149  {
150  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
151  }
153 
155 
163  vtkSetMacro(ProjectToPlane, vtkTypeBool);
164  vtkGetMacro(ProjectToPlane, vtkTypeBool);
165  vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
167 
173 
174  vtkSetClampMacro(ProjectionNormal, int, VTK_PROJECTION_YZ, VTK_PROJECTION_OBLIQUE);
175  vtkGetMacro(ProjectionNormal, int);
176  void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
177  void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
178  void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
179  void SetProjectionNormalToOblique() { this->SetProjectionNormal(3); }
180 
182 
190  vtkGetMacro(ProjectionPosition, double);
192 
201 
203 
208  vtkGetObjectMacro(HandleProperty, vtkProperty);
210  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
212 
214 
218  virtual void SetLineProperty(vtkProperty*);
219  vtkGetObjectMacro(LineProperty, vtkProperty);
221  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
223 
225 
228  virtual void SetNumberOfHandles(int npts);
229  vtkGetMacro(NumberOfHandles, int);
231 
233 
238  vtkGetMacro(Resolution, int);
240 
242 
251  vtkGetObjectMacro(ParametricSpline, vtkParametricSpline);
253 
255 
259  void SetHandlePosition(int handle, double x, double y, double z);
260  void SetHandlePosition(int handle, double xyz[3]);
261  void GetHandlePosition(int handle, double xyz[3]);
262  double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
264 
266 
273  void SetClosed(vtkTypeBool closed);
274  vtkGetMacro(Closed, vtkTypeBool);
275  vtkBooleanMacro(Closed, vtkTypeBool);
277 
283  int IsClosed();
284 
290  double GetSummedLength();
291 
299 
301 
305  vtkSetClampMacro(ProcessEvents, vtkTypeBool, 0, 1);
306  vtkGetMacro(ProcessEvents, vtkTypeBool);
307  vtkBooleanMacro(ProcessEvents, vtkTypeBool);
309 
310 protected:
312  ~vtkSplineWidget() override;
313 
314  // Manage the state of the widget
315  int State;
317  {
318  Start = 0,
324  Outside
325  };
326 
327  // handles the events
328  static void ProcessEventsHandler(
329  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
330 
331  // ProcessEventsHandler() dispatches to these methods.
338  void OnMouseMove();
339 
340  // Controlling vars
345 
346  // Projection capabilities
350 
351  // The spline
357 
358  // The line segments
360  void HighlightLine(int highlight);
362 
363  // Glyphs representing hot spots (e.g., handles)
366  void Initialize();
367  int HighlightHandle(vtkProp* prop); // returns handle index or -1 on fail
368  void SizeHandles() override;
369  void InsertHandleOnLine(double* pos);
370  void EraseHandle(const int&);
371 
372  // Do the picking
377 
378  // Register internal Pickers within PickingManager
379  void RegisterPickers() override;
380 
381  // Methods to manipulate the spline.
382  void MovePoint(double* p1, double* p2);
383  void Scale(double* p1, double* p2, int X, int Y);
384  void Translate(double* p1, double* p2);
385  void Spin(double* p1, double* p2, double* vpn);
386 
387  // Transform the control points (used for spinning)
389 
390  // Properties used to control the appearance of selected objects and
391  // the manipulator in general.
397 
398  // For efficient spinning
399  double Centroid[3];
402 
403 private:
404  vtkSplineWidget(const vtkSplineWidget&) = delete;
405  void operator=(const vtkSplineWidget&) = delete;
406 };
407 
408 #endif
an abstract superclass for 3D widgets
Definition: vtk3DWidget.h:71
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:161
ray-cast cell picker for all kinds of Prop3Ds
a simple class to control print indentation
Definition: vtkIndent.h:119
abstract base class for most VTK objects
Definition: vtkObject.h:82
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:149
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:200
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:76
represent surface properties of a geometric object
Definition: vtkProperty.h:177
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:170
@ 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(...)