VTK  9.3.0
vtkImageTracerWidget.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
45#ifndef vtkImageTracerWidget_h
46#define vtkImageTracerWidget_h
47
48#include "vtk3DWidget.h"
49#include "vtkInteractionWidgetsModule.h" // For export macro
50
51VTK_ABI_NAMESPACE_BEGIN
53class vtkActor;
54class vtkCellArray;
55class vtkCellPicker;
56class vtkFloatArray;
58class vtkPoints;
59class vtkPolyData;
60class vtkProp;
61class vtkProperty;
62class vtkPropPicker;
63class vtkTransform;
65
66#define VTK_ITW_PROJECTION_YZ 0
67#define VTK_ITW_PROJECTION_XZ 1
68#define VTK_ITW_PROJECTION_XY 2
69#define VTK_ITW_SNAP_CELLS 0
70#define VTK_ITW_SNAP_POINTS 1
71
72class VTKINTERACTIONWIDGETS_EXPORT vtkImageTracerWidget : public vtk3DWidget
73{
74public:
79
81 void PrintSelf(ostream& os, vtkIndent indent) override;
82
84
87 void SetEnabled(int) override;
88 void PlaceWidget(double bounds[6]) override;
89 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
91 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
92 {
93 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
94 }
96
98
103 vtkGetObjectMacro(HandleProperty, vtkProperty);
105 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
107
109
114 vtkGetObjectMacro(LineProperty, vtkProperty);
116 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
118
122 void SetViewProp(vtkProp* prop);
123
125
128 vtkSetMacro(ProjectToPlane, vtkTypeBool);
129 vtkGetMacro(ProjectToPlane, vtkTypeBool);
130 vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
132
134
140 vtkSetClampMacro(ProjectionNormal, int, VTK_ITW_PROJECTION_YZ, VTK_ITW_PROJECTION_XY);
141 vtkGetMacro(ProjectionNormal, int);
142 void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
143 void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
144 void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
146
148
155 void SetProjectionPosition(double position);
156 vtkGetMacro(ProjectionPosition, double);
158
160
164 vtkGetMacro(SnapToImage, vtkTypeBool);
165 vtkBooleanMacro(SnapToImage, vtkTypeBool);
167
169
174 vtkSetMacro(AutoClose, vtkTypeBool);
175 vtkGetMacro(AutoClose, vtkTypeBool);
176 vtkBooleanMacro(AutoClose, vtkTypeBool);
178
180
186 vtkSetMacro(CaptureRadius, double);
187 vtkGetMacro(CaptureRadius, double);
189
197
201 vtkGlyphSource2D* GetGlyphSource() { return this->HandleGenerator; }
202
204
208 vtkSetClampMacro(ImageSnapType, int, VTK_ITW_SNAP_CELLS, VTK_ITW_SNAP_POINTS);
209 vtkGetMacro(ImageSnapType, int);
211
213
216 void SetHandlePosition(int handle, double xyz[3]);
217 void SetHandlePosition(int handle, double x, double y, double z);
218 void GetHandlePosition(int handle, double xyz[3]);
219 double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
221
223
226 vtkGetMacro(NumberOfHandles, int);
228
230
234 vtkGetMacro(Interaction, vtkTypeBool);
235 vtkBooleanMacro(Interaction, vtkTypeBool);
237
244
248 int IsClosed();
249
251
254 vtkSetMacro(HandleLeftMouseButton, vtkTypeBool);
255 vtkGetMacro(HandleLeftMouseButton, vtkTypeBool);
256 vtkBooleanMacro(HandleLeftMouseButton, vtkTypeBool);
257 vtkSetMacro(HandleMiddleMouseButton, vtkTypeBool);
258 vtkGetMacro(HandleMiddleMouseButton, vtkTypeBool);
259 vtkBooleanMacro(HandleMiddleMouseButton, vtkTypeBool);
260 vtkSetMacro(HandleRightMouseButton, vtkTypeBool);
261 vtkGetMacro(HandleRightMouseButton, vtkTypeBool);
262 vtkBooleanMacro(HandleRightMouseButton, vtkTypeBool);
264
265protected:
268
269 // Manage the state of the widget
270 int State;
272 {
273 Start = 0,
280 Outside
281 };
282
283 // handles the events
284 static void ProcessEvents(
285 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
286
287 // ProcessEvents() dispatches to these methods.
295
297
298 // Controlling ivars
305 double CaptureRadius; // tolerance for auto path close
308 int LastX;
309 int LastY;
310
311 void Trace(int, int);
312 void Snap(double*);
313 void MovePoint(const double*, const double*);
314 void Translate(const double*, const double*);
315 void ClosePath();
316
317 // 2D glyphs representing hot spots (e.g., handles)
321
322 // Transforms required as 2D glyphs are generated in the x-y plane
326
327 void AppendHandles(double*);
329 void AllocateHandles(const int&);
330 void AdjustHandlePosition(const int&, double*);
331 int HighlightHandle(vtkProp*); // returns handle index or -1 on fail
332 void EraseHandle(const int&);
333 void SizeHandles() override;
334 void InsertHandleOnLine(double*);
335
339
340 vtkProp* ViewProp; // the prop we want to pick on
341 vtkPropPicker* PropPicker; // the prop's picker
342
343 // Representation of the line
348 vtkIdType CurrentPoints[2];
349
350 void HighlightLine(const int&);
352 void ResetLine(double*);
353 void AppendLine(double*);
355
356 // Do the picking of the handles and the lines
360
361 // Register internal Pickers within PickingManager
362 void RegisterPickers() override;
363
364 // Properties used to control the appearance of selected objects and
365 // the manipulator in general.
371
372 // Enable/Disable mouse button events
376
377private:
379 void operator=(const vtkImageTracerWidget&) = delete;
380};
381
382VTK_ABI_NAMESPACE_END
383#endif
an abstract superclass for 3D widgets
Definition vtk3DWidget.h:57
abstract API for pickers that can pick an instance of vtkProp
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:41
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:29
abstract base class for most VTK objects
Definition vtkObject.h:49
represent and manipulate 3D points
Definition vtkPoints.h:29
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:80
pick an actor/prop using graphics hardware
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:43
represent surface properties of a geometric object
Definition vtkProperty.h:57
transform points and associated normals and vectors for polygonal dataset
describes linear transformations via a 4x4 matrix
int vtkTypeBool
Definition vtkABI.h:64
#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:315
#define VTK_SIZEHINT(...)