VTK  9.1.0
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 =========================================================================*/
93 #ifndef vtkImageTracerWidget_h
94 #define vtkImageTracerWidget_h
95 
96 #include "vtk3DWidget.h"
97 #include "vtkInteractionWidgetsModule.h" // For export macro
98 
100 class vtkActor;
101 class vtkCellArray;
102 class vtkCellPicker;
103 class vtkFloatArray;
104 class vtkGlyphSource2D;
105 class vtkPoints;
106 class vtkPolyData;
107 class vtkProp;
108 class vtkProperty;
109 class vtkPropPicker;
110 class vtkTransform;
112 
113 #define VTK_ITW_PROJECTION_YZ 0
114 #define VTK_ITW_PROJECTION_XZ 1
115 #define VTK_ITW_PROJECTION_XY 2
116 #define VTK_ITW_SNAP_CELLS 0
117 #define VTK_ITW_SNAP_POINTS 1
118 
119 class VTKINTERACTIONWIDGETS_EXPORT vtkImageTracerWidget : public vtk3DWidget
120 {
121 public:
126 
128  void PrintSelf(ostream& os, vtkIndent indent) override;
129 
131 
134  void SetEnabled(int) override;
135  void PlaceWidget(double bounds[6]) override;
136  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
138  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
139  {
140  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
141  }
143 
145 
150  vtkGetObjectMacro(HandleProperty, vtkProperty);
152  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
154 
156 
160  virtual void SetLineProperty(vtkProperty*);
161  vtkGetObjectMacro(LineProperty, vtkProperty);
163  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
165 
169  void SetViewProp(vtkProp* prop);
170 
172 
175  vtkSetMacro(ProjectToPlane, vtkTypeBool);
176  vtkGetMacro(ProjectToPlane, vtkTypeBool);
177  vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
179 
181 
187  vtkSetClampMacro(ProjectionNormal, int, VTK_ITW_PROJECTION_YZ, VTK_ITW_PROJECTION_XY);
188  vtkGetMacro(ProjectionNormal, int);
189  void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
190  void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
191  void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
193 
195 
203  vtkGetMacro(ProjectionPosition, double);
205 
207 
211  vtkGetMacro(SnapToImage, vtkTypeBool);
212  vtkBooleanMacro(SnapToImage, vtkTypeBool);
214 
216 
221  vtkSetMacro(AutoClose, vtkTypeBool);
222  vtkGetMacro(AutoClose, vtkTypeBool);
223  vtkBooleanMacro(AutoClose, vtkTypeBool);
225 
227 
233  vtkSetMacro(CaptureRadius, double);
234  vtkGetMacro(CaptureRadius, double);
236 
243  void GetPath(vtkPolyData* pd);
244 
248  vtkGlyphSource2D* GetGlyphSource() { return this->HandleGenerator; }
249 
251 
255  vtkSetClampMacro(ImageSnapType, int, VTK_ITW_SNAP_CELLS, VTK_ITW_SNAP_POINTS);
256  vtkGetMacro(ImageSnapType, int);
258 
260 
263  void SetHandlePosition(int handle, double xyz[3]);
264  void SetHandlePosition(int handle, double x, double y, double z);
265  void GetHandlePosition(int handle, double xyz[3]);
266  double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
268 
270 
273  vtkGetMacro(NumberOfHandles, int);
275 
277 
280  void SetInteraction(vtkTypeBool interact);
281  vtkGetMacro(Interaction, vtkTypeBool);
282  vtkBooleanMacro(Interaction, vtkTypeBool);
284 
291 
295  int IsClosed();
296 
298 
301  vtkSetMacro(HandleLeftMouseButton, vtkTypeBool);
302  vtkGetMacro(HandleLeftMouseButton, vtkTypeBool);
303  vtkBooleanMacro(HandleLeftMouseButton, vtkTypeBool);
304  vtkSetMacro(HandleMiddleMouseButton, vtkTypeBool);
305  vtkGetMacro(HandleMiddleMouseButton, vtkTypeBool);
306  vtkBooleanMacro(HandleMiddleMouseButton, vtkTypeBool);
307  vtkSetMacro(HandleRightMouseButton, vtkTypeBool);
308  vtkGetMacro(HandleRightMouseButton, vtkTypeBool);
309  vtkBooleanMacro(HandleRightMouseButton, vtkTypeBool);
311 
312 protected:
315 
316  // Manage the state of the widget
317  int State;
319  {
320  Start = 0,
327  Outside
328  };
329 
330  // handles the events
331  static void ProcessEvents(
332  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
333 
334  // ProcessEvents() dispatches to these methods.
341  void OnMouseMove();
342 
343  void AddObservers();
344 
345  // Controlling ivars
352  double CaptureRadius; // tolerance for auto path close
355  int LastX;
356  int LastY;
357 
358  void Trace(int, int);
359  void Snap(double*);
360  void MovePoint(const double*, const double*);
361  void Translate(const double*, const double*);
362  void ClosePath();
363 
364  // 2D glyphs representing hot spots (e.g., handles)
368 
369  // Transforms required as 2D glyphs are generated in the x-y plane
373 
374  void AppendHandles(double*);
375  void ResetHandles();
376  void AllocateHandles(const int&);
377  void AdjustHandlePosition(const int&, double*);
378  int HighlightHandle(vtkProp*); // returns handle index or -1 on fail
379  void EraseHandle(const int&);
380  void SizeHandles() override;
381  void InsertHandleOnLine(double*);
382 
386 
387  vtkProp* ViewProp; // the prop we want to pick on
388  vtkPropPicker* PropPicker; // the prop's picker
389 
390  // Representation of the line
395  vtkIdType CurrentPoints[2];
396 
397  void HighlightLine(const int&);
399  void ResetLine(double*);
400  void AppendLine(double*);
402 
403  // Do the picking of the handles and the lines
407 
408  // Register internal Pickers within PickingManager
409  void RegisterPickers() override;
410 
411  // Properties used to control the appearance of selected objects and
412  // the manipulator in general.
418 
419  // Enable/Disable mouse button events
423 
424 private:
426  void operator=(const vtkImageTracerWidget&) = delete;
427 };
428 
429 #endif
an abstract superclass for 3D widgets
Definition: vtk3DWidget.h:68
abstract API for pickers that can pick an instance of vtkProp
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:155
object to represent cell connectivity
Definition: vtkCellArray.h:290
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:96
dynamic, self-adjusting array of float
create 2D glyphs represented by vtkPolyData
3D widget for tracing on planar props.
void RegisterPickers() override
Register internal Pickers in the Picking Manager.
void SetProjectionNormalToYAxes()
Set the projection normal.
vtkCellPicker * HandlePicker
void AppendLine(double *)
void InsertHandleOnLine(double *)
static vtkImageTracerWidget * New()
Instantiate the object.
void GetHandlePosition(int handle, double xyz[3])
Set/Get the handle position in terms of a zero-based array of handles.
virtual void SetSelectedLineProperty(vtkProperty *)
Set/Get the line properties.
void AppendHandles(double *)
void SetProjectionPosition(double position)
Set the position of the widgets' handles in terms of a plane's position.
void GetPath(vtkPolyData *pd)
Grab the points and lines that define the traced path.
~vtkImageTracerWidget() override
void ResetLine(double *)
void HighlightLine(const int &)
vtkTransformPolyDataFilter * TransformFilter
void PlaceWidget(double bounds[6]) override
Methods that satisfy the superclass' API.
virtual void SetSelectedHandleProperty(vtkProperty *)
Set/Get the handle properties (the 2D glyphs are the handles).
void SetProjectionNormalToZAxes()
Set the projection normal.
void SetEnabled(int) override
Methods that satisfy the superclass' API.
int HighlightHandle(vtkProp *)
void SetHandlePosition(int handle, double x, double y, double z)
Set/Get the handle position in terms of a zero-based array of handles.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetInteraction(vtkTypeBool interact)
Enable/disable mouse interaction when the widget is visible.
void SizeHandles() override
void EraseHandle(const int &)
vtkAbstractPropPicker * CurrentPicker
void InitializeHandles(vtkPoints *)
Initialize the widget with a set of points and generate lines between them.
void PlaceWidget() override
Methods that satisfy the superclass' API.
vtkFloatArray * TemporaryHandlePoints
void Translate(const double *, const double *)
void SetProjectionNormalToXAxes()
Set the projection normal.
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
vtkGlyphSource2D * HandleGenerator
void Snap(double *)
vtkGlyphSource2D * GetGlyphSource()
Get the handles' geometric representation via vtkGlyphSource2D.
void CreateDefaultProperties()
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Methods that satisfy the superclass' API.
void MovePoint(const double *, const double *)
virtual void SetHandleProperty(vtkProperty *)
Set/Get the handle properties (the 2D glyphs are the handles).
vtkProperty * SelectedHandleProperty
void SetSnapToImage(vtkTypeBool snap)
Force snapping to image data while tracing.
void SetHandlePosition(int handle, double xyz[3])
Set/Get the handle position in terms of a zero-based array of handles.
int IsClosed()
Is the path closed or open?
void AllocateHandles(const int &)
void Trace(int, int)
void AdjustHandlePosition(const int &, double *)
vtkProperty * SelectedLineProperty
double * GetHandlePosition(int handle)
Set/Get the handle position in terms of a zero-based array of handles.
void SetViewProp(vtkProp *prop)
Set the prop, usually a vtkImageActor, to trace over.
virtual void SetLineProperty(vtkProperty *)
Set/Get the line properties.
a simple class to control print indentation
Definition: vtkIndent.h:113
abstract base class for most VTK objects
Definition: vtkObject.h:73
represent and manipulate 3D points
Definition: vtkPoints.h:143
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
pick an actor/prop using graphics hardware
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:67
represent surface properties of a geometric object
Definition: vtkProperty.h:171
transform points and associated normals and vectors for polygonal dataset
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
@ position
Definition: vtkX3D.h:267
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_ITW_SNAP_CELLS
#define VTK_ITW_SNAP_POINTS
#define VTK_ITW_PROJECTION_YZ
#define VTK_ITW_PROJECTION_XY
int vtkIdType
Definition: vtkType.h:332
#define VTK_SIZEHINT(...)