VTK  9.2.6
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:
98  static vtkImplicitPlaneWidget* New();
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:
291  ~vtkImplicitPlaneWidget() override;
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.
312  void OnLeftButtonDown();
313  void OnLeftButtonUp();
314  void OnMiddleButtonDown();
315  void OnMiddleButtonUp();
316  void OnRightButtonDown();
317  void OnRightButtonUp();
318  void OnMouseMove();
319 
320  // Controlling ivars
324  void UpdateRepresentation();
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.
410  void CreateDefaultProperties();
411 
412  void GeneratePlane();
413 
414 private:
416  void operator=(const vtkImplicitPlaneWidget&) = delete;
417 };
418 
419 #endif
3D widget for manipulating an infinite plane
Cut vtkDataSet with user-specified implicit function.
Definition: vtkCutter.h:73
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:51
abstract base class for most VTK objects
Definition: vtkObject.h:62
abstract PolyDataSource-based 3D widget
vtkPolyDataMapper * ConeMapper
represent surface properties of a geometric object
Definition: vtkProperty.h:67
vtkPolyDataMapper * EdgesMapper
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
Handles the char widget activation event.
virtual void SetEnabled(int)
Methods for turning the interactor observer on and off, and determining its state.
vtkPolyDataMapper * CutMapper
generate polygonal cone
Definition: vtkConeSource.h:44
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:60
void PlaceWidget() override
Overrides vtk3DWidget PlaceWidget() so that it doesn't complain if there's no Input and no Prop3D...
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:90
virtual void RegisterPickers()
Register internal Pickers in the Picking Manager.
int vtkTypeBool
Definition: vtkABI.h:69
create wireframe outline for an arbitrary data set or composite dataset
create a polygonal sphere centered at the origin
Superclass for algorithms that produce only polydata as output.
filter that generates tubes around lines
Definition: vtkTubeFilter.h:85
a simple class to control print indentation
Definition: vtkIndent.h:39
extract interior, boundary, non-manifold, and/or sharp edges from polygonal data
topologically and geometrically regular array of data
Definition: vtkImageData.h:53
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
perform various plane computations
Definition: vtkPlane.h:36
vtkPolyDataMapper * OutlineMapper
#define VTK_SIZEHINT(...)
vtkPolyDataMapper * ConeMapper2
create a line defined by two end points
Definition: vtkLineSource.h:63
map vtkPolyData to graphics primitives
void PlaceWidget() override
Methods that satisfy the superclass' API.
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:72
vtkPolyDataMapper * LineMapper
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
vtkPolyDataMapper * LineMapper2
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Methods that satisfy the superclass' API.
virtual void PlaceWidget()
This method is used to initially place the widget.
vtkPolyDataMapper * SphereMapper