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=========================================================================*/
57#ifndef vtkImageTracerWidget_h
58#define vtkImageTracerWidget_h
59
60#include "vtk3DWidget.h"
61#include "vtkInteractionWidgetsModule.h" // For export macro
62
64class vtkActor;
65class vtkCellArray;
66class vtkCellPicker;
67class vtkFloatArray;
69class vtkPoints;
70class vtkPolyData;
71class vtkProp;
72class vtkProperty;
73class vtkPropPicker;
74class vtkTransform;
76
77#define VTK_ITW_PROJECTION_YZ 0
78#define VTK_ITW_PROJECTION_XZ 1
79#define VTK_ITW_PROJECTION_XY 2
80#define VTK_ITW_SNAP_CELLS 0
81#define VTK_ITW_SNAP_POINTS 1
82
83class VTKINTERACTIONWIDGETS_EXPORT vtkImageTracerWidget : public vtk3DWidget
84{
85public:
90
92 void PrintSelf(ostream& os, vtkIndent indent) override;
93
95
98 void SetEnabled(int) override;
99 void PlaceWidget(double bounds[6]) override;
100 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
102 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
103 {
104 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
105 }
107
109
114 vtkGetObjectMacro(HandleProperty, vtkProperty);
116 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
118
120
125 vtkGetObjectMacro(LineProperty, vtkProperty);
127 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
129
133 void SetViewProp(vtkProp* prop);
134
136
139 vtkSetMacro(ProjectToPlane, vtkTypeBool);
140 vtkGetMacro(ProjectToPlane, vtkTypeBool);
141 vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
143
145
151 vtkSetClampMacro(ProjectionNormal, int, VTK_ITW_PROJECTION_YZ, VTK_ITW_PROJECTION_XY);
152 vtkGetMacro(ProjectionNormal, int);
153 void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
154 void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
155 void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
157
159
166 void SetProjectionPosition(double position);
167 vtkGetMacro(ProjectionPosition, double);
169
171
175 vtkGetMacro(SnapToImage, vtkTypeBool);
176 vtkBooleanMacro(SnapToImage, vtkTypeBool);
178
180
185 vtkSetMacro(AutoClose, vtkTypeBool);
186 vtkGetMacro(AutoClose, vtkTypeBool);
187 vtkBooleanMacro(AutoClose, vtkTypeBool);
189
191
197 vtkSetMacro(CaptureRadius, double);
198 vtkGetMacro(CaptureRadius, double);
200
208
212 vtkGlyphSource2D* GetGlyphSource() { return this->HandleGenerator; }
213
215
219 vtkSetClampMacro(ImageSnapType, int, VTK_ITW_SNAP_CELLS, VTK_ITW_SNAP_POINTS);
220 vtkGetMacro(ImageSnapType, int);
222
224
227 void SetHandlePosition(int handle, double xyz[3]);
228 void SetHandlePosition(int handle, double x, double y, double z);
229 void GetHandlePosition(int handle, double xyz[3]);
230 double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
232
234
237 vtkGetMacro(NumberOfHandles, int);
239
241
245 vtkGetMacro(Interaction, vtkTypeBool);
246 vtkBooleanMacro(Interaction, vtkTypeBool);
248
255
259 int IsClosed();
260
262
265 vtkSetMacro(HandleLeftMouseButton, vtkTypeBool);
266 vtkGetMacro(HandleLeftMouseButton, vtkTypeBool);
267 vtkBooleanMacro(HandleLeftMouseButton, vtkTypeBool);
268 vtkSetMacro(HandleMiddleMouseButton, vtkTypeBool);
269 vtkGetMacro(HandleMiddleMouseButton, vtkTypeBool);
270 vtkBooleanMacro(HandleMiddleMouseButton, vtkTypeBool);
271 vtkSetMacro(HandleRightMouseButton, vtkTypeBool);
272 vtkGetMacro(HandleRightMouseButton, vtkTypeBool);
273 vtkBooleanMacro(HandleRightMouseButton, vtkTypeBool);
275
276protected:
279
280 // Manage the state of the widget
281 int State;
283 {
284 Start = 0,
291 Outside
292 };
293
294 // handles the events
295 static void ProcessEvents(
296 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
297
298 // ProcessEvents() dispatches to these methods.
306
308
309 // Controlling ivars
316 double CaptureRadius; // tolerance for auto path close
319 int LastX;
320 int LastY;
321
322 void Trace(int, int);
323 void Snap(double*);
324 void MovePoint(const double*, const double*);
325 void Translate(const double*, const double*);
326 void ClosePath();
327
328 // 2D glyphs representing hot spots (e.g., handles)
332
333 // Transforms required as 2D glyphs are generated in the x-y plane
337
338 void AppendHandles(double*);
340 void AllocateHandles(const int&);
341 void AdjustHandlePosition(const int&, double*);
342 int HighlightHandle(vtkProp*); // returns handle index or -1 on fail
343 void EraseHandle(const int&);
344 void SizeHandles() override;
345 void InsertHandleOnLine(double*);
346
350
351 vtkProp* ViewProp; // the prop we want to pick on
352 vtkPropPicker* PropPicker; // the prop's picker
353
354 // Representation of the line
359 vtkIdType CurrentPoints[2];
360
361 void HighlightLine(const int&);
363 void ResetLine(double*);
364 void AppendLine(double*);
366
367 // Do the picking of the handles and the lines
371
372 // Register internal Pickers within PickingManager
373 void RegisterPickers() override;
374
375 // Properties used to control the appearance of selected objects and
376 // the manipulator in general.
382
383 // Enable/Disable mouse button events
387
388private:
390 void operator=(const vtkImageTracerWidget&) = delete;
391};
392
393#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:46
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:34
abstract base class for most VTK objects
Definition vtkObject.h:57
represent and manipulate 3D points
Definition vtkPoints.h:34
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:85
pick an actor/prop using graphics hardware
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:51
represent surface properties of a geometric object
Definition vtkProperty.h:62
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(...)