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=========================================================================*/
90#ifndef vtkPlaneWidget_h
91#define vtkPlaneWidget_h
92
93#include "vtkInteractionWidgetsModule.h" // For export macro
95
96class vtkActor;
97class vtkCellPicker;
98class vtkConeSource;
99class vtkLineSource;
100class vtkPlaneSource;
101class vtkPoints;
102class vtkPolyData;
104class vtkProp;
105class vtkProperty;
106class vtkSphereSource;
107class vtkTransform;
108class vtkPlane;
109
110#define VTK_PLANE_OFF 0
111#define VTK_PLANE_OUTLINE 1
112#define VTK_PLANE_WIREFRAME 2
113#define VTK_PLANE_SURFACE 3
114
115#define VTK_PLANE_ZERO_THRESHOLD (std::numeric_limits<double>::min() * 1000)
116
117class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
118{
119public:
124
126 void PrintSelf(ostream& os, vtkIndent indent) override;
127
129
132 void SetEnabled(int) override;
133 void PlaceWidget(double bounds[6]) override;
134 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
136 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
137 {
138 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
139 }
141
143
146 void SetResolution(int r);
149
151
154 void SetOrigin(double x, double y, double z);
155 void SetOrigin(double x[3]);
157 void GetOrigin(double xyz[3]);
159
161
164 void SetPoint1(double x, double y, double z);
165 void SetPoint1(double x[3]);
166 double* GetPoint1() VTK_SIZEHINT(3);
167 void GetPoint1(double xyz[3]);
169
171
174 void SetPoint2(double x, double y, double z);
175 void SetPoint2(double x[3]);
176 double* GetPoint2() VTK_SIZEHINT(3);
177 void GetPoint2(double xyz[3]);
179
181
184 void SetCenter(double x, double y, double z);
185 void SetCenter(double x[3]);
186 double* GetCenter() VTK_SIZEHINT(3);
187 void GetCenter(double xyz[3]);
189
191
194 void SetNormal(double x, double y, double z);
195 void SetNormal(double x[3]);
196 double* GetNormal() VTK_SIZEHINT(3);
197 void GetNormal(double xyz[3]);
199
201
209 vtkSetClampMacro(Representation, int, VTK_PLANE_OFF, VTK_PLANE_SURFACE);
210 vtkGetMacro(Representation, int);
211 void SetRepresentationToOff() { this->SetRepresentation(VTK_PLANE_OFF); }
212 void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
213 void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
214 void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
216
218
224 vtkSetMacro(NormalToXAxis, vtkTypeBool);
225 vtkGetMacro(NormalToXAxis, vtkTypeBool);
226 vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
227 vtkSetMacro(NormalToYAxis, vtkTypeBool);
228 vtkGetMacro(NormalToYAxis, vtkTypeBool);
229 vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
230 vtkSetMacro(NormalToZAxis, vtkTypeBool);
231 vtkGetMacro(NormalToZAxis, vtkTypeBool);
232 vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
234
244
252 void GetPlane(vtkPlane* plane);
253
261
266 void UpdatePlacement(void) override;
267
269
274 vtkGetObjectMacro(HandleProperty, vtkProperty);
275 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
277
279
284 vtkGetObjectMacro(PlaneProperty, vtkProperty);
285 vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
287
288protected:
290 ~vtkPlaneWidget() override;
291
292 // Manage the state of the widget
293 int State;
295 {
296 Start = 0,
303 Pinching
304 };
305
306 // handles the events
307 static void ProcessEvents(
308 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
309
310 // ProcessEvents() dispatches to these methods.
319 void OnPinch();
321
322 // controlling ivars
328
329 // the plane
334 void HighlightPlane(int highlight);
335
336 // glyphs representing hot spots (e.g., handles)
341 void HandlesOn(double length);
343 int HighlightHandle(vtkProp* prop); // returns cell id
344 void SizeHandles() override;
345
346 // the normal cone
350 void HighlightNormal(int highlight);
351
352 // the normal line
356
357 // the normal cone
361
362 // the normal line
366
367 // Do the picking
371
372 // Register internal Pickers within PickingManager
373 void RegisterPickers() override;
374
375 // Methods to manipulate the hexahedron.
376 void MoveOrigin(double* p1, double* p2);
377 void MovePoint1(double* p1, double* p2);
378 void MovePoint2(double* p1, double* p2);
379 void MovePoint3(double* p1, double* p2);
380 void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
381 void Spin(double* p1, double* p2);
382 void Scale(double* p1, double* p2, int X, int Y);
383 void Translate(double* p1, double* p2);
384 void Push(double* p1, double* p2);
385
386 // Plane normal, normalized
387 double Normal[3];
388
389 // Transform the hexahedral points (used for rotations)
391
392 // Properties used to control the appearance of selected objects and
393 // the manipulator in general.
399
401
404
405private:
406 vtkPlaneWidget(const vtkPlaneWidget&) = delete;
407 void operator=(const vtkPlaneWidget&) = delete;
408};
409
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:55
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:76
generate polygonal cone
Definition: vtkConeSource.h:48
a simple class to control print indentation
Definition: vtkIndent.h:43
create a line defined by two end points
Definition: vtkLineSource.h:70
abstract base class for most VTK objects
Definition: vtkObject.h:72
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:43
represent and manipulate 3D points
Definition: vtkPoints.h:43
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:95
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:66
represent surface properties of a geometric object
Definition: vtkProperty.h:71
create a polygonal sphere centered at the origin
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:64
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(...)