VTK  9.1.0
vtkPlaneWidget.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkPlaneWidget.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 vtkPlaneWidget_h
82 #define vtkPlaneWidget_h
83 
84 #include "vtkInteractionWidgetsModule.h" // For export macro
86 
87 class vtkActor;
88 class vtkCellPicker;
89 class vtkConeSource;
90 class vtkLineSource;
91 class vtkPlaneSource;
92 class vtkPoints;
93 class vtkPolyData;
94 class vtkPolyDataMapper;
95 class vtkProp;
96 class vtkProperty;
97 class vtkSphereSource;
98 class vtkTransform;
99 class vtkPlane;
100 
101 #define VTK_PLANE_OFF 0
102 #define VTK_PLANE_OUTLINE 1
103 #define VTK_PLANE_WIREFRAME 2
104 #define VTK_PLANE_SURFACE 3
105 
106 #define VTK_PLANE_ZERO_THRESHOLD (std::numeric_limits<double>::min() * 1000)
107 
108 class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
109 {
110 public:
114  static vtkPlaneWidget* New();
115 
117  void PrintSelf(ostream& os, vtkIndent indent) override;
118 
120 
123  void SetEnabled(int) override;
124  void PlaceWidget(double bounds[6]) override;
125  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
127  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
128  {
129  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
130  }
132 
134 
137  void SetResolution(int r);
140 
142 
145  void SetOrigin(double x, double y, double z);
146  void SetOrigin(double x[3]);
147  double* GetOrigin() VTK_SIZEHINT(3);
148  void GetOrigin(double xyz[3]);
150 
152 
155  void SetPoint1(double x, double y, double z);
156  void SetPoint1(double x[3]);
157  double* GetPoint1() VTK_SIZEHINT(3);
158  void GetPoint1(double xyz[3]);
160 
162 
165  void SetPoint2(double x, double y, double z);
166  void SetPoint2(double x[3]);
167  double* GetPoint2() VTK_SIZEHINT(3);
168  void GetPoint2(double xyz[3]);
170 
172 
175  void SetCenter(double x, double y, double z);
176  void SetCenter(double x[3]);
177  double* GetCenter() VTK_SIZEHINT(3);
178  void GetCenter(double xyz[3]);
180 
182 
185  void SetNormal(double x, double y, double z);
186  void SetNormal(double x[3]);
187  double* GetNormal() VTK_SIZEHINT(3);
188  void GetNormal(double xyz[3]);
190 
192 
200  vtkSetClampMacro(Representation, int, VTK_PLANE_OFF, VTK_PLANE_SURFACE);
201  vtkGetMacro(Representation, int);
202  void SetRepresentationToOff() { this->SetRepresentation(VTK_PLANE_OFF); }
203  void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
204  void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
205  void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
207 
209 
215  vtkSetMacro(NormalToXAxis, vtkTypeBool);
216  vtkGetMacro(NormalToXAxis, vtkTypeBool);
217  vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
218  vtkSetMacro(NormalToYAxis, vtkTypeBool);
219  vtkGetMacro(NormalToYAxis, vtkTypeBool);
220  vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
221  vtkSetMacro(NormalToZAxis, vtkTypeBool);
222  vtkGetMacro(NormalToZAxis, vtkTypeBool);
223  vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
225 
235 
243  void GetPlane(vtkPlane* plane);
244 
252 
257  void UpdatePlacement(void) override;
258 
260 
265  vtkGetObjectMacro(HandleProperty, vtkProperty);
266  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
268 
270 
275  vtkGetObjectMacro(PlaneProperty, vtkProperty);
276  vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
278 
279 protected:
281  ~vtkPlaneWidget() override;
282 
283  // Manage the state of the widget
284  int State;
286  {
287  Start = 0,
294  Pinching
295  };
296 
297  // handles the events
298  static void ProcessEvents(
299  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
300 
301  // ProcessEvents() dispatches to these methods.
308  void OnMouseMove();
309  void OnStartPinch();
310  void OnPinch();
311  void OnEndPinch();
312 
313  // controlling ivars
319 
320  // the plane
325  void HighlightPlane(int highlight);
326 
327  // glyphs representing hot spots (e.g., handles)
332  void HandlesOn(double length);
333  void HandlesOff();
334  int HighlightHandle(vtkProp* prop); // returns cell id
335  void SizeHandles() override;
336 
337  // the normal cone
341  void HighlightNormal(int highlight);
342 
343  // the normal line
347 
348  // the normal cone
352 
353  // the normal line
357 
358  // Do the picking
362 
363  // Register internal Pickers within PickingManager
364  void RegisterPickers() override;
365 
366  // Methods to manipulate the hexahedron.
367  void MoveOrigin(double* p1, double* p2);
368  void MovePoint1(double* p1, double* p2);
369  void MovePoint2(double* p1, double* p2);
370  void MovePoint3(double* p1, double* p2);
371  void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
372  void Spin(double* p1, double* p2);
373  void Scale(double* p1, double* p2, int X, int Y);
374  void Translate(double* p1, double* p2);
375  void Push(double* p1, double* p2);
376 
377  // Plane normal, normalized
378  double Normal[3];
379 
380  // Transform the hexahedral points (used for rotations)
382 
383  // Properties used to control the appearance of selected objects and
384  // the manipulator in general.
390 
392 
395 
396 private:
397  vtkPlaneWidget(const vtkPlaneWidget&) = delete;
398  void operator=(const vtkPlaneWidget&) = delete;
399 };
400 
401 #endif
virtual void PlaceWidget()
This method is used to initially place the widget.
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:46
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:67
generate polygonal cone
Definition: vtkConeSource.h:39
a simple class to control print indentation
Definition: vtkIndent.h:34
create a line defined by two end points
Definition: vtkLineSource.h:61
abstract base class for most VTK objects
Definition: vtkObject.h:63
create an array of quadrilaterals located in a plane
3D widget for manipulating a finite plane
vtkProperty * HandleProperty
void MovePoint3(double *p1, double *p2)
void SetOrigin(double x, double y, double z)
Set/Get the origin of the plane.
vtkConeSource * ConeSource
vtkTypeBool NormalToYAxis
vtkPolyDataAlgorithm * GetPolyDataAlgorithm() override
Satisfies superclass API.
vtkPlaneSource * PlaneSource
vtkSphereSource ** HandleGeometry
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkLineSource * LineSource
double * GetOrigin()
Set/Get the origin of the plane.
~vtkPlaneWidget() override
void GetPlane(vtkPlane *plane)
Get the planes describing the implicit function defined by the plane widget.
void MovePoint2(double *p1, double *p2)
void PlaceWidget(double bounds[6]) override
Methods that satisfy the superclass' API.
vtkPolyDataMapper * PlaneMapper
void OnRightButtonUp()
vtkProperty * PlaneProperty
void PlaceWidget() override
Methods that satisfy the superclass' API.
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Methods that satisfy the superclass' API.
int HighlightHandle(vtkProp *prop)
vtkActor * ConeActor2
vtkActor ** Handle
void OnStartPinch()
void RegisterPickers() override
Register internal Pickers in the Picking Manager.
void CreateDefaultProperties()
void OnLeftButtonDown()
void HighlightNormal(int highlight)
void SetEnabled(int) override
Methods that satisfy the superclass' API.
void GetPolyData(vtkPolyData *pd)
Grab the polydata (including points) that defines the plane.
vtkPolyDataMapper * LineMapper2
void MovePoint1(double *p1, double *p2)
vtkProperty * SelectedHandleProperty
void GeneratePlane()
vtkPolyDataMapper * ConeMapper2
void Scale(double *p1, double *p2, int X, int Y)
void Push(double *p1, double *p2)
vtkProperty * SelectedPlaneProperty
void OnLeftButtonUp()
void SizeHandles() override
void HandlesOn(double length)
void MoveOrigin(double *p1, double *p2)
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
void OnMouseMove()
void SetResolution(int r)
Set/Get the resolution (number of subdivisions) of the plane.
vtkPolyDataMapper ** HandleMapper
vtkCellPicker * HandlePicker
vtkPolyDataMapper * LineMapper
vtkActor * ConeActor
vtkTypeBool NormalToZAxis
void SetRepresentationToSurface()
Control how the plane appears when GetPolyData() is invoked.
void SetRepresentationToOutline()
Control how the plane appears when GetPolyData() is invoked.
vtkActor * CurrentHandle
void SelectRepresentation()
double HandleSizeFactor
void SetOrigin(double x[3])
Set/Get the origin of the plane.
int GetResolution()
Set/Get the resolution (number of subdivisions) of the plane.
vtkPolyData * PlaneOutline
vtkTransform * Transform
void PositionHandles()
void OnMiddleButtonDown()
void UpdatePlacement(void) override
Satisfies superclass API.
vtkLineSource * LineSource2
vtkPolyDataMapper * ConeMapper
void OnRightButtonDown()
vtkCellPicker * PlanePicker
static vtkPlaneWidget * New()
Instantiate the object.
virtual void SetPlaneProperty(vtkProperty *)
Get the plane properties.
void Rotate(int X, int Y, double *p1, double *p2, double *vpn)
vtkConeSource * ConeSource2
vtkActor * LineActor
void Spin(double *p1, double *p2)
void HighlightPlane(int highlight)
vtkActor * PlaneActor
void SetRepresentationToWireframe()
Control how the plane appears when GetPolyData() is invoked.
void Translate(double *p1, double *p2)
void OnMiddleButtonUp()
vtkTypeBool NormalToXAxis
vtkActor * LineActor2
perform various plane computations
Definition: vtkPlane.h:34
represent and manipulate 3D points
Definition: vtkPoints.h:34
Superclass for algorithms that produce only polydata as output.
map vtkPolyData to graphics primitives
abstract PolyDataSource-based 3D widget
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:86
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:57
represent surface properties of a geometric object
Definition: vtkProperty.h:62
create a polygonal sphere centered at the origin
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:55
@ Normal
Definition: vtkX3D.h:51
@ length
Definition: vtkX3D.h:399
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_PLANE_OUTLINE
#define VTK_PLANE_WIREFRAME
#define VTK_PLANE_OFF
#define VTK_PLANE_SURFACE
#define VTK_SIZEHINT(...)