VTK
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 =========================================================================*/
87 #ifndef vtkSplineWidget_h
88 #define vtkSplineWidget_h
89 
90 #include "vtkInteractionWidgetsModule.h" // For export macro
91 #include "vtk3DWidget.h"
92 
93 class vtkActor;
94 class vtkCellPicker;
97 class vtkPlaneSource;
98 class vtkPoints;
99 class vtkPolyData;
100 class vtkProp;
101 class vtkProperty;
102 class vtkSphereSource;
103 class vtkTransform;
104 
105 #define VTK_PROJECTION_YZ 0
106 #define VTK_PROJECTION_XZ 1
107 #define VTK_PROJECTION_XY 2
108 #define VTK_PROJECTION_OBLIQUE 3
109 
110 class VTKINTERACTIONWIDGETS_EXPORT vtkSplineWidget : public vtk3DWidget
111 {
112 public:
116  static vtkSplineWidget *New();
117 
119  void PrintSelf(ostream& os, vtkIndent indent) override;
120 
122 
125  void SetEnabled(int) override;
126  void PlaceWidget(double bounds[6]) override;
127  void PlaceWidget() override
128  {this->Superclass::PlaceWidget();}
129  void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
130  double zmin, double zmax) override
131  {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
133 
135 
143  vtkSetMacro(ProjectToPlane,vtkTypeBool);
144  vtkGetMacro(ProjectToPlane,vtkTypeBool);
145  vtkBooleanMacro(ProjectToPlane,vtkTypeBool);
147 
152  void SetPlaneSource(vtkPlaneSource* plane);
153 
154  vtkSetClampMacro(ProjectionNormal,int,VTK_PROJECTION_YZ,VTK_PROJECTION_OBLIQUE);
155  vtkGetMacro(ProjectionNormal,int);
157  { this->SetProjectionNormal(0); }
159  { this->SetProjectionNormal(1); }
161  { this->SetProjectionNormal(2); }
163  { this->SetProjectionNormal(3); }
164 
166 
173  void SetProjectionPosition(double position);
174  vtkGetMacro(ProjectionPosition, double);
176 
184  void GetPolyData(vtkPolyData *pd);
185 
187 
191  virtual void SetHandleProperty(vtkProperty*);
192  vtkGetObjectMacro(HandleProperty, vtkProperty);
193  virtual void SetSelectedHandleProperty(vtkProperty*);
194  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
196 
198 
202  virtual void SetLineProperty(vtkProperty*);
203  vtkGetObjectMacro(LineProperty, vtkProperty);
204  virtual void SetSelectedLineProperty(vtkProperty*);
205  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
207 
209 
212  virtual void SetNumberOfHandles(int npts);
213  vtkGetMacro(NumberOfHandles, int);
215 
217 
221  void SetResolution(int resolution);
222  vtkGetMacro(Resolution,int);
224 
226 
234  virtual void SetParametricSpline(vtkParametricSpline*);
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 
282  void InitializeHandles(vtkPoints* points);
283 
285 
289  vtkSetClampMacro(ProcessEvents, vtkTypeBool, 0, 1);
290  vtkGetMacro(ProcessEvents, vtkTypeBool);
291  vtkBooleanMacro( ProcessEvents, vtkTypeBool );
293 
294 protected:
295  vtkSplineWidget();
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(vtkObject* object,
313  unsigned long event,
314  void* clientdata,
315  void* calldata);
316 
317  // ProcessEventsHandler() dispatches to these methods.
318  void OnLeftButtonDown();
319  void OnLeftButtonUp();
320  void OnMiddleButtonDown();
321  void OnMiddleButtonUp();
322  void OnRightButtonDown();
323  void OnRightButtonUp();
324  void OnMouseMove();
325 
326  // Controlling vars
331 
332  // Projection capabilities
333  void ProjectPointsToPlane();
334  void ProjectPointsToOrthoPlane();
335  void ProjectPointsToObliquePlane();
336 
337  // The spline
342  void BuildRepresentation();
343 
344  // The line segments
346  void HighlightLine(int highlight);
348 
349  // Glyphs representing hot spots (e.g., handles)
352  void Initialize();
353  int HighlightHandle(vtkProp *prop); //returns handle index or -1 on fail
354  void SizeHandles() override;
355  void InsertHandleOnLine(double* pos);
356  void EraseHandle(const int&);
357 
358  // Do the picking
363 
364  // Register internal Pickers within PickingManager
365  void RegisterPickers() override;
366 
367  // Methods to manipulate the spline.
368  void MovePoint(double *p1, double *p2);
369  void Scale(double *p1, double *p2, int X, int Y);
370  void Translate(double *p1, double *p2);
371  void Spin(double *p1, double *p2, double *vpn);
372 
373  // Transform the control points (used for spinning)
375 
376  // Properties used to control the appearance of selected objects and
377  // the manipulator in general.
382  void CreateDefaultProperties();
383 
384  // For efficient spinning
385  double Centroid[3];
386  void CalculateCentroid();
388 
389 private:
390  vtkSplineWidget(const vtkSplineWidget&) = delete;
391  void operator=(const vtkSplineWidget&) = delete;
392 };
393 
394 #endif
vtkSphereSource ** HandleGeometry
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:52
vtkProperty * SelectedHandleProperty
void SetProjectionNormalToOblique()
vtkTypeBool ProjectToPlane
vtkParametricFunctionSource * ParametricFunctionSource
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:51
abstract base class for most VTK objects
Definition: vtkObject.h:59
vtkActor * LineActor
represent surface properties of a geometric object
Definition: vtkProperty.h:66
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:60
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:85
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:39
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:69
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:39
vtkParametricSpline * ParametricSpline
tessellate parametric functions