VTK  9.1.0
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
87class vtkActor;
88class vtkCellPicker;
91class vtkPlaneSource;
92class vtkPoints;
93class vtkPolyData;
94class vtkProp;
95class vtkProperty;
96class vtkSphereSource;
97class 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
104class VTKINTERACTIONWIDGETS_EXPORT vtkSplineWidget : public vtk3DWidget
105{
106public:
111
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
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
266
274
276
280 vtkSetClampMacro(ProcessEvents, vtkTypeBool, 0, 1);
281 vtkGetMacro(ProcessEvents, vtkTypeBool);
282 vtkBooleanMacro(ProcessEvents, vtkTypeBool);
284
285protected:
288
289 // Manage the state of the widget
290 int State;
292 {
293 Start = 0,
299 Outside
300 };
301
302 // handles the events
304 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
305
306 // ProcessEventsHandler() dispatches to these methods.
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)
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
378private:
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:55
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:76
a simple class to control print indentation
Definition: vtkIndent.h:43
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:43
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:95
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:57
represent surface properties of a geometric object
Definition: vtkProperty.h:71
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()
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.
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()
static vtkSplineWidget * New()
Instantiate the object.
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)
double * GetHandlePosition(int handle)
Set/Get the position of the spline handles.
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:64
@ 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(...)