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=========================================================================*/
54#ifndef vtkImageTracerWidget_h
55#define vtkImageTracerWidget_h
56
57#include "vtk3DWidget.h"
58#include "vtkInteractionWidgetsModule.h" // For export macro
59
61class vtkActor;
62class vtkCellArray;
63class vtkCellPicker;
64class vtkFloatArray;
66class vtkPoints;
67class vtkPolyData;
68class vtkProp;
69class vtkProperty;
70class vtkPropPicker;
71class vtkTransform;
73
74#define VTK_ITW_PROJECTION_YZ 0
75#define VTK_ITW_PROJECTION_XZ 1
76#define VTK_ITW_PROJECTION_XY 2
77#define VTK_ITW_SNAP_CELLS 0
78#define VTK_ITW_SNAP_POINTS 1
79
80class VTKINTERACTIONWIDGETS_EXPORT vtkImageTracerWidget : public vtk3DWidget
81{
82public:
87
89 void PrintSelf(ostream& os, vtkIndent indent) override;
90
92
95 void SetEnabled(int) override;
96 void PlaceWidget(double bounds[6]) override;
97 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
99 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
100 {
101 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
102 }
104
106
111 vtkGetObjectMacro(HandleProperty, vtkProperty);
113 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
115
117
122 vtkGetObjectMacro(LineProperty, vtkProperty);
124 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
126
130 void SetViewProp(vtkProp* prop);
131
133
136 vtkSetMacro(ProjectToPlane, vtkTypeBool);
137 vtkGetMacro(ProjectToPlane, vtkTypeBool);
138 vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
140
142
148 vtkSetClampMacro(ProjectionNormal, int, VTK_ITW_PROJECTION_YZ, VTK_ITW_PROJECTION_XY);
149 vtkGetMacro(ProjectionNormal, int);
150 void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
151 void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
152 void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
154
156
163 void SetProjectionPosition(double position);
164 vtkGetMacro(ProjectionPosition, double);
166
168
172 vtkGetMacro(SnapToImage, vtkTypeBool);
173 vtkBooleanMacro(SnapToImage, vtkTypeBool);
175
177
182 vtkSetMacro(AutoClose, vtkTypeBool);
183 vtkGetMacro(AutoClose, vtkTypeBool);
184 vtkBooleanMacro(AutoClose, vtkTypeBool);
186
188
194 vtkSetMacro(CaptureRadius, double);
195 vtkGetMacro(CaptureRadius, double);
197
205
209 vtkGlyphSource2D* GetGlyphSource() { return this->HandleGenerator; }
210
212
216 vtkSetClampMacro(ImageSnapType, int, VTK_ITW_SNAP_CELLS, VTK_ITW_SNAP_POINTS);
217 vtkGetMacro(ImageSnapType, int);
219
221
224 void SetHandlePosition(int handle, double xyz[3]);
225 void SetHandlePosition(int handle, double x, double y, double z);
226 void GetHandlePosition(int handle, double xyz[3]);
227 double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
229
231
234 vtkGetMacro(NumberOfHandles, int);
236
238
242 vtkGetMacro(Interaction, vtkTypeBool);
243 vtkBooleanMacro(Interaction, vtkTypeBool);
245
252
256 int IsClosed();
257
259
262 vtkSetMacro(HandleLeftMouseButton, vtkTypeBool);
263 vtkGetMacro(HandleLeftMouseButton, vtkTypeBool);
264 vtkBooleanMacro(HandleLeftMouseButton, vtkTypeBool);
265 vtkSetMacro(HandleMiddleMouseButton, vtkTypeBool);
266 vtkGetMacro(HandleMiddleMouseButton, vtkTypeBool);
267 vtkBooleanMacro(HandleMiddleMouseButton, vtkTypeBool);
268 vtkSetMacro(HandleRightMouseButton, vtkTypeBool);
269 vtkGetMacro(HandleRightMouseButton, vtkTypeBool);
270 vtkBooleanMacro(HandleRightMouseButton, vtkTypeBool);
272
273protected:
276
277 // Manage the state of the widget
278 int State;
280 {
281 Start = 0,
288 Outside
289 };
290
291 // handles the events
292 static void ProcessEvents(
293 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
294
295 // ProcessEvents() dispatches to these methods.
303
305
306 // Controlling ivars
313 double CaptureRadius; // tolerance for auto path close
316 int LastX;
317 int LastY;
318
319 void Trace(int, int);
320 void Snap(double*);
321 void MovePoint(const double*, const double*);
322 void Translate(const double*, const double*);
323 void ClosePath();
324
325 // 2D glyphs representing hot spots (e.g., handles)
329
330 // Transforms required as 2D glyphs are generated in the x-y plane
334
335 void AppendHandles(double*);
337 void AllocateHandles(const int&);
338 void AdjustHandlePosition(const int&, double*);
339 int HighlightHandle(vtkProp*); // returns handle index or -1 on fail
340 void EraseHandle(const int&);
341 void SizeHandles() override;
342 void InsertHandleOnLine(double*);
343
347
348 vtkProp* ViewProp; // the prop we want to pick on
349 vtkPropPicker* PropPicker; // the prop's picker
350
351 // Representation of the line
356 vtkIdType CurrentPoints[2];
357
358 void HighlightLine(const int&);
360 void ResetLine(double*);
361 void AppendLine(double*);
363
364 // Do the picking of the handles and the lines
368
369 // Register internal Pickers within PickingManager
370 void RegisterPickers() override;
371
372 // Properties used to control the appearance of selected objects and
373 // the manipulator in general.
379
380 // Enable/Disable mouse button events
384
385private:
387 void operator=(const vtkImageTracerWidget&) = delete;
388};
389
390#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: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:54
represent and manipulate 3D points
Definition vtkPoints.h:34
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:86
pick an actor/prop using graphics hardware
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:48
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(...)