Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
270 lines (235 sloc) 9.09 KB
Program: Visualization Toolkit
Module: vtkPointWidget.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or for details.
This software is distributed WITHOUT ANY WARRANTY; without even
PURPOSE. See the above copyright notice for more information.
// .NAME vtkPointWidget - position a point in 3D space
// .SECTION Description
// This 3D widget allows the user to position a point in 3D space using a 3D
// cursor. The cursor has an outline bounding box, axes-aligned cross-hairs,
// and axes shadows. (The outline and shadows can be turned off.) Any of
// these can be turned off. A nice feature of the object is that the
// vtkPointWidget, like any 3D widget, will work with the current interactor
// style. That is, if vtkPointWidget does not handle an event, then all other
// registered observers (including the interactor style) have an opportunity
// to process the event. Otherwise, the vtkPointWidget will terminate the
// processing of the event that it handles.
// To use this object, just invoke SetInteractor() with the argument of the
// method a vtkRenderWindowInteractor. You may also wish to invoke
// "PlaceWidget()" to initially position the widget. The interactor will act
// normally until the "i" key (for "interactor") is pressed, at which point
// the vtkPointWidget will appear. (See superclass documentation for
// information about changing this behavior.) To move the point, the user can
// grab (left mouse) on any widget line and "slide" the point into
// position. Scaling is achieved by using the right mouse button "up" the
// render window (makes the widget bigger) or "down" the render window (makes
// the widget smaller). To translate the widget use the middle mouse button.
// (Note: all of the translation interactions can be constrained to one of
// the x-y-z axes by using the "shift" key.) The vtkPointWidget produces as
// output a polydata with a single point and a vertex cell.
// Some additional features of this class include the ability to control the
// rendered properties of the widget. You can set the properties of the
// selected and unselected representations of the parts of the widget. For
// example, you can set the property of the 3D cursor in its normal and
// selected states.
// .SECTION Caveats
// Note that widget can be picked even when it is "behind" other actors.
// This is an intended feature and not a bug.
// The constrained translation/sliding action (i.e., when the "shift" key is
// depressed) along the axes is based on a combination of a "hot" spot around
// the cursor focus plus the initial mouse motion after selection. That is,
// if the user selects an axis outside of the hot spot, then the motion is
// constrained along that axis. If the user selects the point widget near the
// focus (within the hot spot), the initial motion defines a vector which is
// compared to the x-y-z axes. The motion is constrained to the axis that is
// most parallel to the initial motion vector.
// .SECTION See Also
// vtk3DWidget vtkLineWidget vtkBoxWidget vtkPlaneWidget
#ifndef __vtkPointWidget_h
#define __vtkPointWidget_h
#include "vtk3DWidget.h"
#include "vtkCursor3D.h" // Needed for faster access to the Cursor3D
class vtkActor;
class vtkPolyDataMapper;
class vtkCellPicker;
class vtkPolyData;
class vtkProperty;
class VTK_WIDGETS_EXPORT vtkPointWidget : public vtk3DWidget
// Description:
// Instantiate this widget
static vtkPointWidget *New();
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Methods that satisfy the superclass' API.
virtual void SetEnabled(int);
virtual void PlaceWidget(double bounds[6]);
void PlaceWidget()
void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
double zmin, double zmax)
// Description:
// Grab the polydata (including points) that defines the point. A
// single point and a vertex compose the vtkPolyData.
void GetPolyData(vtkPolyData *pd);
// Description:
// Set/Get the position of the point. Note that if the position is set
// outside of the bounding box, it will be clamped to the boundary of
// the bounding box.
void SetPosition(double x, double y, double z)
void SetPosition(double x[3])
double* GetPosition()
{return this->Cursor3D->GetFocalPoint();}
void GetPosition(double xyz[3])
// Description:
// Turn on/off the wireframe bounding box.
void SetOutline(int o)
int GetOutline()
{return this->Cursor3D->GetOutline();}
void OutlineOn()
void OutlineOff()
// Description:
// Turn on/off the wireframe x-shadows.
void SetXShadows(int o)
int GetXShadows()
{return this->Cursor3D->GetXShadows();}
void XShadowsOn()
void XShadowsOff()
// Description:
// Turn on/off the wireframe y-shadows.
void SetYShadows(int o)
int GetYShadows()
{return this->Cursor3D->GetYShadows();}
void YShadowsOn()
void YShadowsOff()
// Description:
// Turn on/off the wireframe z-shadows.
void SetZShadows(int o)
int GetZShadows()
{return this->Cursor3D->GetZShadows();}
void ZShadowsOn()
void ZShadowsOff()
// Description:
// If translation mode is on, as the widget is moved the bounding box,
// shadows, and cursor are all translated simultaneously as the point
// moves.
void SetTranslationMode(int mode)
{ this->Cursor3D->SetTranslationMode(mode); this->Cursor3D->Update(); }
int GetTranslationMode()
{ return this->Cursor3D->GetTranslationMode(); }
void TranslationModeOn()
{ this->SetTranslationMode(1); }
void TranslationModeOff()
{ this->SetTranslationMode(0); }
// Description:
// Convenience methods to turn outline and shadows on and off.
void AllOn()
void AllOff()
// Description:
// Get the handle properties (the little balls are the handles). The
// properties of the handles when selected and normal can be
// set.
// Description:
// Set the "hot spot" size; i.e., the region around the focus, in which the
// motion vector is used to control the constrained sliding action. Note the
// size is specified as a fraction of the length of the diagonal of the
// point widget's bounding box.
//BTX - manage the state of the widget
friend class vtkLineWidget;
int State;
enum WidgetState
// Handles the events
static void ProcessEvents(vtkObject* object,
unsigned long event,
void* clientdata,
void* calldata);
// ProcessEvents() dispatches to these methods.
virtual void OnMouseMove();
virtual void OnLeftButtonDown();
virtual void OnLeftButtonUp();
virtual void OnMiddleButtonDown();
virtual void OnMiddleButtonUp();
virtual void OnRightButtonDown();
virtual void OnRightButtonUp();
// the cursor3D
vtkActor *Actor;
vtkPolyDataMapper *Mapper;
vtkCursor3D *Cursor3D;
void Highlight(int highlight);
// Do the picking
vtkCellPicker *CursorPicker;
// Methods to manipulate the cursor
int ConstraintAxis;
void Translate(double *p1, double *p2);
void Scale(double *p1, double *p2, int X, int Y);
void MoveFocus(double *p1, double *p2);
int TranslationMode;
// Properties used to control the appearance of selected objects and
// the manipulator in general.
vtkProperty *Property;
vtkProperty *SelectedProperty;
void CreateDefaultProperties();
// The size of the hot spot.
double HotSpotSize;
int DetermineConstraintAxis(int constraint, double *x);
int WaitingForMotion;
int WaitCount;
vtkPointWidget(const vtkPointWidget&); //Not implemented
void operator=(const vtkPointWidget&); //Not implemented