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);
120 
122 
125  virtual void SetEnabled(int);
126  virtual void PlaceWidget(double bounds[6]);
127  void PlaceWidget()
128  {this->Superclass::PlaceWidget();}
129  void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
130  double zmin, double zmax)
131  {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
133 
135 
143  vtkSetMacro(ProjectToPlane,int);
144  vtkGetMacro(ProjectToPlane,int);
145  vtkBooleanMacro(ProjectToPlane,int);
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);
248 
250 
257  void SetClosed(int closed);
258  vtkGetMacro(Closed,int);
259  vtkBooleanMacro(Closed,int);
261 
267  int IsClosed();
268 
274  double GetSummedLength();
275 
282  void InitializeHandles(vtkPoints* points);
283 
285 
289  vtkSetClampMacro(ProcessEvents, int, 0, 1);
290  vtkGetMacro(ProcessEvents, int);
291  vtkBooleanMacro( ProcessEvents, int );
293 
294 protected:
295  vtkSplineWidget();
296  ~vtkSplineWidget();
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
341  int Closed;
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  virtual void SizeHandles();
355  void InsertHandleOnLine(double* pos);
356  void EraseHandle(const int&);
357 
358  // Do the picking
363 
364  // Register internal Pickers within PickingManager
365  virtual void RegisterPickers();
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&) VTK_DELETE_FUNCTION;
391  void operator=(const vtkSplineWidget&) VTK_DELETE_FUNCTION;
392 };
393 
394 #endif
vtkSphereSource ** HandleGeometry
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:50
vtkProperty * SelectedHandleProperty
void SetProjectionNormalToOblique()
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:64
void SetProjectionNormalToXAxes()
virtual void SetEnabled(int)
Methods for turning the interactor observer on and off, and determining its state.
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()
void PlaceWidget()
Methods that satisfy the superclass' API.
vtkProperty * LineProperty
virtual void RegisterPickers()
Register internal Pickers in the Picking Manager.
vtkTransform * Transform
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
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
Methods that satisfy the superclass' API.
vtkActor * CurrentHandle
vtkPlaneSource * PlaneSource
#define VTK_PROJECTION_YZ
create an array of quadrilaterals located in a plane
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
vtkActor ** Handle
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:69
vtkBooleanMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
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
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
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