VTK  9.2.6
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=========================================================================*/
78#ifndef vtkPlaneWidget_h
79#define vtkPlaneWidget_h
80
81#include "vtkInteractionWidgetsModule.h" // For export macro
83
84class vtkActor;
85class vtkCellPicker;
86class vtkConeSource;
87class vtkLineSource;
88class vtkPlaneSource;
89class vtkPoints;
90class vtkPolyData;
92class vtkProp;
93class vtkProperty;
94class vtkSphereSource;
95class vtkTransform;
96class vtkPlane;
97
98#define VTK_PLANE_OFF 0
99#define VTK_PLANE_OUTLINE 1
100#define VTK_PLANE_WIREFRAME 2
101#define VTK_PLANE_SURFACE 3
102
103#define VTK_PLANE_ZERO_THRESHOLD (std::numeric_limits<double>::min() * 1000)
104
105class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
106{
107public:
112
114 void PrintSelf(ostream& os, vtkIndent indent) override;
115
117
120 void SetEnabled(int) override;
121 void PlaceWidget(double bounds[6]) override;
122 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
124 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
125 {
126 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
127 }
129
131
134 void SetResolution(int r);
137
139
142 void SetOrigin(double x, double y, double z);
143 void SetOrigin(double x[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() { this->SetRepresentation(VTK_PLANE_OFF); }
200 void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
201 void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
202 void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
204
206
212 vtkSetMacro(NormalToXAxis, vtkTypeBool);
213 vtkGetMacro(NormalToXAxis, vtkTypeBool);
214 vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
215 vtkSetMacro(NormalToYAxis, vtkTypeBool);
216 vtkGetMacro(NormalToYAxis, vtkTypeBool);
217 vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
218 vtkSetMacro(NormalToZAxis, vtkTypeBool);
219 vtkGetMacro(NormalToZAxis, vtkTypeBool);
220 vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
222
232
240 void GetPlane(vtkPlane* plane);
241
249
254 void UpdatePlacement(void) override;
255
257
262 vtkGetObjectMacro(HandleProperty, vtkProperty);
263 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
265
267
272 vtkGetObjectMacro(PlaneProperty, vtkProperty);
273 vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
275
276protected:
278 ~vtkPlaneWidget() override;
279
280 // Manage the state of the widget
281 int State;
283 {
284 Start = 0,
291 Pinching
292 };
293
294 // handles the events
295 static void ProcessEvents(
296 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
297
298 // ProcessEvents() dispatches to these methods.
307 void OnPinch();
309
310 // controlling ivars
316
317 // the plane
322 void HighlightPlane(int highlight);
323
324 // glyphs representing hot spots (e.g., handles)
329 void HandlesOn(double length);
331 int HighlightHandle(vtkProp* prop); // returns cell id
332 void SizeHandles() override;
333
334 // the normal cone
338 void HighlightNormal(int highlight);
339
340 // the normal line
344
345 // the normal cone
349
350 // the normal line
354
355 // Do the picking
359
360 // Register internal Pickers within PickingManager
361 void RegisterPickers() override;
362
363 // Methods to manipulate the hexahedron.
364 void MoveOrigin(double* p1, double* p2);
365 void MovePoint1(double* p1, double* p2);
366 void MovePoint2(double* p1, double* p2);
367 void MovePoint3(double* p1, double* p2);
368 void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
369 void Spin(double* p1, double* p2);
370 void Scale(double* p1, double* p2, int X, int Y);
371 void Translate(double* p1, double* p2);
372 void Push(double* p1, double* p2);
373
374 // Plane normal, normalized
375 double Normal[3];
376
377 // Transform the hexahedral points (used for rotations)
379
380 // Properties used to control the appearance of selected objects and
381 // the manipulator in general.
387
389
392
393private:
394 vtkPlaneWidget(const vtkPlaneWidget&) = delete;
395 void operator=(const vtkPlaneWidget&) = delete;
396};
397
398#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:46
ray-cast cell picker for all kinds of Prop3Ds
generate polygonal cone
a simple class to control print indentation
Definition vtkIndent.h:34
create a line defined by two end points
abstract base class for most VTK objects
Definition vtkObject.h:57
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()
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:34
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:51
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
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(...)