VTK  9.3.20240424
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
88#ifndef vtkPlaneWidget_h
89#define vtkPlaneWidget_h
90
91#include "vtkInteractionWidgetsModule.h" // For export macro
93
94VTK_ABI_NAMESPACE_BEGIN
95class vtkActor;
96class vtkCellPicker;
97class vtkConeSource;
98class vtkLineSource;
99class vtkPlaneSource;
100class vtkPoints;
101class vtkPolyData;
103class vtkProp;
104class vtkProperty;
105class vtkSphereSource;
106class vtkTransform;
107class vtkPlane;
108
109#define VTK_PLANE_OFF 0
110#define VTK_PLANE_OUTLINE 1
111#define VTK_PLANE_WIREFRAME 2
112#define VTK_PLANE_SURFACE 3
113
114#define VTK_PLANE_ZERO_THRESHOLD (std::numeric_limits<double>::min() * 1000)
115
116class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
117{
118public:
123
125 void PrintSelf(ostream& os, vtkIndent indent) override;
126
128
131 void SetEnabled(int) override;
132 void PlaceWidget(double bounds[6]) override;
133 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
135 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
136 {
137 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
138 }
140
142
145 void SetResolution(int r);
148
150
153 void SetOrigin(double x, double y, double z);
154 void SetOrigin(double x[3]);
156 void GetOrigin(double xyz[3]);
158
160
163 void SetPoint1(double x, double y, double z);
164 void SetPoint1(double x[3]);
165 double* GetPoint1() VTK_SIZEHINT(3);
166 void GetPoint1(double xyz[3]);
168
170
173 void SetPoint2(double x, double y, double z);
174 void SetPoint2(double x[3]);
175 double* GetPoint2() VTK_SIZEHINT(3);
176 void GetPoint2(double xyz[3]);
178
180
183 void SetCenter(double x, double y, double z);
184 void SetCenter(double x[3]);
185 double* GetCenter() VTK_SIZEHINT(3);
186 void GetCenter(double xyz[3]);
188
190
193 void SetNormal(double x, double y, double z);
194 void SetNormal(double x[3]);
195 double* GetNormal() VTK_SIZEHINT(3);
196 void GetNormal(double xyz[3]);
198
200
208 vtkSetClampMacro(Representation, int, VTK_PLANE_OFF, VTK_PLANE_SURFACE);
209 vtkGetMacro(Representation, int);
210 void SetRepresentationToOff() { this->SetRepresentation(VTK_PLANE_OFF); }
211 void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
212 void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
213 void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
215
217
223 vtkSetMacro(NormalToXAxis, vtkTypeBool);
224 vtkGetMacro(NormalToXAxis, vtkTypeBool);
225 vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
226 vtkSetMacro(NormalToYAxis, vtkTypeBool);
227 vtkGetMacro(NormalToYAxis, vtkTypeBool);
228 vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
229 vtkSetMacro(NormalToZAxis, vtkTypeBool);
230 vtkGetMacro(NormalToZAxis, vtkTypeBool);
231 vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
233
243
251 void GetPlane(vtkPlane* plane);
252
260
265 void UpdatePlacement() override;
266
268
273 vtkGetObjectMacro(HandleProperty, vtkProperty);
274 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
276
278
283 vtkGetObjectMacro(PlaneProperty, vtkProperty);
284 vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
286
287protected:
289 ~vtkPlaneWidget() override;
290
291 // Manage the state of the widget
292 int State;
294 {
295 Start = 0,
302 Pinching
303 };
304
305 // handles the events
306 static void ProcessEvents(
307 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
308
309 // ProcessEvents() dispatches to these methods.
318 void OnPinch();
320
321 // controlling ivars
327
328 // the plane
333 void HighlightPlane(int highlight);
334
335 // glyphs representing hot spots (e.g., handles)
340 void HandlesOn(double length);
342 int HighlightHandle(vtkProp* prop); // returns cell id
343 void SizeHandles() override;
344
345 // the normal cone
349 void HighlightNormal(int highlight);
350
351 // the normal line
355
356 // the normal cone
360
361 // the normal line
365
366 // Do the picking
370
371 // Register internal Pickers within PickingManager
372 void RegisterPickers() override;
373
374 // Methods to manipulate the hexahedron.
375 void MoveOrigin(double* p1, double* p2);
376 void MovePoint1(double* p1, double* p2);
377 void MovePoint2(double* p1, double* p2);
378 void MovePoint3(double* p1, double* p2);
379 void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
380 void Spin(double* p1, double* p2);
381 void Scale(double* p1, double* p2, int X, int Y);
382 void Translate(double* p1, double* p2);
383 void Push(double* p1, double* p2);
384
385 // Plane normal, normalized
386 double Normal[3];
387
388 // Transform the hexahedral points (used for rotations)
390
391 // Properties used to control the appearance of selected objects and
392 // the manipulator in general.
398
400
403
404private:
405 vtkPlaneWidget(const vtkPlaneWidget&) = delete;
406 void operator=(const vtkPlaneWidget&) = delete;
407};
408
409VTK_ABI_NAMESPACE_END
410#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:151
ray-cast cell picker for all kinds of Prop3Ds
generate polygonal cone
a simple class to control print indentation
Definition vtkIndent.h:108
create a line defined by two end points
abstract base class for most VTK objects
Definition vtkObject.h:162
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:135
represent and manipulate 3D points
Definition vtkPoints.h:139
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
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:66
represent surface properties of a geometric object
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(...)