VTK
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 =========================================================================*/
81 #ifndef vtkPlaneWidget_h
82 #define vtkPlaneWidget_h
83 
84 #include "vtkInteractionWidgetsModule.h" // For export macro
86 
87 class vtkActor;
88 class vtkCellPicker;
89 class vtkConeSource;
90 class vtkLineSource;
91 class vtkPlaneSource;
92 class vtkPoints;
93 class vtkPolyData;
94 class vtkPolyDataMapper;
95 class vtkProp;
96 class vtkProperty;
97 class vtkSphereSource;
98 class vtkTransform;
99 class vtkPlane;
100 
101 #define VTK_PLANE_OFF 0
102 #define VTK_PLANE_OUTLINE 1
103 #define VTK_PLANE_WIREFRAME 2
104 #define VTK_PLANE_SURFACE 3
105 
106 class VTKINTERACTIONWIDGETS_EXPORT vtkPlaneWidget : public vtkPolyDataSourceWidget
107 {
108 public:
112  static vtkPlaneWidget *New();
113 
115  void PrintSelf(ostream& os, vtkIndent indent);
116 
118 
121  virtual void SetEnabled(int);
122  virtual void PlaceWidget(double bounds[6]);
123  void PlaceWidget()
124  {this->Superclass::PlaceWidget();}
125  void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
126  double zmin, double zmax)
127  {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
129 
131 
134  void SetResolution(int r);
137 
139 
142  void SetOrigin(double x, double y, double z);
143  void SetOrigin(double x[3]);
144  double* GetOrigin();
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();
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();
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();
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();
185  void GetNormal(double xyz[3]);
187 
189 
197  vtkSetClampMacro(Representation,int,VTK_PLANE_OFF,VTK_PLANE_SURFACE);
198  vtkGetMacro(Representation,int);
200  {this->SetRepresentation(VTK_PLANE_OFF);}
202  {this->SetRepresentation(VTK_PLANE_OUTLINE);}
204  {this->SetRepresentation(VTK_PLANE_WIREFRAME);}
206  {this->SetRepresentation(VTK_PLANE_SURFACE);}
208 
210 
216  vtkSetMacro(NormalToXAxis,int);
217  vtkGetMacro(NormalToXAxis,int);
218  vtkBooleanMacro(NormalToXAxis,int);
219  vtkSetMacro(NormalToYAxis,int);
220  vtkGetMacro(NormalToYAxis,int);
221  vtkBooleanMacro(NormalToYAxis,int);
222  vtkSetMacro(NormalToZAxis,int);
223  vtkGetMacro(NormalToZAxis,int);
224  vtkBooleanMacro(NormalToZAxis,int);
226 
236 
244  void GetPlane(vtkPlane *plane);
245 
253 
258  void UpdatePlacement(void);
259 
261 
266  vtkGetObjectMacro(HandleProperty,vtkProperty);
267  vtkGetObjectMacro(SelectedHandleProperty,vtkProperty);
269 
271 
276  vtkGetObjectMacro(PlaneProperty,vtkProperty);
277  vtkGetObjectMacro(SelectedPlaneProperty,vtkProperty);
279 
280 protected:
283 
284  // Manage the state of the widget
285  int State;
287  {
288  Start=0,
295  Pinching
296  };
297 
298  //handles the events
299  static void ProcessEvents(vtkObject* object,
300  unsigned long event,
301  void* clientdata,
302  void* calldata);
303 
304  // ProcessEvents() dispatches to these methods.
311  void OnMouseMove();
312  void OnStartPinch();
313  void OnPinch();
314  void OnEndPinch();
315 
316  // controlling ivars
322 
323  // the plane
328  void HighlightPlane(int highlight);
329 
330  // glyphs representing hot spots (e.g., handles)
335  void HandlesOn(double length);
336  void HandlesOff();
337  int HighlightHandle(vtkProp *prop); //returns cell id
338  virtual void SizeHandles();
339 
340  // the normal cone
344  void HighlightNormal(int highlight);
345 
346  // the normal line
350 
351  // the normal cone
355 
356  // the normal line
360 
361  // Do the picking
365 
366  // Register internal Pickers within PickingManager
367  virtual void RegisterPickers();
368 
369  // Methods to manipulate the hexahedron.
370  void MoveOrigin(double *p1, double *p2);
371  void MovePoint1(double *p1, double *p2);
372  void MovePoint2(double *p1, double *p2);
373  void MovePoint3(double *p1, double *p2);
374  void Rotate(int X, int Y, double *p1, double *p2, double *vpn);
375  void Spin(double *p1, double *p2);
376  void Scale(double *p1, double *p2, int X, int Y);
377  void Translate(double *p1, double *p2);
378  void Push(double *p1, double *p2);
379 
380  // Plane normal, normalized
381  double Normal[3];
382 
383  // Transform the hexahedral points (used for rotations)
385 
386  // Properties used to control the appearance of selected objects and
387  // the manipulator in general.
393 
395 
398 
399 private:
400  vtkPlaneWidget(const vtkPlaneWidget&) VTK_DELETE_FUNCTION;
401  void operator=(const vtkPlaneWidget&) VTK_DELETE_FUNCTION;
402 };
403 
404 #endif
vtkPolyDataMapper
map vtkPolyData to graphics primitives
Definition: vtkPolyDataMapper.h:43
vtkPlaneWidget::PlaceWidget
virtual void PlaceWidget(double bounds[6])
We have to redeclare this abstract, PlaceWidget() requires it.
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:40
vtkPlane
perform various plane computations
Definition: vtkPlane.h:38
vtkPlaneWidget::Scaling
@ Scaling
Definition: vtkPlaneWidget.h:290
vtkPlaneWidget::SelectRepresentation
void SelectRepresentation()
vtkPlaneWidget::OnEndPinch
void OnEndPinch()
vtkPlaneWidget::SetRepresentationToSurface
void SetRepresentationToSurface()
Definition: vtkPlaneWidget.h:205
vtkPlaneWidget::LineSource2
vtkLineSource * LineSource2
Definition: vtkPlaneWidget.h:359
vtkPlaneWidget::OnMiddleButtonUp
void OnMiddleButtonUp()
vtkPlaneWidget::RegisterPickers
virtual void RegisterPickers()
Register internal Pickers in the Picking Manager.
vtkPlaneWidget::ProcessEvents
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
vtkPlaneWidget::HandlesOn
void HandlesOn(double length)
vtkPlaneWidget::CurrentHandle
vtkActor * CurrentHandle
Definition: vtkPlaneWidget.h:364
vtkPlaneWidget::ConeActor
vtkActor * ConeActor
Definition: vtkPlaneWidget.h:341
vtkPlaneWidget::Handle
vtkActor ** Handle
Definition: vtkPlaneWidget.h:331
vtkPlaneWidget::GetPolyData
void GetPolyData(vtkPolyData *pd)
Grab the polydata (including points) that defines the plane.
vtkPlaneWidget::SetEnabled
virtual void SetEnabled(int)
Methods that satisfy the superclass' API.
vtkPlaneWidget::GetCenter
double * GetCenter()
vtkPlaneWidget::WidgetState
WidgetState
Definition: vtkPlaneWidget.h:287
vtkPlaneSource
create an array of quadrilaterals located in a plane
Definition: vtkPlaneSource.h:61
vtkX3D::Normal
@ Normal
Definition: vtkX3D.h:45
vtkPlaneWidget::LineActor
vtkActor * LineActor
Definition: vtkPlaneWidget.h:347
vtkPlaneWidget::State
int State
Definition: vtkPlaneWidget.h:285
vtkPlaneWidget::Spin
void Spin(double *p1, double *p2)
vtkConeSource
generate polygonal cone
Definition: vtkConeSource.h:45
vtkPlaneWidget::SetPoint1
void SetPoint1(double x, double y, double z)
Set/Get the position of the point defining the first axis of the plane.
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:60
vtkPlaneWidget::GetNormal
double * GetNormal()
vtkPlaneWidget::SelectedHandleProperty
vtkProperty * SelectedHandleProperty
Definition: vtkPlaneWidget.h:389
vtkX3D::length
@ length
Definition: vtkX3D.h:393
vtkPlaneWidget::GetCenter
void GetCenter(double xyz[3])
vtkPlaneWidget::ConeSource2
vtkConeSource * ConeSource2
Definition: vtkPlaneWidget.h:354
vtkPlaneWidget::Pushing
@ Pushing
Definition: vtkPlaneWidget.h:291
vtkPlaneWidget::ConeSource
vtkConeSource * ConeSource
Definition: vtkPlaneWidget.h:343
vtkPlaneWidget::PlanePicker
vtkCellPicker * PlanePicker
Definition: vtkPlaneWidget.h:363
vtkPlaneWidget::GetPlane
void GetPlane(vtkPlane *plane)
Get the planes describing the implicit function defined by the plane widget.
vtkPlaneWidget::PlaneActor
vtkActor * PlaneActor
Definition: vtkPlaneWidget.h:324
vtkPlaneWidget::MovePoint1
void MovePoint1(double *p1, double *p2)
vtkPlaneWidget::PlaceWidget
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
Definition: vtkPlaneWidget.h:125
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:61
vtkPlaneWidget
3D widget for manipulating a finite plane
Definition: vtkPlaneWidget.h:107
vtkPlaneWidget::SetPoint1
void SetPoint1(double x[3])
vtkPlaneWidget::Rotate
void Rotate(int X, int Y, double *p1, double *p2, double *vpn)
vtkPlaneWidget::SetCenter
void SetCenter(double x, double y, double z)
Get the center of the plane.
vtkPlaneWidget::LineMapper2
vtkPolyDataMapper * LineMapper2
Definition: vtkPlaneWidget.h:358
vtkPlaneWidget::Spinning
@ Spinning
Definition: vtkPlaneWidget.h:293
vtkPlaneWidget::GeneratePlane
void GeneratePlane()
vtkPlaneWidget::SetNormal
void SetNormal(double x[3])
vtkPlaneWidget::SizeHandles
virtual void SizeHandles()
vtkPlaneWidget::HandleProperty
vtkProperty * HandleProperty
Definition: vtkPlaneWidget.h:388
vtkPlaneWidget::GetPoint2
void GetPoint2(double xyz[3])
vtkPlaneWidget::Scale
void Scale(double *p1, double *p2, int X, int Y)
vtkPlaneWidget::SetOrigin
void SetOrigin(double x, double y, double z)
Set/Get the origin of the plane.
vtkPlaneWidget::SetNormal
void SetNormal(double x, double y, double z)
Get the normal to the plane.
vtkPlaneWidget::PlaneProperty
vtkProperty * PlaneProperty
Definition: vtkPlaneWidget.h:390
vtkPlaneWidget::SetRepresentationToOutline
void SetRepresentationToOutline()
Definition: vtkPlaneWidget.h:201
vtkPlaneWidget::OnRightButtonUp
void OnRightButtonUp()
vtkSphereSource
create a polygonal sphere centered at the origin
Definition: vtkSphereSource.h:47
vtkPlaneWidget::LineMapper
vtkPolyDataMapper * LineMapper
Definition: vtkPlaneWidget.h:348
vtkPlaneWidget::vtkPlaneWidget
vtkPlaneWidget()
vtkPlaneWidget::GetResolution
int GetResolution()
vtkPlaneWidget::SetRepresentationToOff
void SetRepresentationToOff()
Definition: vtkPlaneWidget.h:199
vtkActor
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:52
vtkPlaneWidget::SetPoint2
void SetPoint2(double x, double y, double z)
Set/Get the position of the point defining the second axis of the plane.
vtkPlaneWidget::MoveOrigin
void MoveOrigin(double *p1, double *p2)
vtkPlaneWidget::ConeActor2
vtkActor * ConeActor2
Definition: vtkPlaneWidget.h:352
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
VTK_PLANE_WIREFRAME
#define VTK_PLANE_WIREFRAME
Definition: vtkPlaneWidget.h:103
vtkPlaneWidget::PlaneOutline
vtkPolyData * PlaneOutline
Definition: vtkPlaneWidget.h:327
vtkPlaneWidget::OnPinch
void OnPinch()
vtkPlaneWidget::LineActor2
vtkActor * LineActor2
Definition: vtkPlaneWidget.h:357
vtkPlaneWidget::NormalToZAxis
int NormalToZAxis
Definition: vtkPlaneWidget.h:319
vtkPlaneWidget::LineSource
vtkLineSource * LineSource
Definition: vtkPlaneWidget.h:349
vtkPlaneWidget::GetPolyDataAlgorithm
vtkPolyDataAlgorithm * GetPolyDataAlgorithm()
Satisfies superclass API.
vtkPlaneWidget::GetOrigin
double * GetOrigin()
vtkPlaneWidget::LastPickValid
int LastPickValid
Definition: vtkPlaneWidget.h:396
vtkLineSource
create a line defined by two end points
Definition: vtkLineSource.h:43
vtkPlaneWidget::SetPoint2
void SetPoint2(double x[3])
vtkPlaneWidget::SetOrigin
void SetOrigin(double x[3])
vtkPlaneWidget::UpdatePlacement
void UpdatePlacement(void)
Satisfies superclass API.
vtkPlaneWidget::NormalToYAxis
int NormalToYAxis
Definition: vtkPlaneWidget.h:318
vtkPlaneWidget::PlaceWidget
void PlaceWidget()
Overrides vtk3DWidget PlaceWidget() so that it doesn't complain if there's no Input and no Prop3D.
Definition: vtkPlaneWidget.h:123
vtkPlaneWidget::MovePoint3
void MovePoint3(double *p1, double *p2)
vtkPlaneWidget::SelectedPlaneProperty
vtkProperty * SelectedPlaneProperty
Definition: vtkPlaneWidget.h:391
vtkBooleanMacro
vtkBooleanMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkPlaneWidget::Representation
int Representation
Definition: vtkPlaneWidget.h:320
vtkPlaneWidget::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkProp
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:48
vtkPlaneWidget::SetResolution
void SetResolution(int r)
Set/Get the resolution (number of subdivisions) of the plane.
vtkPlaneWidget::MovePoint2
void MovePoint2(double *p1, double *p2)
vtkPlaneWidget::HighlightNormal
void HighlightNormal(int highlight)
VTK_PLANE_SURFACE
#define VTK_PLANE_SURFACE
Definition: vtkPlaneWidget.h:104
vtkPlaneWidget::GetNormal
void GetNormal(double xyz[3])
vtkPlaneWidget::OnMouseMove
void OnMouseMove()
vtkPlaneWidget::HandlesOff
void HandlesOff()
vtk3DWidget::PlaceWidget
virtual void PlaceWidget()
vtkPlaneWidget::OnLeftButtonUp
void OnLeftButtonUp()
vtkPlaneWidget::Push
void Push(double *p1, double *p2)
VTK_PLANE_OFF
#define VTK_PLANE_OFF
Definition: vtkPlaneWidget.h:101
vtkPlaneWidget::GetPoint1
void GetPoint1(double xyz[3])
vtkPlaneWidget::ConeMapper
vtkPolyDataMapper * ConeMapper
Definition: vtkPlaneWidget.h:342
vtkPolyDataSourceWidget
abstract PolyDataSource-based 3D widget
Definition: vtkPolyDataSourceWidget.h:46
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:86
vtkPlaneWidget::OnRightButtonDown
void OnRightButtonDown()
vtkPlaneWidget::HandleGeometry
vtkSphereSource ** HandleGeometry
Definition: vtkPlaneWidget.h:333
vtkPlaneWidget::NormalToXAxis
int NormalToXAxis
Definition: vtkPlaneWidget.h:317
vtkPlaneWidget::ConeMapper2
vtkPolyDataMapper * ConeMapper2
Definition: vtkPlaneWidget.h:353
vtkPlaneWidget::HandlePicker
vtkCellPicker * HandlePicker
Definition: vtkPlaneWidget.h:362
vtkPlaneWidget::OnMiddleButtonDown
void OnMiddleButtonDown()
vtkPlaneWidget::Translate
void Translate(double *p1, double *p2)
vtkPlaneWidget::PlaneMapper
vtkPolyDataMapper * PlaneMapper
Definition: vtkPlaneWidget.h:325
vtkPlaneWidget::OnStartPinch
void OnStartPinch()
vtkPlaneWidget::SetRepresentationToWireframe
void SetRepresentationToWireframe()
Definition: vtkPlaneWidget.h:203
vtkProperty
represent surface properties of a geometric object
Definition: vtkProperty.h:65
vtkPlaneWidget::HighlightPlane
void HighlightPlane(int highlight)
vtkPlaneWidget::SetCenter
void SetCenter(double x[3])
vtkPlaneWidget::GetPoint2
double * GetPoint2()
vtkPlaneWidget::CreateDefaultProperties
void CreateDefaultProperties()
vtkPlaneWidget::Moving
@ Moving
Definition: vtkPlaneWidget.h:289
vtkPlaneWidget::GetPoint1
double * GetPoint1()
vtkPlaneWidget::PositionHandles
void PositionHandles()
vtkCellPicker
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:70
vtkPlaneWidget::HandleMapper
vtkPolyDataMapper ** HandleMapper
Definition: vtkPlaneWidget.h:332
vtkPlaneWidget::GetOrigin
void GetOrigin(double xyz[3])
vtkPlaneWidget::OnLeftButtonDown
void OnLeftButtonDown()
vtkPlaneWidget::New
static vtkPlaneWidget * New()
Instantiate the object.
vtkPlaneWidget::SetPlaneProperty
virtual void SetPlaneProperty(vtkProperty *)
Get the plane properties.
vtkPlaneWidget::Transform
vtkTransform * Transform
Definition: vtkPlaneWidget.h:384
vtkPlaneWidget::PlaneSource
vtkPlaneSource * PlaneSource
Definition: vtkPlaneWidget.h:326
vtkPlaneWidget::Outside
@ Outside
Definition: vtkPlaneWidget.h:294
vtkPlaneWidget::Rotating
@ Rotating
Definition: vtkPlaneWidget.h:292
vtkPlaneWidget::HandleSizeFactor
double HandleSizeFactor
Definition: vtkPlaneWidget.h:397
vtkPlaneWidget::~vtkPlaneWidget
~vtkPlaneWidget()
vtkPlaneWidget::HighlightHandle
int HighlightHandle(vtkProp *prop)
vtkPolyDataSourceWidget.h
VTK_PLANE_OUTLINE
#define VTK_PLANE_OUTLINE
Definition: vtkPlaneWidget.h:102
vtkPolyDataAlgorithm
Superclass for algorithms that produce only polydata as output.
Definition: vtkPolyDataAlgorithm.h:45