VTK
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 class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
107 {
108 public:
112  static vtkPlaneWidget *New();
113 
115  void PrintSelf(ostream& os, vtkIndent indent) override;
116 
118 
121  void SetEnabled(int) override;
122  void PlaceWidget(double bounds[6]) override;
123  void PlaceWidget() override
124  {this->Superclass::PlaceWidget();}
125  void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
126  double zmin, double zmax) override
127  {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
129 
131 
134  void SetResolution(int r);
135  int GetResolution();
137 
139 
142  void SetOrigin(double x, double y, double z);
143  void SetOrigin(double x[3]);
144  double* GetOrigin() VTK_SIZEHINT(3);
145  void GetOrigin(double xyz[3]);
147 
149 
152  void SetPoint1(double x, double y, double z);
153  void SetPoint1(double x[3]);
154  double* GetPoint1() VTK_SIZEHINT(3);
155  void GetPoint1(double xyz[3]);
157 
159 
162  void SetPoint2(double x, double y, double z);
163  void SetPoint2(double x[3]);
164  double* GetPoint2() VTK_SIZEHINT(3);
165  void GetPoint2(double xyz[3]);
167 
169 
172  void SetCenter(double x, double y, double z);
173  void SetCenter(double x[3]);
174  double* GetCenter() VTK_SIZEHINT(3);
175  void GetCenter(double xyz[3]);
177 
179 
182  void SetNormal(double x, double y, double z);
183  void SetNormal(double x[3]);
184  double* GetNormal() VTK_SIZEHINT(3);
185  void GetNormal(double xyz[3]);
187 
189 
197  vtkSetClampMacro(Representation,int,VTK_PLANE_OFF,VTK_PLANE_SURFACE);
198  vtkGetMacro(Representation,int);
199  void SetRepresentationToOff()
200  {this->SetRepresentation(VTK_PLANE_OFF);}
202  {this->SetRepresentation(VTK_PLANE_OUTLINE);}
204  {this->SetRepresentation(VTK_PLANE_WIREFRAME);}
206  {this->SetRepresentation(VTK_PLANE_SURFACE);}
208 
210 
216  vtkSetMacro(NormalToXAxis,vtkTypeBool);
217  vtkGetMacro(NormalToXAxis,vtkTypeBool);
218  vtkBooleanMacro(NormalToXAxis,vtkTypeBool);
219  vtkSetMacro(NormalToYAxis,vtkTypeBool);
220  vtkGetMacro(NormalToYAxis,vtkTypeBool);
221  vtkBooleanMacro(NormalToYAxis,vtkTypeBool);
222  vtkSetMacro(NormalToZAxis,vtkTypeBool);
223  vtkGetMacro(NormalToZAxis,vtkTypeBool);
224  vtkBooleanMacro(NormalToZAxis,vtkTypeBool);
226 
235  void GetPolyData(vtkPolyData *pd);
236 
244  void GetPlane(vtkPlane *plane);
245 
253 
258  void UpdatePlacement(void) override;
259 
261 
266  vtkGetObjectMacro(HandleProperty,vtkProperty);
267  vtkGetObjectMacro(SelectedHandleProperty,vtkProperty);
269 
271 
275  virtual void SetPlaneProperty(vtkProperty*);
276  vtkGetObjectMacro(PlaneProperty,vtkProperty);
277  vtkGetObjectMacro(SelectedPlaneProperty,vtkProperty);
279 
280 protected:
281  vtkPlaneWidget();
282  ~vtkPlaneWidget() override;
283 
284  // Manage the state of the widget
285  int State;
287  {
288  Start=0,
295  Pinching
296  };
297 
298  //handles the events
299  static void ProcessEvents(vtkObject* object,
300  unsigned long event,
301  void* clientdata,
302  void* calldata);
303 
304  // ProcessEvents() dispatches to these methods.
305  void OnLeftButtonDown();
306  void OnLeftButtonUp();
307  void OnMiddleButtonDown();
308  void OnMiddleButtonUp();
309  void OnRightButtonDown();
310  void OnRightButtonUp();
311  void OnMouseMove();
312  void OnStartPinch();
313  void OnPinch();
314  void OnEndPinch();
315 
316  // controlling ivars
321  void SelectRepresentation();
322 
323  // the plane
328  void HighlightPlane(int highlight);
329 
330  // glyphs representing hot spots (e.g., handles)
334  void PositionHandles();
335  void HandlesOn(double length);
336  void HandlesOff();
337  int HighlightHandle(vtkProp *prop); //returns cell id
338  void SizeHandles() override;
339 
340  // the normal cone
344  void HighlightNormal(int highlight);
345 
346  // the normal line
350 
351  // the normal cone
355 
356  // the normal line
360 
361  // Do the picking
365 
366  // Register internal Pickers within PickingManager
367  void RegisterPickers() override;
368 
369  // Methods to manipulate the hexahedron.
370  void MoveOrigin(double *p1, double *p2);
371  void MovePoint1(double *p1, double *p2);
372  void MovePoint2(double *p1, double *p2);
373  void MovePoint3(double *p1, double *p2);
374  void Rotate(int X, int Y, double *p1, double *p2, double *vpn);
375  void Spin(double *p1, double *p2);
376  void Scale(double *p1, double *p2, int X, int Y);
377  void Translate(double *p1, double *p2);
378  void Push(double *p1, double *p2);
379 
380  // Plane normal, normalized
381  double Normal[3];
382 
383  // Transform the hexahedral points (used for rotations)
385 
386  // Properties used to control the appearance of selected objects and
387  // the manipulator in general.
392  void CreateDefaultProperties();
393 
394  void GeneratePlane();
395 
398 
399 private:
400  vtkPlaneWidget(const vtkPlaneWidget&) = delete;
401  void operator=(const vtkPlaneWidget&) = delete;
402 };
403 
404 #endif
vtkPolyDataMapper
map vtkPolyData to graphics primitives
Definition: vtkPolyDataMapper.h:42
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:39
vtkPlane
perform various plane computations
Definition: vtkPlane.h:37
vtkPlaneWidget::Scaling
Definition: vtkPlaneWidget.h:290
vtkPlaneWidget::SetRepresentationToSurface
void SetRepresentationToSurface()
Definition: vtkPlaneWidget.h:205
vtkPlaneWidget::LineSource2
vtkLineSource * LineSource2
Definition: vtkPlaneWidget.h:359
vtkPlaneWidget::CurrentHandle
vtkActor * CurrentHandle
Definition: vtkPlaneWidget.h:364
vtkPlaneWidget::ConeActor
vtkActor * ConeActor
Definition: vtkPlaneWidget.h:341
vtkPlaneWidget::Handle
vtkActor ** Handle
Definition: vtkPlaneWidget.h:331
vtkPolyDataSourceWidget::PlaceWidget
void PlaceWidget() override
Overrides vtk3DWidget PlaceWidget() so that it doesn't complain if there's no Input and no Prop3D.
vtkPolyDataSourceWidget::GetPolyDataAlgorithm
virtual vtkPolyDataAlgorithm * GetPolyDataAlgorithm()=0
Returns underlying vtkPolyDataAlgorithm that determines geometry.
vtkObject::New
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
vtkPlaneWidget::WidgetState
WidgetState
Definition: vtkPlaneWidget.h:286
vtkPlaneSource
create an array of quadrilaterals located in a plane
Definition: vtkPlaneSource.h:60
vtkX3D::Normal
Definition: vtkX3D.h:45
vtkPlaneWidget::LineActor
vtkActor * LineActor
Definition: vtkPlaneWidget.h:347
vtkPlaneWidget::State
int State
Definition: vtkPlaneWidget.h:285
vtkConeSource
generate polygonal cone
Definition: vtkConeSource.h:44
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:59
vtkPlaneWidget::SelectedHandleProperty
vtkProperty * SelectedHandleProperty
Definition: vtkPlaneWidget.h:389
vtkX3D::length
Definition: vtkX3D.h:393
vtkPlaneWidget::ConeSource2
vtkConeSource * ConeSource2
Definition: vtkPlaneWidget.h:354
vtkPlaneWidget::Pushing
Definition: vtkPlaneWidget.h:291
vtkPlaneWidget::ConeSource
vtkConeSource * ConeSource
Definition: vtkPlaneWidget.h:343
vtkPlaneWidget::PlanePicker
vtkCellPicker * PlanePicker
Definition: vtkPlaneWidget.h:363
vtkPlaneWidget::NormalToXAxis
vtkTypeBool NormalToXAxis
Definition: vtkPlaneWidget.h:317
vtkPlaneWidget::PlaneActor
vtkActor * PlaneActor
Definition: vtkPlaneWidget.h:324
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:60
vtkPlaneWidget
3D widget for manipulating a finite plane
Definition: vtkPlaneWidget.h:106
vtkPlaneWidget::NormalToZAxis
vtkTypeBool NormalToZAxis
Definition: vtkPlaneWidget.h:319
vtkPlaneWidget::LineMapper2
vtkPolyDataMapper * LineMapper2
Definition: vtkPlaneWidget.h:358
vtkPlaneWidget::Spinning
Definition: vtkPlaneWidget.h:293
vtkPlaneWidget::HandleProperty
vtkProperty * HandleProperty
Definition: vtkPlaneWidget.h:388
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:42
vtkPlaneWidget::PlaneProperty
vtkProperty * PlaneProperty
Definition: vtkPlaneWidget.h:390
vtkPlaneWidget::SetRepresentationToOutline
void SetRepresentationToOutline()
Definition: vtkPlaneWidget.h:201
vtkPolyDataSourceWidget::UpdatePlacement
virtual void UpdatePlacement()=0
If you've made changes to the underlying vtkPolyDataSource AFTER your initial call to PlaceWidget(),...
vtkSphereSource
create a polygonal sphere centered at the origin
Definition: vtkSphereSource.h:46
vtkInteractorObserver::ProcessEvents
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
Handles the char widget activation event.
vtkPlaneWidget::LineMapper
vtkPolyDataMapper * LineMapper
Definition: vtkPlaneWidget.h:348
vtkPlaneWidget::PlaceWidget
void PlaceWidget() override
Definition: vtkPlaneWidget.h:123
vtkActor
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:51
vtkInteractorObserver::SetEnabled
virtual void SetEnabled(int)
Methods for turning the interactor observer on and off, and determining its state.
Definition: vtkInteractorObserver.h:73
vtkPlaneWidget::ConeActor2
vtkActor * ConeActor2
Definition: vtkPlaneWidget.h:352
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
VTK_PLANE_WIREFRAME
#define VTK_PLANE_WIREFRAME
Definition: vtkPlaneWidget.h:103
vtkPlaneWidget::PlaneOutline
vtkPolyData * PlaneOutline
Definition: vtkPlaneWidget.h:327
vtkPlaneWidget::LineActor2
vtkActor * LineActor2
Definition: vtkPlaneWidget.h:357
vtkPlaneWidget::LineSource
vtkLineSource * LineSource
Definition: vtkPlaneWidget.h:349
vtkPlaneWidget::LastPickValid
int LastPickValid
Definition: vtkPlaneWidget.h:396
vtkLineSource
create a line defined by two end points
Definition: vtkLineSource.h:42
vtkPolyDataSourceWidget::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkPlaneWidget::SelectedPlaneProperty
vtkProperty * SelectedPlaneProperty
Definition: vtkPlaneWidget.h:391
vtkInteractorObserver::RegisterPickers
virtual void RegisterPickers()
Register internal Pickers in the Picking Manager.
vtkPlaneWidget::Representation
int Representation
Definition: vtkPlaneWidget.h:320
vtkProp
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:52
VTK_PLANE_SURFACE
#define VTK_PLANE_SURFACE
Definition: vtkPlaneWidget.h:104
vtk3DWidget::SizeHandles
virtual void SizeHandles()
Definition: vtk3DWidget.h:152
vtkPlaneWidget::PlaceWidget
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Definition: vtkPlaneWidget.h:125
vtk3DWidget::PlaceWidget
virtual void PlaceWidget()
VTK_PLANE_OFF
#define VTK_PLANE_OFF
Definition: vtkPlaneWidget.h:101
vtkPlaneWidget::ConeMapper
vtkPolyDataMapper * ConeMapper
Definition: vtkPlaneWidget.h:342
vtkPolyDataSourceWidget
abstract PolyDataSource-based 3D widget
Definition: vtkPolyDataSourceWidget.h:45
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:85
vtkPlaneWidget::HandleGeometry
vtkSphereSource ** HandleGeometry
Definition: vtkPlaneWidget.h:333
vtkPlaneWidget::ConeMapper2
vtkPolyDataMapper * ConeMapper2
Definition: vtkPlaneWidget.h:353
vtkPlaneWidget::HandlePicker
vtkCellPicker * HandlePicker
Definition: vtkPlaneWidget.h:362
vtkPlaneWidget::PlaneMapper
vtkPolyDataMapper * PlaneMapper
Definition: vtkPlaneWidget.h:325
vtkPlaneWidget::SetRepresentationToWireframe
void SetRepresentationToWireframe()
Definition: vtkPlaneWidget.h:203
vtkProperty
represent surface properties of a geometric object
Definition: vtkProperty.h:66
vtkPlaneWidget::Moving
Definition: vtkPlaneWidget.h:289
vtkCellPicker
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:69
vtkPlaneWidget::HandleMapper
vtkPolyDataMapper ** HandleMapper
Definition: vtkPlaneWidget.h:332
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkPlaneWidget::Transform
vtkTransform * Transform
Definition: vtkPlaneWidget.h:384
vtkPlaneWidget::PlaneSource
vtkPlaneSource * PlaneSource
Definition: vtkPlaneWidget.h:326
vtkPlaneWidget::Outside
Definition: vtkPlaneWidget.h:294
vtkPlaneWidget::Rotating
Definition: vtkPlaneWidget.h:292
vtkPlaneWidget::HandleSizeFactor
double HandleSizeFactor
Definition: vtkPlaneWidget.h:397
vtkPolyDataSourceWidget.h
VTK_PLANE_OUTLINE
#define VTK_PLANE_OUTLINE
Definition: vtkPlaneWidget.h:102
vtkPlaneWidget::NormalToYAxis
vtkTypeBool NormalToYAxis
Definition: vtkPlaneWidget.h:318
vtkPolyDataAlgorithm
Superclass for algorithms that produce only polydata as output.
Definition: vtkPolyDataAlgorithm.h:44