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=========================================================================*/
84#ifndef vtkSplineWidget_h
85#define vtkSplineWidget_h
86
87#include "vtk3DWidget.h"
88#include "vtkInteractionWidgetsModule.h" // For export macro
89
90class vtkActor;
91class vtkCellPicker;
94class vtkPlaneSource;
95class vtkPoints;
96class vtkPolyData;
97class vtkProp;
98class vtkProperty;
99class vtkSphereSource;
100class vtkTransform;
101
102#define VTK_PROJECTION_YZ 0
103#define VTK_PROJECTION_XZ 1
104#define VTK_PROJECTION_XY 2
105#define VTK_PROJECTION_OBLIQUE 3
106
107class VTKINTERACTIONWIDGETS_EXPORT vtkSplineWidget : public vtk3DWidget
108{
109public:
114
116 void PrintSelf(ostream& os, vtkIndent indent) override;
117
119
122 void SetEnabled(int) override;
123 void PlaceWidget(double bounds[6]) override;
124 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
126 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
127 {
128 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
129 }
131
133
141 vtkSetMacro(ProjectToPlane, vtkTypeBool);
142 vtkGetMacro(ProjectToPlane, vtkTypeBool);
143 vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
145
151
152 vtkSetClampMacro(ProjectionNormal, int, VTK_PROJECTION_YZ, VTK_PROJECTION_OBLIQUE);
153 vtkGetMacro(ProjectionNormal, int);
154 void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
155 void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
156 void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
157 void SetProjectionNormalToOblique() { this->SetProjectionNormal(3); }
158
160
167 void SetProjectionPosition(double position);
168 vtkGetMacro(ProjectionPosition, double);
170
179
181
186 vtkGetObjectMacro(HandleProperty, vtkProperty);
188 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
190
192
197 vtkGetObjectMacro(LineProperty, vtkProperty);
199 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
201
203
206 virtual void SetNumberOfHandles(int npts);
207 vtkGetMacro(NumberOfHandles, int);
209
211
215 void SetResolution(int resolution);
216 vtkGetMacro(Resolution, int);
218
220
229 vtkGetObjectMacro(ParametricSpline, vtkParametricSpline);
231
233
237 void SetHandlePosition(int handle, double x, double y, double z);
238 void SetHandlePosition(int handle, double xyz[3]);
239 void GetHandlePosition(int handle, double xyz[3]);
240 double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
242
244
251 void SetClosed(vtkTypeBool closed);
252 vtkGetMacro(Closed, vtkTypeBool);
253 vtkBooleanMacro(Closed, vtkTypeBool);
255
261 int IsClosed();
262
269
277
279
283 vtkSetClampMacro(ProcessEvents, vtkTypeBool, 0, 1);
284 vtkGetMacro(ProcessEvents, vtkTypeBool);
285 vtkBooleanMacro(ProcessEvents, vtkTypeBool);
287
288protected:
291
292 // Manage the state of the widget
293 int State;
295 {
296 Start = 0,
302 Outside
303 };
304
305 // handles the events
307 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
308
309 // ProcessEventsHandler() dispatches to these methods.
317
318 // Controlling vars
323
324 // Projection capabilities
328
329 // The spline
335
336 // The line segments
338 void HighlightLine(int highlight);
340
341 // Glyphs representing hot spots (e.g., handles)
345 int HighlightHandle(vtkProp* prop); // returns handle index or -1 on fail
346 void SizeHandles() override;
347 void InsertHandleOnLine(double* pos);
348 void EraseHandle(const int&);
349
350 // Do the picking
355
356 // Register internal Pickers within PickingManager
357 void RegisterPickers() override;
358
359 // Methods to manipulate the spline.
360 void MovePoint(double* p1, double* p2);
361 void Scale(double* p1, double* p2, int X, int Y);
362 void Translate(double* p1, double* p2);
363 void Spin(double* p1, double* p2, double* vpn);
364
365 // Transform the control points (used for spinning)
367
368 // Properties used to control the appearance of selected objects and
369 // the manipulator in general.
375
376 // For efficient spinning
377 double Centroid[3];
380
381private:
382 vtkSplineWidget(const vtkSplineWidget&) = delete;
383 void operator=(const vtkSplineWidget&) = delete;
384};
385
386#endif
an abstract superclass for 3D widgets
Definition vtk3DWidget.h:71
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:46
ray-cast cell picker for all kinds of Prop3Ds
a simple class to control print indentation
Definition vtkIndent.h:34
abstract base class for most VTK objects
Definition vtkObject.h:57
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:51
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
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.
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.
~vtkSplineWidget() override
describes linear transformations via a 4x4 matrix
int vtkTypeBool
Definition vtkABI.h:69
#define VTK_PROJECTION_YZ
#define VTK_PROJECTION_OBLIQUE
#define VTK_SIZEHINT(...)