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=========================================================================*/
106#ifndef vtkSplineWidget_h
107#define vtkSplineWidget_h
108
109#include "vtk3DWidget.h"
110#include "vtkInteractionWidgetsModule.h" // For export macro
111
112class vtkActor;
113class vtkCellPicker;
116class vtkPlaneSource;
117class vtkPoints;
118class vtkPolyData;
119class vtkProp;
120class vtkProperty;
121class vtkSphereSource;
122class 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
129class VTKINTERACTIONWIDGETS_EXPORT vtkSplineWidget : public vtk3DWidget
130{
131public:
136
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
189 void SetProjectionPosition(double position);
190 vtkGetMacro(ProjectionPosition, double);
192
201
203
208 vtkGetObjectMacro(HandleProperty, vtkProperty);
210 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
212
214
219 vtkGetObjectMacro(LineProperty, vtkProperty);
221 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
223
225
228 virtual void SetNumberOfHandles(int npts);
229 vtkGetMacro(NumberOfHandles, int);
231
233
237 void SetResolution(int resolution);
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
291
299
301
305 vtkSetClampMacro(ProcessEvents, vtkTypeBool, 0, 1);
306 vtkGetMacro(ProcessEvents, vtkTypeBool);
307 vtkBooleanMacro(ProcessEvents, vtkTypeBool);
309
310protected:
313
314 // Manage the state of the widget
315 int State;
317 {
318 Start = 0,
324 Outside
325 };
326
327 // handles the events
329 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
330
331 // ProcessEventsHandler() dispatches to these methods.
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)
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
403private:
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:155
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:96
a simple class to control print indentation
Definition: vtkIndent.h:113
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:143
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:76
represent surface properties of a geometric object
Definition: vtkProperty.h:171
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:164
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_PROJECTION_YZ
#define VTK_PROJECTION_OBLIQUE
#define VTK_SIZEHINT(...)