VTK  9.2.6
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 =========================================================================*/
100 #ifndef vtkPlaneWidget_h
101 #define vtkPlaneWidget_h
102 
103 #include "vtkInteractionWidgetsModule.h" // For export macro
104 #include "vtkPolyDataSourceWidget.h"
105 
106 class vtkActor;
107 class vtkCellPicker;
108 class vtkConeSource;
109 class vtkLineSource;
110 class vtkPlaneSource;
111 class vtkPoints;
112 class vtkPolyData;
113 class vtkPolyDataMapper;
114 class vtkProp;
115 class vtkProperty;
116 class vtkSphereSource;
117 class vtkTransform;
118 class vtkPlane;
119 
120 #define VTK_PLANE_OFF 0
121 #define VTK_PLANE_OUTLINE 1
122 #define VTK_PLANE_WIREFRAME 2
123 #define VTK_PLANE_SURFACE 3
124 
125 #define VTK_PLANE_ZERO_THRESHOLD (std::numeric_limits<double>::min() * 1000)
126 
127 class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
128 {
129 public:
133  static vtkPlaneWidget* New();
134 
136  void PrintSelf(ostream& os, vtkIndent indent) override;
137 
139 
142  void SetEnabled(int) override;
143  void PlaceWidget(double bounds[6]) override;
144  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
146  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
147  {
148  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
149  }
151 
153 
156  void SetResolution(int r);
159 
161 
164  void SetOrigin(double x, double y, double z);
165  void SetOrigin(double x[3]);
166  double* GetOrigin() VTK_SIZEHINT(3);
167  void GetOrigin(double xyz[3]);
169 
171 
174  void SetPoint1(double x, double y, double z);
175  void SetPoint1(double x[3]);
176  double* GetPoint1() VTK_SIZEHINT(3);
177  void GetPoint1(double xyz[3]);
179 
181 
184  void SetPoint2(double x, double y, double z);
185  void SetPoint2(double x[3]);
186  double* GetPoint2() VTK_SIZEHINT(3);
187  void GetPoint2(double xyz[3]);
189 
191 
194  void SetCenter(double x, double y, double z);
195  void SetCenter(double x[3]);
196  double* GetCenter() VTK_SIZEHINT(3);
197  void GetCenter(double xyz[3]);
199 
201 
204  void SetNormal(double x, double y, double z);
205  void SetNormal(double x[3]);
206  double* GetNormal() VTK_SIZEHINT(3);
207  void GetNormal(double xyz[3]);
209 
211 
219  vtkSetClampMacro(Representation, int, VTK_PLANE_OFF, VTK_PLANE_SURFACE);
220  vtkGetMacro(Representation, int);
221  void SetRepresentationToOff() { this->SetRepresentation(VTK_PLANE_OFF); }
222  void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
223  void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
224  void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
226 
228 
234  vtkSetMacro(NormalToXAxis, vtkTypeBool);
235  vtkGetMacro(NormalToXAxis, vtkTypeBool);
236  vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
237  vtkSetMacro(NormalToYAxis, vtkTypeBool);
238  vtkGetMacro(NormalToYAxis, vtkTypeBool);
239  vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
240  vtkSetMacro(NormalToZAxis, vtkTypeBool);
241  vtkGetMacro(NormalToZAxis, vtkTypeBool);
242  vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
244 
254 
262  void GetPlane(vtkPlane* plane);
263 
271 
276  void UpdatePlacement(void) override;
277 
279 
284  vtkGetObjectMacro(HandleProperty, vtkProperty);
285  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
287 
289 
294  vtkGetObjectMacro(PlaneProperty, vtkProperty);
295  vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
297 
298 protected:
300  ~vtkPlaneWidget() override;
301 
302  // Manage the state of the widget
303  int State;
305  {
306  Start = 0,
313  Pinching
314  };
315 
316  // handles the events
317  static void ProcessEvents(
318  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
319 
320  // ProcessEvents() dispatches to these methods.
327  void OnMouseMove();
328  void OnStartPinch();
329  void OnPinch();
330  void OnEndPinch();
331 
332  // controlling ivars
338 
339  // the plane
344  void HighlightPlane(int highlight);
345 
346  // glyphs representing hot spots (e.g., handles)
351  void HandlesOn(double length);
352  void HandlesOff();
353  int HighlightHandle(vtkProp* prop); // returns cell id
354  void SizeHandles() override;
355 
356  // the normal cone
360  void HighlightNormal(int highlight);
361 
362  // the normal line
366 
367  // the normal cone
371 
372  // the normal line
376 
377  // Do the picking
381 
382  // Register internal Pickers within PickingManager
383  void RegisterPickers() override;
384 
385  // Methods to manipulate the hexahedron.
386  void MoveOrigin(double* p1, double* p2);
387  void MovePoint1(double* p1, double* p2);
388  void MovePoint2(double* p1, double* p2);
389  void MovePoint3(double* p1, double* p2);
390  void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
391  void Spin(double* p1, double* p2);
392  void Scale(double* p1, double* p2, int X, int Y);
393  void Translate(double* p1, double* p2);
394  void Push(double* p1, double* p2);
395 
396  // Plane normal, normalized
397  double Normal[3];
398 
399  // Transform the hexahedral points (used for rotations)
401 
402  // Properties used to control the appearance of selected objects and
403  // the manipulator in general.
409 
411 
414 
415 private:
416  vtkPlaneWidget(const vtkPlaneWidget&) = delete;
417  void operator=(const vtkPlaneWidget&) = delete;
418 };
419 
420 #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:161
ray-cast cell picker for all kinds of Prop3Ds
generate polygonal cone
a simple class to control print indentation
Definition: vtkIndent.h:119
create a line defined by two end points
abstract base class for most VTK objects
Definition: vtkObject.h:82
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:146
represent and manipulate 3D points
Definition: vtkPoints.h:149
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:200
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:76
represent surface properties of a geometric object
Definition: vtkProperty.h:177
create a polygonal sphere centered at the origin
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:170
@ 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(...)