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=========================================================================*/
100#ifndef vtkPlaneWidget_h
101#define vtkPlaneWidget_h
102
103#include "vtkInteractionWidgetsModule.h" // For export macro
105
106class vtkActor;
107class vtkCellPicker;
108class vtkConeSource;
109class vtkLineSource;
110class vtkPlaneSource;
111class vtkPoints;
112class vtkPolyData;
114class vtkProp;
115class vtkProperty;
116class vtkSphereSource;
117class vtkTransform;
118class vtkPlane;
119
120#define VTK_PLANE_OFF 0
121#define VTK_PLANE_OUTLINE 1
122#define VTK_PLANE_WIREFRAME 2
123#define VTK_PLANE_SURFACE 3
124
125#define VTK_PLANE_ZERO_THRESHOLD (std::numeric_limits<double>::min() * 1000)
126
127class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
128{
129public:
134
136 void PrintSelf(ostream& os, vtkIndent indent) override;
137
139
142 void SetEnabled(int) override;
143 void PlaceWidget(double bounds[6]) override;
144 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
146 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
147 {
148 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
149 }
151
153
156 void SetResolution(int r);
159
161
164 void SetOrigin(double x, double y, double z);
165 void SetOrigin(double x[3]);
167 void GetOrigin(double xyz[3]);
169
171
174 void SetPoint1(double x, double y, double z);
175 void SetPoint1(double x[3]);
176 double* GetPoint1() VTK_SIZEHINT(3);
177 void GetPoint1(double xyz[3]);
179
181
184 void SetPoint2(double x, double y, double z);
185 void SetPoint2(double x[3]);
186 double* GetPoint2() VTK_SIZEHINT(3);
187 void GetPoint2(double xyz[3]);
189
191
194 void SetCenter(double x, double y, double z);
195 void SetCenter(double x[3]);
196 double* GetCenter() VTK_SIZEHINT(3);
197 void GetCenter(double xyz[3]);
199
201
204 void SetNormal(double x, double y, double z);
205 void SetNormal(double x[3]);
206 double* GetNormal() VTK_SIZEHINT(3);
207 void GetNormal(double xyz[3]);
209
211
219 vtkSetClampMacro(Representation, int, VTK_PLANE_OFF, VTK_PLANE_SURFACE);
220 vtkGetMacro(Representation, int);
221 void SetRepresentationToOff() { this->SetRepresentation(VTK_PLANE_OFF); }
222 void SetRepresentationToOutline() { this->SetRepresentation(VTK_PLANE_OUTLINE); }
223 void SetRepresentationToWireframe() { this->SetRepresentation(VTK_PLANE_WIREFRAME); }
224 void SetRepresentationToSurface() { this->SetRepresentation(VTK_PLANE_SURFACE); }
226
228
234 vtkSetMacro(NormalToXAxis, vtkTypeBool);
235 vtkGetMacro(NormalToXAxis, vtkTypeBool);
236 vtkBooleanMacro(NormalToXAxis, vtkTypeBool);
237 vtkSetMacro(NormalToYAxis, vtkTypeBool);
238 vtkGetMacro(NormalToYAxis, vtkTypeBool);
239 vtkBooleanMacro(NormalToYAxis, vtkTypeBool);
240 vtkSetMacro(NormalToZAxis, vtkTypeBool);
241 vtkGetMacro(NormalToZAxis, vtkTypeBool);
242 vtkBooleanMacro(NormalToZAxis, vtkTypeBool);
244
254
262 void GetPlane(vtkPlane* plane);
263
271
276 void UpdatePlacement(void) override;
277
279
284 vtkGetObjectMacro(HandleProperty, vtkProperty);
285 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
287
289
294 vtkGetObjectMacro(PlaneProperty, vtkProperty);
295 vtkGetObjectMacro(SelectedPlaneProperty, vtkProperty);
297
298protected:
300 ~vtkPlaneWidget() override;
301
302 // Manage the state of the widget
303 int State;
305 {
306 Start = 0,
313 Pinching
314 };
315
316 // handles the events
317 static void ProcessEvents(
318 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
319
320 // ProcessEvents() dispatches to these methods.
329 void OnPinch();
331
332 // controlling ivars
338
339 // the plane
344 void HighlightPlane(int highlight);
345
346 // glyphs representing hot spots (e.g., handles)
351 void HandlesOn(double length);
353 int HighlightHandle(vtkProp* prop); // returns cell id
354 void SizeHandles() override;
355
356 // the normal cone
360 void HighlightNormal(int highlight);
361
362 // the normal line
366
367 // the normal cone
371
372 // the normal line
376
377 // Do the picking
381
382 // Register internal Pickers within PickingManager
383 void RegisterPickers() override;
384
385 // Methods to manipulate the hexahedron.
386 void MoveOrigin(double* p1, double* p2);
387 void MovePoint1(double* p1, double* p2);
388 void MovePoint2(double* p1, double* p2);
389 void MovePoint3(double* p1, double* p2);
390 void Rotate(int X, int Y, double* p1, double* p2, double* vpn);
391 void Spin(double* p1, double* p2);
392 void Scale(double* p1, double* p2, int X, int Y);
393 void Translate(double* p1, double* p2);
394 void Push(double* p1, double* p2);
395
396 // Plane normal, normalized
397 double Normal[3];
398
399 // Transform the hexahedral points (used for rotations)
401
402 // Properties used to control the appearance of selected objects and
403 // the manipulator in general.
409
411
414
415private:
416 vtkPlaneWidget(const vtkPlaneWidget&) = delete;
417 void operator=(const vtkPlaneWidget&) = delete;
418};
419
420#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:82
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:76
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
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(...)