VTK  9.3.0
vtkPlaneWidget.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
69#ifndef vtkPlaneWidget_h
70#define vtkPlaneWidget_h
71
72#include "vtkInteractionWidgetsModule.h" // For export macro
74
75VTK_ABI_NAMESPACE_BEGIN
76class vtkActor;
77class vtkCellPicker;
78class vtkConeSource;
79class vtkLineSource;
80class vtkPlaneSource;
81class vtkPoints;
82class vtkPolyData;
84class vtkProp;
85class vtkProperty;
86class vtkSphereSource;
87class vtkTransform;
88class vtkPlane;
89
90#define VTK_PLANE_OFF 0
91#define VTK_PLANE_OUTLINE 1
92#define VTK_PLANE_WIREFRAME 2
93#define VTK_PLANE_SURFACE 3
94
95#define VTK_PLANE_ZERO_THRESHOLD (std::numeric_limits<double>::min() * 1000)
96
97class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
98{
99public:
104
106 void PrintSelf(ostream& os, vtkIndent indent) override;
107
109
112 void SetEnabled(int) override;
113 void PlaceWidget(double bounds[6]) override;
114 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
116 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
117 {
118 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
119 }
121
123
126 void SetResolution(int r);
129
131
134 void SetOrigin(double x, double y, double z);
135 void SetOrigin(double x[3]);
137 void GetOrigin(double xyz[3]);
139
141
144 void SetPoint1(double x, double y, double z);
145 void SetPoint1(double x[3]);
146 double* GetPoint1() VTK_SIZEHINT(3);
147 void GetPoint1(double xyz[3]);
149
151
154 void SetPoint2(double x, double y, double z);
155 void SetPoint2(double x[3]);
156 double* GetPoint2() VTK_SIZEHINT(3);
157 void GetPoint2(double xyz[3]);
159
161
164 void SetCenter(double x, double y, double z);
165 void SetCenter(double x[3]);
166 double* GetCenter() VTK_SIZEHINT(3);
167 void GetCenter(double xyz[3]);
169
171
174 void SetNormal(double x, double y, double z);
175 void SetNormal(double x[3]);
176 double* GetNormal() VTK_SIZEHINT(3);
177 void GetNormal(double xyz[3]);
179
181
189 vtkSetClampMacro(Representation, int, VTK_PLANE_OFF, VTK_PLANE_SURFACE);
190 vtkGetMacro(Representation, int);
191 void SetRepresentationToOff() { this->SetRepresentation(VTK_PLANE_OFF); }
192 void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
193 void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
194 void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
196
198
204 vtkSetMacro(NormalToXAxis, vtkTypeBool);
205 vtkGetMacro(NormalToXAxis, vtkTypeBool);
206 vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
207 vtkSetMacro(NormalToYAxis, vtkTypeBool);
208 vtkGetMacro(NormalToYAxis, vtkTypeBool);
209 vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
210 vtkSetMacro(NormalToZAxis, vtkTypeBool);
211 vtkGetMacro(NormalToZAxis, vtkTypeBool);
212 vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
214
224
232 void GetPlane(vtkPlane* plane);
233
241
246 void UpdatePlacement() override;
247
249
254 vtkGetObjectMacro(HandleProperty, vtkProperty);
255 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
257
259
264 vtkGetObjectMacro(PlaneProperty, vtkProperty);
265 vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
267
268protected:
270 ~vtkPlaneWidget() override;
271
272 // Manage the state of the widget
273 int State;
285
286 // handles the events
287 static void ProcessEvents(
288 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
289
290 // ProcessEvents() dispatches to these methods.
299 void OnPinch();
301
302 // controlling ivars
308
309 // the plane
314 void HighlightPlane(int highlight);
315
316 // glyphs representing hot spots (e.g., handles)
321 void HandlesOn(double length);
323 int HighlightHandle(vtkProp* prop); // returns cell id
324 void SizeHandles() override;
325
326 // the normal cone
330 void HighlightNormal(int highlight);
331
332 // the normal line
336
337 // the normal cone
341
342 // the normal line
346
347 // Do the picking
351
352 // Register internal Pickers within PickingManager
353 void RegisterPickers() override;
354
355 // Methods to manipulate the hexahedron.
356 void MoveOrigin(double* p1, double* p2);
357 void MovePoint1(double* p1, double* p2);
358 void MovePoint2(double* p1, double* p2);
359 void MovePoint3(double* p1, double* p2);
360 void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
361 void Spin(double* p1, double* p2);
362 void Scale(double* p1, double* p2, int X, int Y);
363 void Translate(double* p1, double* p2);
364 void Push(double* p1, double* p2);
365
366 // Plane normal, normalized
367 double Normal[3];
368
369 // Transform the hexahedral points (used for rotations)
371
372 // Properties used to control the appearance of selected objects and
373 // the manipulator in general.
379
381
384
385private:
386 vtkPlaneWidget(const vtkPlaneWidget&) = delete;
387 void operator=(const vtkPlaneWidget&) = delete;
388};
389
390VTK_ABI_NAMESPACE_END
391#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:41
ray-cast cell picker for all kinds of Prop3Ds
generate polygonal cone
a simple class to control print indentation
Definition vtkIndent.h:29
create a line defined by two end points
abstract base class for most VTK objects
Definition vtkObject.h:52
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 UpdatePlacement() override
Satisfies 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()
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:26
represent and manipulate 3D points
Definition vtkPoints.h:29
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:80
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:46
represent surface properties of a geometric object
Definition vtkProperty.h:57
create a polygonal sphere centered at the origin
describes linear transformations via a 4x4 matrix
int vtkTypeBool
Definition vtkABI.h:64
#define VTK_PLANE_OUTLINE
#define VTK_PLANE_WIREFRAME
#define VTK_PLANE_OFF
#define VTK_PLANE_SURFACE
#define VTK_SIZEHINT(...)