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 =========================================================================*/
94 #ifndef vtkPlaneWidget_h
95 #define vtkPlaneWidget_h
96 
97 #include "vtkInteractionWidgetsModule.h" // For export macro
99 
100 class vtkActor;
101 class vtkCellPicker;
102 class vtkConeSource;
103 class vtkLineSource;
104 class vtkPlaneSource;
105 class vtkPoints;
106 class vtkPolyData;
107 class vtkPolyDataMapper;
108 class vtkProp;
109 class vtkProperty;
110 class vtkSphereSource;
111 class vtkTransform;
112 class vtkPlane;
113 
114 #define VTK_PLANE_OFF 0
115 #define VTK_PLANE_OUTLINE 1
116 #define VTK_PLANE_WIREFRAME 2
117 #define VTK_PLANE_SURFACE 3
118 
119 #define VTK_PLANE_ZERO_THRESHOLD (std::numeric_limits<double>::min() * 1000)
120 
121 class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
122 {
123 public:
127  static vtkPlaneWidget* New();
128 
130  void PrintSelf(ostream& os, vtkIndent indent) override;
131 
133 
136  void SetEnabled(int) override;
137  void PlaceWidget(double bounds[6]) override;
138  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
140  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
141  {
142  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
143  }
145 
147 
150  void SetResolution(int r);
153 
155 
158  void SetOrigin(double x, double y, double z);
159  void SetOrigin(double x[3]);
160  double* GetOrigin() VTK_SIZEHINT(3);
161  void GetOrigin(double xyz[3]);
163 
165 
168  void SetPoint1(double x, double y, double z);
169  void SetPoint1(double x[3]);
170  double* GetPoint1() VTK_SIZEHINT(3);
171  void GetPoint1(double xyz[3]);
173 
175 
178  void SetPoint2(double x, double y, double z);
179  void SetPoint2(double x[3]);
180  double* GetPoint2() VTK_SIZEHINT(3);
181  void GetPoint2(double xyz[3]);
183 
185 
188  void SetCenter(double x, double y, double z);
189  void SetCenter(double x[3]);
190  double* GetCenter() VTK_SIZEHINT(3);
191  void GetCenter(double xyz[3]);
193 
195 
198  void SetNormal(double x, double y, double z);
199  void SetNormal(double x[3]);
200  double* GetNormal() VTK_SIZEHINT(3);
201  void GetNormal(double xyz[3]);
203 
205 
213  vtkSetClampMacro(Representation, int, VTK_PLANE_OFF, VTK_PLANE_SURFACE);
214  vtkGetMacro(Representation, int);
215  void SetRepresentationToOff() { this->SetRepresentation(VTK_PLANE_OFF); }
216  void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
217  void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
218  void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
220 
222 
228  vtkSetMacro(NormalToXAxis, vtkTypeBool);
229  vtkGetMacro(NormalToXAxis, vtkTypeBool);
230  vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
231  vtkSetMacro(NormalToYAxis, vtkTypeBool);
232  vtkGetMacro(NormalToYAxis, vtkTypeBool);
233  vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
234  vtkSetMacro(NormalToZAxis, vtkTypeBool);
235  vtkGetMacro(NormalToZAxis, vtkTypeBool);
236  vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
238 
248 
256  void GetPlane(vtkPlane* plane);
257 
265 
270  void UpdatePlacement(void) override;
271 
273 
278  vtkGetObjectMacro(HandleProperty, vtkProperty);
279  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
281 
283 
288  vtkGetObjectMacro(PlaneProperty, vtkProperty);
289  vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
291 
292 protected:
294  ~vtkPlaneWidget() override;
295 
296  // Manage the state of the widget
297  int State;
299  {
300  Start = 0,
307  Pinching
308  };
309 
310  // handles the events
311  static void ProcessEvents(
312  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
313 
314  // ProcessEvents() dispatches to these methods.
321  void OnMouseMove();
322  void OnStartPinch();
323  void OnPinch();
324  void OnEndPinch();
325 
326  // controlling ivars
332 
333  // the plane
338  void HighlightPlane(int highlight);
339 
340  // glyphs representing hot spots (e.g., handles)
345  void HandlesOn(double length);
346  void HandlesOff();
347  int HighlightHandle(vtkProp* prop); // returns cell id
348  void SizeHandles() override;
349 
350  // the normal cone
354  void HighlightNormal(int highlight);
355 
356  // the normal line
360 
361  // the normal cone
365 
366  // the normal line
370 
371  // Do the picking
375 
376  // Register internal Pickers within PickingManager
377  void RegisterPickers() override;
378 
379  // Methods to manipulate the hexahedron.
380  void MoveOrigin(double* p1, double* p2);
381  void MovePoint1(double* p1, double* p2);
382  void MovePoint2(double* p1, double* p2);
383  void MovePoint3(double* p1, double* p2);
384  void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
385  void Spin(double* p1, double* p2);
386  void Scale(double* p1, double* p2, int X, int Y);
387  void Translate(double* p1, double* p2);
388  void Push(double* p1, double* p2);
389 
390  // Plane normal, normalized
391  double Normal[3];
392 
393  // Transform the hexahedral points (used for rotations)
395 
396  // Properties used to control the appearance of selected objects and
397  // the manipulator in general.
403 
405 
408 
409 private:
410  vtkPlaneWidget(const vtkPlaneWidget&) = delete;
411  void operator=(const vtkPlaneWidget&) = delete;
412 };
413 
414 #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:155
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:96
generate polygonal cone
a simple class to control print indentation
Definition: vtkIndent.h:113
create a line defined by two end points
abstract base class for most VTK objects
Definition: vtkObject.h:73
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:143
represent and manipulate 3D points
Definition: vtkPoints.h:143
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:195
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:67
represent surface properties of a geometric object
Definition: vtkProperty.h:171
create a polygonal sphere centered at the origin
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
@ 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(...)