VTK
vtkImageTracerWidget.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkImageTracerWidget.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 =========================================================================*/
62 #ifndef vtkImageTracerWidget_h
63 #define vtkImageTracerWidget_h
64 
65 #include "vtkInteractionWidgetsModule.h" // For export macro
66 #include "vtk3DWidget.h"
67 
69 class vtkActor;
70 class vtkCellArray;
71 class vtkCellPicker;
72 class vtkFloatArray;
73 class vtkGlyphSource2D;
74 class vtkPoints;
75 class vtkPolyData;
76 class vtkProp;
77 class vtkProperty;
78 class vtkPropPicker;
79 class vtkTransform;
81 
82 #define VTK_ITW_PROJECTION_YZ 0
83 #define VTK_ITW_PROJECTION_XZ 1
84 #define VTK_ITW_PROJECTION_XY 2
85 #define VTK_ITW_SNAP_CELLS 0
86 #define VTK_ITW_SNAP_POINTS 1
87 
89 {
90 public:
93 
95  void PrintSelf(ostream& os, vtkIndent indent);
96 
98 
99  virtual void SetEnabled(int);
100  virtual void PlaceWidget(double bounds[6]);
101  void PlaceWidget()
102  {this->Superclass::PlaceWidget();}
103  void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
104  double zmin, double zmax)
105  {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
107 
109 
113  vtkGetObjectMacro(HandleProperty, vtkProperty);
115  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
117 
119 
121  virtual void SetLineProperty(vtkProperty*);
124  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
126 
128  void SetViewProp(vtkProp* prop);
129 
131 
132  vtkSetMacro(ProjectToPlane,int);
133  vtkGetMacro(ProjectToPlane,int);
134  vtkBooleanMacro(ProjectToPlane,int);
136 
138 
143  vtkGetMacro(ProjectionNormal,int);
145  { this->SetProjectionNormal(0); }
147  { this->SetProjectionNormal(1); }
149  { this->SetProjectionNormal(2); }
151 
153 
159  vtkGetMacro(ProjectionPosition,double);
161 
163 
164  void SetSnapToImage(int snap);
165  vtkGetMacro(SnapToImage,int);
166  vtkBooleanMacro(SnapToImage,int);
168 
170 
172  vtkSetMacro(AutoClose,int);
173  vtkGetMacro(AutoClose,int);
174  vtkBooleanMacro(AutoClose,int);
176 
178 
181  vtkSetMacro(CaptureRadius,double);
182  vtkGetMacro(CaptureRadius,double);
184 
190  void GetPath(vtkPolyData *pd);
191 
193  vtkGlyphSource2D* GetGlyphSource() { return this->HandleGenerator; }
194 
196 
199  vtkGetMacro(ImageSnapType,int);
201 
203 
205  void SetHandlePosition(int handle, double xyz[3]);
206  void SetHandlePosition(int handle, double x, double y, double z);
207  void GetHandlePosition(int handle, double xyz[3]);
208  double* GetHandlePosition(int handle);
210 
212 
213  vtkGetMacro(NumberOfHandles,int);
215 
217 
218  void SetInteraction(int interact);
219  vtkGetMacro(Interaction,int);
220  vtkBooleanMacro(Interaction,int);
222 
227 
229  int IsClosed();
230 
232 
233  vtkSetMacro(HandleLeftMouseButton,int);
234  vtkGetMacro(HandleLeftMouseButton,int);
235  vtkBooleanMacro(HandleLeftMouseButton,int);
236  vtkSetMacro(HandleMiddleMouseButton,int);
237  vtkGetMacro(HandleMiddleMouseButton,int);
238  vtkBooleanMacro(HandleMiddleMouseButton,int);
239  vtkSetMacro(HandleRightMouseButton,int);
240  vtkGetMacro(HandleRightMouseButton,int);
241  vtkBooleanMacro(HandleRightMouseButton,int);
243 
244 #ifdef VTK_WORKAROUND_WINDOWS_MANGLE
245 # define SetPropA SetProp
246 # define SetPropW SetProp
247 #endif
248 
249 #ifdef VTK_WORKAROUND_WINDOWS_MANGLE
250 # undef SetPropA
251 # undef SetPropW
252 #endif
253 
254 protected:
257 
258 //BTX - manage the state of the widget
259  int State;
261  {
262  Start=0,
269  Outside
270  };
271 //ETX
272 
273  //handles the events
274  static void ProcessEvents(vtkObject* object,
275  unsigned long event,
276  void* clientdata,
277  void* calldata);
278 
279  // ProcessEvents() dispatches to these methods.
286  void OnMouseMove();
287 
288  void AddObservers();
289 
290  // Controlling ivars
297  double CaptureRadius; // tolerance for auto path close
300  int LastX;
301  int LastY;
302 
303  void Trace(int , int );
304  void Snap(double* );
305  void MovePoint(const double* , const double* );
306  void Translate(const double* , const double* );
307  void ClosePath();
308 
309  // 2D glyphs representing hot spots (e.g., handles)
313 
314  // Transforms required as 2D glyphs are generated in the x-y plane
318 
319  void AppendHandles(double*);
320  void ResetHandles();
321  void AllocateHandles(const int& );
322  void AdjustHandlePosition(const int& , double*);
323  int HighlightHandle(vtkProp* ); // returns handle index or -1 on fail
324  void EraseHandle(const int& );
325  virtual void SizeHandles();
326  void InsertHandleOnLine(double* );
327 
331 
332  vtkProp *ViewProp; // the prop we want to pick on
333  vtkPropPicker *PropPicker; // the prop's picker
334 
335  // Representation of the line
340  vtkIdType CurrentPoints[2];
341 
342  void HighlightLine(const int& );
344  void ResetLine(double* );
345  void AppendLine(double* );
347 
348  // Do the picking of the handles and the lines
352 
353  // Register internal Pickers within PickingManager
354  virtual void RegisterPickers();
355 
356  // Properties used to control the appearance of selected objects and
357  // the manipulator in general.
363 
364  // Enable/Disable mouse button events
368 
369 private:
370  vtkImageTracerWidget(const vtkImageTracerWidget&); //Not implemented
371  void operator=(const vtkImageTracerWidget&); //Not implemented
372 };
373 
374 #endif
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:39
vtkgl::z
GLdouble GLdouble z
Definition: vtkgl.h:11754
vtkImageTracerWidget::AutoClose
int AutoClose
Definition: vtkImageTracerWidget.h:298
vtkImageTracerWidget::SnapToImage
int SnapToImage
Definition: vtkImageTracerWidget.h:296
vtkImageTracerWidget::LinePicker
vtkCellPicker * LinePicker
Definition: vtkImageTracerWidget.h:350
vtkGetObjectMacro
#define vtkGetObjectMacro(name, type)
Definition: vtkSetGet.h:232
vtkImageTracerWidget::GetPath
void GetPath(vtkPolyData *pd)
vtkImageTracerWidget::SetProjectionNormalToYAxes
void SetProjectionNormalToYAxes()
Definition: vtkImageTracerWidget.h:146
vtkGlyphSource2D
create 2D glyphs represented by vtkPolyData
Definition: vtkGlyphSource2D.h:62
VTK_ITW_PROJECTION_YZ
#define VTK_ITW_PROJECTION_YZ
Definition: vtkImageTracerWidget.h:82
vtkImageTracerWidget::HandleRightMouseButton
int HandleRightMouseButton
Definition: vtkImageTracerWidget.h:367
vtkImageTracerWidget::Snap
void Snap(double *)
vtkImageTracerWidget::ProcessEvents
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
vtkImageTracerWidget::HandleMiddleMouseButton
int HandleMiddleMouseButton
Definition: vtkImageTracerWidget.h:366
vtkImageTracerWidget::SelectedLineProperty
vtkProperty * SelectedLineProperty
Definition: vtkImageTracerWidget.h:361
vtkImageTracerWidget::Moving
@ Moving
Definition: vtkImageTracerWidget.h:267
vtkImageTracerWidget::ProjectionPosition
double ProjectionPosition
Definition: vtkImageTracerWidget.h:293
vtkImageTracerWidget::Inserting
@ Inserting
Definition: vtkImageTracerWidget.h:266
vtkIdType
int vtkIdType
Definition: vtkType.h:275
vtkFloatArray
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:49
vtkImageTracerWidget::~vtkImageTracerWidget
~vtkImageTracerWidget()
vtkImageTracerWidget::PickCount
int PickCount
Definition: vtkImageTracerWidget.h:346
vtkImageTracerWidget::InsertHandleOnLine
void InsertHandleOnLine(double *)
vtkImageTracerWidget::Transform
vtkTransform * Transform
Definition: vtkImageTracerWidget.h:316
vtkImageTracerWidget::NumberOfHandles
int NumberOfHandles
Definition: vtkImageTracerWidget.h:328
vtkImageTracerWidget::PlaceWidget
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
Definition: vtkImageTracerWidget.h:103
vtkImageTracerWidget::LineProperty
vtkProperty * LineProperty
Definition: vtkImageTracerWidget.h:360
vtkImageTracerWidget::HandleGenerator
vtkGlyphSource2D * HandleGenerator
Definition: vtkImageTracerWidget.h:312
vtkImageTracerWidget::Erasing
@ Erasing
Definition: vtkImageTracerWidget.h:265
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkImageTracerWidget::SetSelectedHandleProperty
virtual void SetSelectedHandleProperty(vtkProperty *)
vtkImageTracerWidget::BuildLinesFromHandles
void BuildLinesFromHandles()
vtkImageTracerWidget::CreateDefaultProperties
void CreateDefaultProperties()
vtkImageTracerWidget::WidgetState
WidgetState
Definition: vtkImageTracerWidget.h:261
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:62
VTK_ITW_SNAP_POINTS
#define VTK_ITW_SNAP_POINTS
Definition: vtkImageTracerWidget.h:86
vtkInteractionWidgetsModule.h
vtkImageTracerWidget::SelectedHandleProperty
vtkProperty * SelectedHandleProperty
Definition: vtkImageTracerWidget.h:359
vtkImageTracerWidget::TemporaryHandlePoints
vtkFloatArray * TemporaryHandlePoints
Definition: vtkImageTracerWidget.h:317
vtkgl::x
GLint GLint GLint GLint GLint x
Definition: vtkgl.h:11318
vtkImageTracerWidget::SetProjectionNormalToZAxes
void SetProjectionNormalToZAxes()
Definition: vtkImageTracerWidget.h:148
vtkImageTracerWidget::OnMiddleButtonUp
void OnMiddleButtonUp()
vtkImageTracerWidget::TransformFilter
vtkTransformPolyDataFilter * TransformFilter
Definition: vtkImageTracerWidget.h:315
vtkImageTracerWidget::Snapping
@ Snapping
Definition: vtkImageTracerWidget.h:264
vtkImageTracerWidget::OnRightButtonUp
void OnRightButtonUp()
vtkImageTracerWidget::PlaceWidget
virtual void PlaceWidget(double bounds[6])
vtkImageTracerWidget::AddObservers
void AddObservers()
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:60
vtkImageTracerWidget::SetSelectedLineProperty
virtual void SetSelectedLineProperty(vtkProperty *)
vtkImageTracerWidget::AdjustHandlePosition
void AdjustHandlePosition(const int &, double *)
vtkgl::event
struct _cl_event * event
Definition: vtkgl.h:14387
vtkImageTracerWidget::ViewProp
vtkProp * ViewProp
Definition: vtkImageTracerWidget.h:332
vtkImageTracerWidget::ProjectionNormal
int ProjectionNormal
Definition: vtkImageTracerWidget.h:292
vtkImageTracerWidget::SetLineProperty
virtual void SetLineProperty(vtkProperty *)
vtkImageTracerWidget::LinePoints
vtkPoints * LinePoints
Definition: vtkImageTracerWidget.h:336
vtkImageTracerWidget::Interaction
int Interaction
Definition: vtkImageTracerWidget.h:291
vtkImageTracerWidget::SetEnabled
virtual void SetEnabled(int)
vtkImageTracerWidget::LineCells
vtkCellArray * LineCells
Definition: vtkImageTracerWidget.h:337
vtkImageTracerWidget::HandlePicker
vtkCellPicker * HandlePicker
Definition: vtkImageTracerWidget.h:349
vtkX3D::position
@ position
Definition: vtkX3D.h:261
vtkSetClampMacro
#define vtkSetClampMacro(name, type, min, max)
Definition: vtkSetGet.h:143
vtkImageTracerWidget::Translating
@ Translating
Definition: vtkImageTracerWidget.h:268
vtkImageTracerWidget::SetProjectionNormalToXAxes
void SetProjectionNormalToXAxes()
Definition: vtkImageTracerWidget.h:144
vtkImageTracerWidget::AllocateHandles
void AllocateHandles(const int &)
vtkImageTracerWidget::OnMouseMove
void OnMouseMove()
vtkImageTracerWidget::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
vtkImageTracerWidget::Handle
vtkActor ** Handle
Definition: vtkImageTracerWidget.h:310
vtkImageTracerWidget::SetSnapToImage
void SetSnapToImage(int snap)
vtkImageTracerWidget::PlaceWidget
void PlaceWidget()
Definition: vtkImageTracerWidget.h:101
vtkImageTracerWidget::SetHandleProperty
virtual void SetHandleProperty(vtkProperty *)
VTK_ITW_PROJECTION_XY
#define VTK_ITW_PROJECTION_XY
Definition: vtkImageTracerWidget.h:84
vtkImageTracerWidget::SetInteraction
void SetInteraction(int interact)
vtkImageTracerWidget::CurrentHandle
vtkActor * CurrentHandle
Definition: vtkImageTracerWidget.h:329
vtkActor
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:51
vtkImageTracerWidget::AppendLine
void AppendLine(double *)
vtkImageTracerWidget::IsSnapping
int IsSnapping
Definition: vtkImageTracerWidget.h:299
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkCellArray
object to represent cell connectivity
Definition: vtkCellArray.h:50
vtkImageTracerWidget::CurrentHandleIndex
int CurrentHandleIndex
Definition: vtkImageTracerWidget.h:330
vtk3DWidget
an abstract superclass for 3D widgets
Definition: vtk3DWidget.h:70
vtkImageTracerWidget::RegisterPickers
virtual void RegisterPickers()
vtkImageTracerWidget::SetViewProp
void SetViewProp(vtkProp *prop)
vtkGetMacro
#define vtkGetMacro(name, type)
Definition: vtkSetGet.h:93
vtkImageTracerWidget::OnLeftButtonUp
void OnLeftButtonUp()
vtkImageTracerWidget::MovePoint
void MovePoint(const double *, const double *)
vtkPropPicker
pick an actor/prop using graphics hardware
Definition: vtkPropPicker.h:45
vtkImageTracerWidget::LineActor
vtkActor * LineActor
Definition: vtkImageTracerWidget.h:338
vtkgl::zmax
GLclampd zmax
Definition: vtkgl.h:17479
vtkTransformPolyDataFilter
transform points and associated normals and vectors for polygonal dataset
Definition: vtkTransformPolyDataFilter.h:51
vtkAbstractPropPicker
abstract API for pickers that can pick an instance of vtkProp
Definition: vtkAbstractPropPicker.h:79
vtkImageTracerWidget::HighlightLine
void HighlightLine(const int &)
vtkImageTracerWidget::SetProjectionPosition
void SetProjectionPosition(double position)
vtkImageTracerWidget::SetHandlePosition
void SetHandlePosition(int handle, double xyz[3])
vtkBooleanMacro
vtkBooleanMacro(IgnoreDriverBugs, bool)
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
vtkProp
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:50
vtkImageTracerWidget::HandleLeftMouseButton
int HandleLeftMouseButton
Definition: vtkImageTracerWidget.h:365
vtkImageTracerWidget::CaptureRadius
double CaptureRadius
Definition: vtkImageTracerWidget.h:297
vtkImageTracerWidget::HandleProperty
vtkProperty * HandleProperty
Definition: vtkImageTracerWidget.h:358
vtkImageTracerWidget::GetHandlePosition
void GetHandlePosition(int handle, double xyz[3])
VTKINTERACTIONWIDGETS_EXPORT
#define VTKINTERACTIONWIDGETS_EXPORT
Definition: vtkInteractionWidgetsModule.h:15
vtkgl::y
GLint GLint GLint GLint GLint GLint y
Definition: vtkgl.h:11318
vtkImageTracerWidget::ImageSnapType
int ImageSnapType
Definition: vtkImageTracerWidget.h:295
vtkImageTracerWidget::CurrentPicker
vtkAbstractPropPicker * CurrentPicker
Definition: vtkImageTracerWidget.h:351
vtkImageTracerWidget::SetHandlePosition
void SetHandlePosition(int handle, double x, double y, double z)
vtkImageTracerWidget::InitializeHandles
void InitializeHandles(vtkPoints *)
vtkImageTracerWidget::PropPicker
vtkPropPicker * PropPicker
Definition: vtkImageTracerWidget.h:333
vtkImageTracerWidget::IsClosed
int IsClosed()
vtkImageTracerWidget::LastY
int LastY
Definition: vtkImageTracerWidget.h:301
vtkImageTracerWidget::OnRightButtonDown
void OnRightButtonDown()
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:84
vtkImageTracerWidget::AppendHandles
void AppendHandles(double *)
vtkImageTracerWidget::State
int State
Definition: vtkImageTracerWidget.h:259
vtkImageTracerWidget::OnMiddleButtonDown
void OnMiddleButtonDown()
vtkImageTracerWidget::HighlightHandle
int HighlightHandle(vtkProp *)
vtkImageTracerWidget
3D widget for tracing on planar props.
Definition: vtkImageTracerWidget.h:89
vtk3DWidget.h
vtkProperty
represent surface properties of a geometric object
Definition: vtkProperty.h:64
vtkImageTracerWidget::Trace
void Trace(int, int)
vtkImageTracerWidget::Translate
void Translate(const double *, const double *)
vtkImageTracerWidget::GetHandlePosition
double * GetHandlePosition(int handle)
vtkImageTracerWidget::New
static vtkImageTracerWidget * New()
vtkImageTracerWidget::ClosePath
void ClosePath()
vtkImageTracerWidget::Tracing
@ Tracing
Definition: vtkImageTracerWidget.h:263
vtkImageTracerWidget::ResetHandles
void ResetHandles()
vtkImageTracerWidget::LineData
vtkPolyData * LineData
Definition: vtkImageTracerWidget.h:339
vtkImageTracerWidget::ResetLine
void ResetLine(double *)
vtkCellPicker
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:69
vtkImageTracerWidget::ProjectToPlane
int ProjectToPlane
Definition: vtkImageTracerWidget.h:294
vtkImageTracerWidget::LastX
int LastX
Definition: vtkImageTracerWidget.h:300
vtkImageTracerWidget::OnLeftButtonDown
void OnLeftButtonDown()
VTK_ITW_SNAP_CELLS
#define VTK_ITW_SNAP_CELLS
Definition: vtkImageTracerWidget.h:85
vtkImageTracerWidget::HandleGeometry
vtkPolyData ** HandleGeometry
Definition: vtkImageTracerWidget.h:311
vtkImageTracerWidget::EraseHandle
void EraseHandle(const int &)
vtkImageTracerWidget::vtkImageTracerWidget
vtkImageTracerWidget()
vtkImageTracerWidget::SizeHandles
virtual void SizeHandles()
vtkImageTracerWidget::GetGlyphSource
vtkGlyphSource2D * GetGlyphSource()
Definition: vtkImageTracerWidget.h:193