VTK  9.0.3
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 =========================================================================*/
75 #ifndef vtkPlaneWidget_h
76 #define vtkPlaneWidget_h
77 
78 #include "vtkInteractionWidgetsModule.h" // For export macro
80 
81 class vtkActor;
82 class vtkCellPicker;
83 class vtkConeSource;
84 class vtkLineSource;
85 class vtkPlaneSource;
86 class vtkPoints;
87 class vtkPolyData;
88 class vtkPolyDataMapper;
89 class vtkProp;
90 class vtkProperty;
91 class vtkSphereSource;
92 class vtkTransform;
93 class vtkPlane;
94 
95 #define VTK_PLANE_OFF 0
96 #define VTK_PLANE_OUTLINE 1
97 #define VTK_PLANE_WIREFRAME 2
98 #define VTK_PLANE_SURFACE 3
99 
100 class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
101 {
102 public:
106  static vtkPlaneWidget* New();
107 
109  void PrintSelf(ostream& os, vtkIndent indent) override;
110 
112 
115  void SetEnabled(int) override;
116  void PlaceWidget(double bounds[6]) override;
117  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
119  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
120  {
121  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
122  }
124 
126 
129  void SetResolution(int r);
132 
134 
137  void SetOrigin(double x, double y, double z);
138  void SetOrigin(double x[3]);
139  double* GetOrigin() VTK_SIZEHINT(3);
140  void GetOrigin(double xyz[3]);
142 
144 
147  void SetPoint1(double x, double y, double z);
148  void SetPoint1(double x[3]);
149  double* GetPoint1() VTK_SIZEHINT(3);
150  void GetPoint1(double xyz[3]);
152 
154 
157  void SetPoint2(double x, double y, double z);
158  void SetPoint2(double x[3]);
159  double* GetPoint2() VTK_SIZEHINT(3);
160  void GetPoint2(double xyz[3]);
162 
164 
167  void SetCenter(double x, double y, double z);
168  void SetCenter(double x[3]);
169  double* GetCenter() VTK_SIZEHINT(3);
170  void GetCenter(double xyz[3]);
172 
174 
177  void SetNormal(double x, double y, double z);
178  void SetNormal(double x[3]);
179  double* GetNormal() VTK_SIZEHINT(3);
180  void GetNormal(double xyz[3]);
182 
184 
192  vtkSetClampMacro(Representation, int, VTK_PLANE_OFF, VTK_PLANE_SURFACE);
193  vtkGetMacro(Representation, int);
194  void SetRepresentationToOff() { this->SetRepresentation(VTK_PLANE_OFF); }
195  void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
196  void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
197  void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
199 
201 
207  vtkSetMacro(NormalToXAxis, vtkTypeBool);
208  vtkGetMacro(NormalToXAxis, vtkTypeBool);
209  vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
210  vtkSetMacro(NormalToYAxis, vtkTypeBool);
211  vtkGetMacro(NormalToYAxis, vtkTypeBool);
212  vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
213  vtkSetMacro(NormalToZAxis, vtkTypeBool);
214  vtkGetMacro(NormalToZAxis, vtkTypeBool);
215  vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
217 
227 
235  void GetPlane(vtkPlane* plane);
236 
244 
249  void UpdatePlacement(void) override;
250 
252 
257  vtkGetObjectMacro(HandleProperty, vtkProperty);
258  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
260 
262 
267  vtkGetObjectMacro(PlaneProperty, vtkProperty);
268  vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
270 
271 protected:
273  ~vtkPlaneWidget() override;
274 
275  // Manage the state of the widget
276  int State;
278  {
279  Start = 0,
286  Pinching
287  };
288 
289  // handles the events
290  static void ProcessEvents(
291  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
292 
293  // ProcessEvents() dispatches to these methods.
300  void OnMouseMove();
301  void OnStartPinch();
302  void OnPinch();
303  void OnEndPinch();
304 
305  // controlling ivars
311 
312  // the plane
317  void HighlightPlane(int highlight);
318 
319  // glyphs representing hot spots (e.g., handles)
324  void HandlesOn(double length);
325  void HandlesOff();
326  int HighlightHandle(vtkProp* prop); // returns cell id
327  void SizeHandles() override;
328 
329  // the normal cone
333  void HighlightNormal(int highlight);
334 
335  // the normal line
339 
340  // the normal cone
344 
345  // the normal line
349 
350  // Do the picking
354 
355  // Register internal Pickers within PickingManager
356  void RegisterPickers() override;
357 
358  // Methods to manipulate the hexahedron.
359  void MoveOrigin(double* p1, double* p2);
360  void MovePoint1(double* p1, double* p2);
361  void MovePoint2(double* p1, double* p2);
362  void MovePoint3(double* p1, double* p2);
363  void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
364  void Spin(double* p1, double* p2);
365  void Scale(double* p1, double* p2, int X, int Y);
366  void Translate(double* p1, double* p2);
367  void Push(double* p1, double* p2);
368 
369  // Plane normal, normalized
370  double Normal[3];
371 
372  // Transform the hexahedral points (used for rotations)
374 
375  // Properties used to control the appearance of selected objects and
376  // the manipulator in general.
382 
384 
387 
388 private:
389  vtkPlaneWidget(const vtkPlaneWidget&) = delete;
390  void operator=(const vtkPlaneWidget&) = delete;
391 };
392 
393 #endif
virtual void PlaceWidget()
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:54
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()
~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
We have to redeclare this abstract, PlaceWidget() requires it.
vtkPolyDataMapper * PlaneMapper
void OnRightButtonUp()
vtkProperty * PlaneProperty
void PlaceWidget() override
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
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()
void SetRepresentationToOutline()
vtkActor * CurrentHandle
void SelectRepresentation()
double HandleSizeFactor
void SetOrigin(double x[3])
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()
void Translate(double *p1, double *p2)
void OnMiddleButtonUp()
vtkTypeBool NormalToXAxis
vtkActor * LineActor2
perform various plane computations
Definition: vtkPlane.h:32
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:85
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:48
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(...)