VTK  9.2.6
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=========================================================================*/
60#ifndef vtkImageTracerWidget_h
61#define vtkImageTracerWidget_h
62
63#include "vtk3DWidget.h"
64#include "vtkInteractionWidgetsModule.h" // For export macro
65
67class vtkActor;
68class vtkCellArray;
69class vtkCellPicker;
70class vtkFloatArray;
72class vtkPoints;
73class vtkPolyData;
74class vtkProp;
75class vtkProperty;
76class vtkPropPicker;
77class vtkTransform;
79
80#define VTK_ITW_PROJECTION_YZ 0
81#define VTK_ITW_PROJECTION_XZ 1
82#define VTK_ITW_PROJECTION_XY 2
83#define VTK_ITW_SNAP_CELLS 0
84#define VTK_ITW_SNAP_POINTS 1
85
86class VTKINTERACTIONWIDGETS_EXPORT vtkImageTracerWidget : public vtk3DWidget
87{
88public:
93
95 void PrintSelf(ostream& os, vtkIndent indent) override;
96
98
101 void SetEnabled(int) override;
102 void PlaceWidget(double bounds[6]) override;
103 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
105 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
106 {
107 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
108 }
110
112
117 vtkGetObjectMacro(HandleProperty, vtkProperty);
119 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
121
123
128 vtkGetObjectMacro(LineProperty, vtkProperty);
130 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
132
136 void SetViewProp(vtkProp* prop);
137
139
142 vtkSetMacro(ProjectToPlane, vtkTypeBool);
143 vtkGetMacro(ProjectToPlane, vtkTypeBool);
144 vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
146
148
154 vtkSetClampMacro(ProjectionNormal, int, VTK_ITW_PROJECTION_YZ, VTK_ITW_PROJECTION_XY);
155 vtkGetMacro(ProjectionNormal, int);
156 void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
157 void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
158 void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
160
162
169 void SetProjectionPosition(double position);
170 vtkGetMacro(ProjectionPosition, double);
172
174
178 vtkGetMacro(SnapToImage, vtkTypeBool);
179 vtkBooleanMacro(SnapToImage, vtkTypeBool);
181
183
188 vtkSetMacro(AutoClose, vtkTypeBool);
189 vtkGetMacro(AutoClose, vtkTypeBool);
190 vtkBooleanMacro(AutoClose, vtkTypeBool);
192
194
200 vtkSetMacro(CaptureRadius, double);
201 vtkGetMacro(CaptureRadius, double);
203
211
215 vtkGlyphSource2D* GetGlyphSource() { return this->HandleGenerator; }
216
218
222 vtkSetClampMacro(ImageSnapType, int, VTK_ITW_SNAP_CELLS, VTK_ITW_SNAP_POINTS);
223 vtkGetMacro(ImageSnapType, int);
225
227
230 void SetHandlePosition(int handle, double xyz[3]);
231 void SetHandlePosition(int handle, double x, double y, double z);
232 void GetHandlePosition(int handle, double xyz[3]);
233 double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
235
237
240 vtkGetMacro(NumberOfHandles, int);
242
244
248 vtkGetMacro(Interaction, vtkTypeBool);
249 vtkBooleanMacro(Interaction, vtkTypeBool);
251
258
262 int IsClosed();
263
265
268 vtkSetMacro(HandleLeftMouseButton, vtkTypeBool);
269 vtkGetMacro(HandleLeftMouseButton, vtkTypeBool);
270 vtkBooleanMacro(HandleLeftMouseButton, vtkTypeBool);
271 vtkSetMacro(HandleMiddleMouseButton, vtkTypeBool);
272 vtkGetMacro(HandleMiddleMouseButton, vtkTypeBool);
273 vtkBooleanMacro(HandleMiddleMouseButton, vtkTypeBool);
274 vtkSetMacro(HandleRightMouseButton, vtkTypeBool);
275 vtkGetMacro(HandleRightMouseButton, vtkTypeBool);
276 vtkBooleanMacro(HandleRightMouseButton, vtkTypeBool);
278
279protected:
282
283 // Manage the state of the widget
284 int State;
286 {
287 Start = 0,
294 Outside
295 };
296
297 // handles the events
298 static void ProcessEvents(
299 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
300
301 // ProcessEvents() dispatches to these methods.
309
311
312 // Controlling ivars
319 double CaptureRadius; // tolerance for auto path close
322 int LastX;
323 int LastY;
324
325 void Trace(int, int);
326 void Snap(double*);
327 void MovePoint(const double*, const double*);
328 void Translate(const double*, const double*);
329 void ClosePath();
330
331 // 2D glyphs representing hot spots (e.g., handles)
335
336 // Transforms required as 2D glyphs are generated in the x-y plane
340
341 void AppendHandles(double*);
343 void AllocateHandles(const int&);
344 void AdjustHandlePosition(const int&, double*);
345 int HighlightHandle(vtkProp*); // returns handle index or -1 on fail
346 void EraseHandle(const int&);
347 void SizeHandles() override;
348 void InsertHandleOnLine(double*);
349
353
354 vtkProp* ViewProp; // the prop we want to pick on
355 vtkPropPicker* PropPicker; // the prop's picker
356
357 // Representation of the line
362 vtkIdType CurrentPoints[2];
363
364 void HighlightLine(const int&);
366 void ResetLine(double*);
367 void AppendLine(double*);
369
370 // Do the picking of the handles and the lines
374
375 // Register internal Pickers within PickingManager
376 void RegisterPickers() override;
377
378 // Properties used to control the appearance of selected objects and
379 // the manipulator in general.
385
386 // Enable/Disable mouse button events
390
391private:
393 void operator=(const vtkImageTracerWidget&) = delete;
394};
395
396#endif
an abstract superclass for 3D widgets
Definition vtk3DWidget.h:71
abstract API for pickers that can pick an instance of vtkProp
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:52
object to represent cell connectivity
ray-cast cell picker for all kinds of Prop3Ds
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.
void AppendLine(double *)
void InsertHandleOnLine(double *)
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.
static vtkImageTracerWidget * New()
Instantiate the object.
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).
vtkGlyphSource2D * GetGlyphSource()
Get the handles' geometric representation via vtkGlyphSource2D.
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 &)
double * GetHandlePosition(int handle)
Set/Get the handle position in terms of a zero-based array of handles.
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 *)
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 *)
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:40
abstract base class for most VTK objects
Definition vtkObject.h:63
represent and manipulate 3D points
Definition vtkPoints.h:40
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:91
pick an actor/prop using graphics hardware
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:57
represent surface properties of a geometric object
Definition vtkProperty.h:68
transform points and associated normals and vectors for polygonal dataset
describes linear transformations via a 4x4 matrix
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(...)