VTK  9.1.0
vtkImplicitPlaneWidget.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkImplicitPlaneWidget.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 =========================================================================*/
70 #ifndef vtkImplicitPlaneWidget_h
71 #define vtkImplicitPlaneWidget_h
72 
73 #include "vtkInteractionWidgetsModule.h" // For export macro
75 
76 class vtkActor;
77 class vtkPolyDataMapper;
78 class vtkCellPicker;
79 class vtkConeSource;
80 class vtkLineSource;
81 class vtkSphereSource;
82 class vtkTubeFilter;
83 class vtkPlane;
84 class vtkCutter;
85 class vtkProperty;
86 class vtkImageData;
87 class vtkOutlineFilter;
88 class vtkFeatureEdges;
89 class vtkPolyData;
90 class vtkTransform;
91 
92 class VTKINTERACTIONWIDGETS_EXPORT vtkImplicitPlaneWidget : public vtkPolyDataSourceWidget
93 {
94 public:
99 
101  void PrintSelf(ostream& os, vtkIndent indent) override;
102 
104 
107  void SetEnabled(int) override;
108  void PlaceWidget(double bounds[6]) override;
109  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
111  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
112  {
113  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
114  }
116 
118 
121  virtual void SetOrigin(double x, double y, double z);
122  virtual void SetOrigin(double x[3]);
123  double* GetOrigin() VTK_SIZEHINT(3);
124  void GetOrigin(double xyz[3]);
126 
128 
131  void SetNormal(double x, double y, double z);
132  void SetNormal(double n[3]);
133  double* GetNormal() VTK_SIZEHINT(3);
134  void GetNormal(double xyz[3]);
136 
138 
145  void SetNormalToXAxis(vtkTypeBool);
146  vtkGetMacro(NormalToXAxis, vtkTypeBool);
147  vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
148  void SetNormalToYAxis(vtkTypeBool);
149  vtkGetMacro(NormalToYAxis, vtkTypeBool);
150  vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
151  void SetNormalToZAxis(vtkTypeBool);
152  vtkGetMacro(NormalToZAxis, vtkTypeBool);
153  vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
155 
157 
161  vtkSetMacro(Tubing, vtkTypeBool);
162  vtkGetMacro(Tubing, vtkTypeBool);
163  vtkBooleanMacro(Tubing, vtkTypeBool);
165 
167 
173  void SetDrawPlane(vtkTypeBool plane);
174  vtkGetMacro(DrawPlane, vtkTypeBool);
175  vtkBooleanMacro(DrawPlane, vtkTypeBool);
177 
179 
183  vtkSetMacro(OutlineTranslation, vtkTypeBool);
184  vtkGetMacro(OutlineTranslation, vtkTypeBool);
185  vtkBooleanMacro(OutlineTranslation, vtkTypeBool);
187 
189 
192  vtkSetMacro(OutsideBounds, vtkTypeBool);
193  vtkGetMacro(OutsideBounds, vtkTypeBool);
194  vtkBooleanMacro(OutsideBounds, vtkTypeBool);
196 
198 
201  vtkSetMacro(ScaleEnabled, vtkTypeBool);
202  vtkGetMacro(ScaleEnabled, vtkTypeBool);
203  vtkBooleanMacro(ScaleEnabled, vtkTypeBool);
205 
207 
211  vtkSetMacro(OriginTranslation, vtkTypeBool);
212  vtkGetMacro(OriginTranslation, vtkTypeBool);
213  vtkBooleanMacro(OriginTranslation, vtkTypeBool);
215 
217 
221  vtkSetClampMacro(DiagonalRatio, double, 0, 2);
222  vtkGetMacro(DiagonalRatio, double);
224 
229  void GetPolyData(vtkPolyData* pd);
230 
235  vtkPolyDataAlgorithm* GetPolyDataAlgorithm() override;
236 
243  void GetPlane(vtkPlane* plane);
244 
249  void UpdatePlacement() override;
250 
254  void SizeHandles() override;
255 
257 
260  vtkGetObjectMacro(NormalProperty, vtkProperty);
261  vtkGetObjectMacro(SelectedNormalProperty, vtkProperty);
263 
265 
269  vtkGetObjectMacro(PlaneProperty, vtkProperty);
270  vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
272 
274 
277  vtkGetObjectMacro(OutlineProperty, vtkProperty);
278  vtkGetObjectMacro(SelectedOutlineProperty, vtkProperty);
280 
282 
286  vtkGetObjectMacro(EdgesProperty, vtkProperty);
288 
289 protected:
292 
293  // Manage the state of the widget
294  int State;
296  {
297  Start = 0,
304  Outside
305  };
306 
307  // handles the events
308  static void ProcessEvents(
309  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
310 
311  // ProcessEvents() dispatches to these methods.
318  void OnMouseMove();
319 
320  // Controlling ivars
325 
326  // The actual plane which is being manipulated
328 
329  // The bounding box is represented by a single voxel image data
334  void HighlightOutline(int highlight);
335  vtkTypeBool OutlineTranslation; // whether the outline can be moved
336  vtkTypeBool ScaleEnabled; // whether the widget can be scaled
337  vtkTypeBool OutsideBounds; // whether the widget can be moved outside input's bounds
338 
339  // The cut plane is produced with a vtkCutter
344  virtual void HighlightPlane(int highlight);
345 
346  // Optional tubes are represented by extracting boundary edges and tubing
351  vtkTypeBool Tubing; // control whether tubing is on
352 
353  // Control final length of the arrow:
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  // The origin positioning handle
381  vtkTypeBool OriginTranslation; // whether the origin (sphere) can be moved
382 
383  // Do the picking
385 
386  // Register internal Pickers within PickingManager
387  void RegisterPickers() override;
388 
389  // Transform the normal (used for rotation)
391 
392  // Methods to manipulate the plane
393  void ConstrainOrigin(double x[3]);
394  void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
395  void TranslatePlane(double* p1, double* p2);
396  void TranslateOutline(double* p1, double* p2);
397  void TranslateOrigin(double* p1, double* p2);
398  void Push(double* p1, double* p2);
399  void Scale(double* p1, double* p2, int X, int Y);
400 
401  // Properties used to control the appearance of selected objects and
402  // the manipulator in general.
411 
413 
414 private:
416  void operator=(const vtkImplicitPlaneWidget&) = delete;
417 };
418 
419 #endif
vtkPolyDataMapper
map vtkPolyData to graphics primitives
Definition: vtkPolyDataMapper.h:146
vtkImplicitPlaneWidget::Scale
void Scale(double *p1, double *p2, int X, int Y)
vtkImplicitPlaneWidget::ConeActor2
vtkActor * ConeActor2
Definition: vtkImplicitPlaneWidget.h:370
vtkImplicitPlaneWidget::Pushing
@ Pushing
Definition: vtkImplicitPlaneWidget.h:302
vtkPlane
perform various plane computations
Definition: vtkPlane.h:143
vtkImplicitPlaneWidget::ConeSource2
vtkConeSource * ConeSource2
Definition: vtkImplicitPlaneWidget.h:368
vtkImplicitPlaneWidget::Rotating
@ Rotating
Definition: vtkImplicitPlaneWidget.h:303
vtkImplicitPlaneWidget::TranslateOutline
void TranslateOutline(double *p1, double *p2)
vtkCutter
Cut vtkDataSet with user-specified implicit function.
Definition: vtkCutter.h:163
vtkImplicitPlaneWidget::SetOrigin
virtual void SetOrigin(double x, double y, double z)
Get the origin of the plane.
vtkImplicitPlaneWidget::ConeMapper2
vtkPolyDataMapper * ConeMapper2
Definition: vtkImplicitPlaneWidget.h:369
vtkImplicitPlaneWidget::Plane
vtkPlane * Plane
Definition: vtkImplicitPlaneWidget.h:327
vtkImplicitPlaneWidget::LineSource
vtkLineSource * LineSource
Definition: vtkImplicitPlaneWidget.h:363
vtkImplicitPlaneWidget::SetOrigin
virtual void SetOrigin(double x[3])
Get the origin of the plane.
vtkImplicitPlaneWidget::NormalToZAxis
vtkTypeBool NormalToZAxis
Definition: vtkImplicitPlaneWidget.h:323
vtkImplicitPlaneWidget::LineSource2
vtkLineSource * LineSource2
Definition: vtkImplicitPlaneWidget.h:373
vtkImplicitPlaneWidget::OnRightButtonUp
void OnRightButtonUp()
vtkImplicitPlaneWidget::HighlightPlane
virtual void HighlightPlane(int highlight)
vtkImplicitPlaneWidget::PlaceWidget
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Methods that satisfy the superclass' API.
Definition: vtkImplicitPlaneWidget.h:110
vtkImplicitPlaneWidget::UpdateRepresentation
void UpdateRepresentation()
vtkImplicitPlaneWidget::Edges
vtkFeatureEdges * Edges
Definition: vtkImplicitPlaneWidget.h:347
vtkImplicitPlaneWidget::OnLeftButtonUp
void OnLeftButtonUp()
vtkImplicitPlaneWidget::Picker
vtkCellPicker * Picker
Definition: vtkImplicitPlaneWidget.h:384
vtkConeSource
generate polygonal cone
Definition: vtkConeSource.h:148
vtkImplicitPlaneWidget::SphereActor
vtkActor * SphereActor
Definition: vtkImplicitPlaneWidget.h:380
vtkImplicitPlaneWidget::Tubing
vtkTypeBool Tubing
Definition: vtkImplicitPlaneWidget.h:351
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:82
vtkImplicitPlaneWidget::OnRightButtonDown
void OnRightButtonDown()
vtkImplicitPlaneWidget::MovingOutline
@ MovingOutline
Definition: vtkImplicitPlaneWidget.h:299
vtkImplicitPlaneWidget::NormalProperty
vtkProperty * NormalProperty
Definition: vtkImplicitPlaneWidget.h:403
vtkImplicitPlaneWidget::Transform
vtkTransform * Transform
Definition: vtkImplicitPlaneWidget.h:390
vtkImplicitPlaneWidget::SelectedOutlineProperty
vtkProperty * SelectedOutlineProperty
Definition: vtkImplicitPlaneWidget.h:408
vtkImplicitPlaneWidget::LineMapper
vtkPolyDataMapper * LineMapper
Definition: vtkImplicitPlaneWidget.h:364
vtkImplicitPlaneWidget::Rotate
void Rotate(int X, int Y, double *p1, double *p2, double *vpn)
vtkImplicitPlaneWidget::OnMiddleButtonDown
void OnMiddleButtonDown()
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
vtkImplicitPlaneWidget::LineMapper2
vtkPolyDataMapper * LineMapper2
Definition: vtkImplicitPlaneWidget.h:374
vtkImplicitPlaneWidget::EdgesActor
vtkActor * EdgesActor
Definition: vtkImplicitPlaneWidget.h:350
vtkImplicitPlaneWidget::DiagonalRatio
double DiagonalRatio
Definition: vtkImplicitPlaneWidget.h:354
vtkImplicitPlaneWidget::ConstrainOrigin
void ConstrainOrigin(double x[3])
vtkImplicitPlaneWidget::HighlightOutline
void HighlightOutline(int highlight)
vtkImplicitPlaneWidget::TranslateOrigin
void TranslateOrigin(double *p1, double *p2)
vtkImplicitPlaneWidget::ConeActor
vtkActor * ConeActor
Definition: vtkImplicitPlaneWidget.h:359
vtkImplicitPlaneWidget::GetOrigin
double * GetOrigin()
Get the origin of the plane.
vtkTubeFilter
filter that generates tubes around lines
Definition: vtkTubeFilter.h:189
vtkImplicitPlaneWidget::ProcessEvents
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
vtkImplicitPlaneWidget::CutMapper
vtkPolyDataMapper * CutMapper
Definition: vtkImplicitPlaneWidget.h:341
vtkImplicitPlaneWidget::DrawPlane
vtkTypeBool DrawPlane
Definition: vtkImplicitPlaneWidget.h:343
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:48
vtkSphereSource
create a polygonal sphere centered at the origin
Definition: vtkSphereSource.h:149
vtkImplicitPlaneWidget::SetEnabled
void SetEnabled(int) override
Methods that satisfy the superclass' API.
vtkImplicitPlaneWidget::LineActor
vtkActor * LineActor
Definition: vtkImplicitPlaneWidget.h:365
vtkImplicitPlaneWidget::OutlineActor
vtkActor * OutlineActor
Definition: vtkImplicitPlaneWidget.h:333
vtkImplicitPlaneWidget::OutsideBounds
vtkTypeBool OutsideBounds
Definition: vtkImplicitPlaneWidget.h:337
vtkImplicitPlaneWidget::OriginTranslation
vtkTypeBool OriginTranslation
Definition: vtkImplicitPlaneWidget.h:381
vtkActor
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:155
vtkImplicitPlaneWidget::SphereMapper
vtkPolyDataMapper * SphereMapper
Definition: vtkImplicitPlaneWidget.h:379
vtkImplicitPlaneWidget::HighlightNormal
void HighlightNormal(int highlight)
vtkImplicitPlaneWidget::OutlineTranslation
vtkTypeBool OutlineTranslation
Definition: vtkImplicitPlaneWidget.h:335
vtkImageData
topologically and geometrically regular array of data
Definition: vtkImageData.h:157
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:113
vtkImplicitPlaneWidget::TranslatePlane
void TranslatePlane(double *p1, double *p2)
vtkImplicitPlaneWidget::NormalToYAxis
vtkTypeBool NormalToYAxis
Definition: vtkImplicitPlaneWidget.h:322
vtkImplicitPlaneWidget::ScaleEnabled
vtkTypeBool ScaleEnabled
Definition: vtkImplicitPlaneWidget.h:336
vtkFeatureEdges
extract interior, boundary, non-manifold, and/or sharp edges from polygonal data
Definition: vtkFeatureEdges.h:137
vtkImplicitPlaneWidget::SelectedPlaneProperty
vtkProperty * SelectedPlaneProperty
Definition: vtkImplicitPlaneWidget.h:406
vtkImplicitPlaneWidget::OnMouseMove
void OnMouseMove()
vtkImplicitPlaneWidget::New
static vtkImplicitPlaneWidget * New()
Instantiate the object.
vtkImplicitPlaneWidget::Box
vtkImageData * Box
Definition: vtkImplicitPlaneWidget.h:330
vtkImplicitPlaneWidget::RegisterPickers
void RegisterPickers() override
Register internal Pickers in the Picking Manager.
vtkImplicitPlaneWidget::EdgesTuber
vtkTubeFilter * EdgesTuber
Definition: vtkImplicitPlaneWidget.h:348
vtkLineSource
create a line defined by two end points
Definition: vtkLineSource.h:170
vtkImplicitPlaneWidget::NormalToXAxis
vtkTypeBool NormalToXAxis
Definition: vtkImplicitPlaneWidget.h:321
vtkImplicitPlaneWidget::SelectedNormalProperty
vtkProperty * SelectedNormalProperty
Definition: vtkImplicitPlaneWidget.h:404
vtkImplicitPlaneWidget::PlaceWidget
void PlaceWidget(double bounds[6]) override
Methods that satisfy the superclass' API.
vtkImplicitPlaneWidget::ConeMapper
vtkPolyDataMapper * ConeMapper
Definition: vtkImplicitPlaneWidget.h:358
vtkImplicitPlaneWidget::MovingPlane
@ MovingPlane
Definition: vtkImplicitPlaneWidget.h:298
vtkImplicitPlaneWidget::LineActor2
vtkActor * LineActor2
Definition: vtkImplicitPlaneWidget.h:375
vtkImplicitPlaneWidget::WidgetState
WidgetState
Definition: vtkImplicitPlaneWidget.h:296
vtkImplicitPlaneWidget::MovingOrigin
@ MovingOrigin
Definition: vtkImplicitPlaneWidget.h:300
vtk3DWidget::PlaceWidget
virtual void PlaceWidget()
This method is used to initially place the widget.
vtkImplicitPlaneWidget
3D widget for manipulating an infinite plane
Definition: vtkImplicitPlaneWidget.h:93
vtkImplicitPlaneWidget::ConeSource
vtkConeSource * ConeSource
Definition: vtkImplicitPlaneWidget.h:357
vtkPolyDataSourceWidget
abstract PolyDataSource-based 3D widget
Definition: vtkPolyDataSourceWidget.h:46
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
vtkOutlineFilter
create wireframe outline for an arbitrary data set or composite dataset
Definition: vtkOutlineFilter.h:151
vtkImplicitPlaneWidget::EdgesProperty
vtkProperty * EdgesProperty
Definition: vtkImplicitPlaneWidget.h:409
vtkImplicitPlaneWidget::Push
void Push(double *p1, double *p2)
vtkImplicitPlaneWidget::OnMiddleButtonUp
void OnMiddleButtonUp()
vtkProperty
represent surface properties of a geometric object
Definition: vtkProperty.h:171
vtkImplicitPlaneWidget::GeneratePlane
void GeneratePlane()
vtkImplicitPlaneWidget::PlaneProperty
vtkProperty * PlaneProperty
Definition: vtkImplicitPlaneWidget.h:405
vtkImplicitPlaneWidget::OutlineMapper
vtkPolyDataMapper * OutlineMapper
Definition: vtkImplicitPlaneWidget.h:332
vtkImplicitPlaneWidget::PlaceWidget
void PlaceWidget() override
Methods that satisfy the superclass' API.
Definition: vtkImplicitPlaneWidget.h:109
vtkImplicitPlaneWidget::Scaling
@ Scaling
Definition: vtkImplicitPlaneWidget.h:301
vtkImplicitPlaneWidget::Cutter
vtkCutter * Cutter
Definition: vtkImplicitPlaneWidget.h:340
vtkCellPicker
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:96
vtkImplicitPlaneWidget::OutlineProperty
vtkProperty * OutlineProperty
Definition: vtkImplicitPlaneWidget.h:407
vtkImplicitPlaneWidget::CreateDefaultProperties
void CreateDefaultProperties()
vtkImplicitPlaneWidget::OnLeftButtonDown
void OnLeftButtonDown()
vtkImplicitPlaneWidget::CutActor
vtkActor * CutActor
Definition: vtkImplicitPlaneWidget.h:342
vtkImplicitPlaneWidget::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkImplicitPlaneWidget::Outline
vtkOutlineFilter * Outline
Definition: vtkImplicitPlaneWidget.h:331
vtkPolyDataSourceWidget.h
vtkImplicitPlaneWidget::Sphere
vtkSphereSource * Sphere
Definition: vtkImplicitPlaneWidget.h:378
vtkImplicitPlaneWidget::EdgesMapper
vtkPolyDataMapper * EdgesMapper
Definition: vtkImplicitPlaneWidget.h:349
vtkPolyDataAlgorithm
Superclass for algorithms that produce only polydata as output.
Definition: vtkPolyDataAlgorithm.h:151