VTK  9.1.0
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=========================================================================*/
94#ifndef vtkPlaneWidget_h
95#define vtkPlaneWidget_h
96
97#include "vtkInteractionWidgetsModule.h" // For export macro
99
100class vtkActor;
101class vtkCellPicker;
102class vtkConeSource;
103class vtkLineSource;
104class vtkPlaneSource;
105class vtkPoints;
106class vtkPolyData;
108class vtkProp;
109class vtkProperty;
110class vtkSphereSource;
111class vtkTransform;
112class vtkPlane;
113
114#define VTK_PLANE_OFF 0
115#define VTK_PLANE_OUTLINE 1
116#define VTK_PLANE_WIREFRAME 2
117#define VTK_PLANE_SURFACE 3
118
119#define VTK_PLANE_ZERO_THRESHOLD (std::numeric_limits<double>::min() * 1000)
120
121class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
122{
123public:
128
130 void PrintSelf(ostream& os, vtkIndent indent) override;
131
133
136 void SetEnabled(int) override;
137 void PlaceWidget(double bounds[6]) override;
138 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
140 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
141 {
142 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
143 }
145
147
150 void SetResolution(int r);
153
155
158 void SetOrigin(double x, double y, double z);
159 void SetOrigin(double x[3]);
161 void GetOrigin(double xyz[3]);
163
165
168 void SetPoint1(double x, double y, double z);
169 void SetPoint1(double x[3]);
170 double* GetPoint1() VTK_SIZEHINT(3);
171 void GetPoint1(double xyz[3]);
173
175
178 void SetPoint2(double x, double y, double z);
179 void SetPoint2(double x[3]);
180 double* GetPoint2() VTK_SIZEHINT(3);
181 void GetPoint2(double xyz[3]);
183
185
188 void SetCenter(double x, double y, double z);
189 void SetCenter(double x[3]);
190 double* GetCenter() VTK_SIZEHINT(3);
191 void GetCenter(double xyz[3]);
193
195
198 void SetNormal(double x, double y, double z);
199 void SetNormal(double x[3]);
200 double* GetNormal() VTK_SIZEHINT(3);
201 void GetNormal(double xyz[3]);
203
205
213 vtkSetClampMacro(Representation, int, VTK_PLANE_OFF, VTK_PLANE_SURFACE);
214 vtkGetMacro(Representation, int);
215 void SetRepresentationToOff() { this->SetRepresentation(VTK_PLANE_OFF); }
216 void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
217 void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
218 void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
220
222
228 vtkSetMacro(NormalToXAxis, vtkTypeBool);
229 vtkGetMacro(NormalToXAxis, vtkTypeBool);
230 vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
231 vtkSetMacro(NormalToYAxis, vtkTypeBool);
232 vtkGetMacro(NormalToYAxis, vtkTypeBool);
233 vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
234 vtkSetMacro(NormalToZAxis, vtkTypeBool);
235 vtkGetMacro(NormalToZAxis, vtkTypeBool);
236 vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
238
248
256 void GetPlane(vtkPlane* plane);
257
265
270 void UpdatePlacement(void) override;
271
273
278 vtkGetObjectMacro(HandleProperty, vtkProperty);
279 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
281
283
288 vtkGetObjectMacro(PlaneProperty, vtkProperty);
289 vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
291
292protected:
294 ~vtkPlaneWidget() override;
295
296 // Manage the state of the widget
297 int State;
299 {
300 Start = 0,
307 Pinching
308 };
309
310 // handles the events
311 static void ProcessEvents(
312 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
313
314 // ProcessEvents() dispatches to these methods.
323 void OnPinch();
325
326 // controlling ivars
332
333 // the plane
338 void HighlightPlane(int highlight);
339
340 // glyphs representing hot spots (e.g., handles)
345 void HandlesOn(double length);
347 int HighlightHandle(vtkProp* prop); // returns cell id
348 void SizeHandles() override;
349
350 // the normal cone
354 void HighlightNormal(int highlight);
355
356 // the normal line
360
361 // the normal cone
365
366 // the normal line
370
371 // Do the picking
375
376 // Register internal Pickers within PickingManager
377 void RegisterPickers() override;
378
379 // Methods to manipulate the hexahedron.
380 void MoveOrigin(double* p1, double* p2);
381 void MovePoint1(double* p1, double* p2);
382 void MovePoint2(double* p1, double* p2);
383 void MovePoint3(double* p1, double* p2);
384 void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
385 void Spin(double* p1, double* p2);
386 void Scale(double* p1, double* p2, int X, int Y);
387 void Translate(double* p1, double* p2);
388 void Push(double* p1, double* p2);
389
390 // Plane normal, normalized
391 double Normal[3];
392
393 // Transform the hexahedral points (used for rotations)
395
396 // Properties used to control the appearance of selected objects and
397 // the manipulator in general.
403
405
408
409private:
410 vtkPlaneWidget(const vtkPlaneWidget&) = delete;
411 void operator=(const vtkPlaneWidget&) = delete;
412};
413
414#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:155
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:96
generate polygonal cone
a simple class to control print indentation
Definition: vtkIndent.h:113
create a line defined by two end points
abstract base class for most VTK objects
Definition: vtkObject.h:73
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
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
~vtkPlaneWidget() override
void GetPlane(vtkPlane *plane)
Get the planes describing the implicit function defined by the plane widget.
void MovePoint2(double *p1, double *p2)
vtkPolyDataAlgorithm * GetPolyDataAlgorithm() override
Satisfies superclass API.
void PlaceWidget(double bounds[6]) override
Methods that satisfy the superclass' API.
double * GetOrigin()
Set/Get the origin of the plane.
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)
static vtkPlaneWidget * New()
Instantiate the object.
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
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:143
represent and manipulate 3D points
Definition: vtkPoints.h:143
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:195
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:67
represent surface properties of a geometric object
Definition: vtkProperty.h:171
create a polygonal sphere centered at the origin
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
@ 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(...)