VTK  9.4.20251007
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
47
48#ifndef vtkImageTracerWidget_h
49#define vtkImageTracerWidget_h
50
51#include "vtk3DWidget.h"
52#include "vtkInteractionWidgetsModule.h" // For export macro
53
54VTK_ABI_NAMESPACE_BEGIN
56class vtkActor;
57class vtkCellArray;
58class vtkCellPicker;
59class vtkFloatArray;
61class vtkPoints;
62class vtkPolyData;
63class vtkProp;
64class vtkProperty;
65class vtkPropPicker;
66class vtkTransform;
68
69#define VTK_ITW_PROJECTION_YZ 0
70#define VTK_ITW_PROJECTION_XZ 1
71#define VTK_ITW_PROJECTION_XY 2
72#define VTK_ITW_SNAP_CELLS 0
73#define VTK_ITW_SNAP_POINTS 1
74
75class VTKINTERACTIONWIDGETS_EXPORT vtkImageTracerWidget : public vtk3DWidget
76{
77public:
82
84 void PrintSelf(ostream& os, vtkIndent indent) override;
85
87
90 void SetEnabled(int) override;
91 void PlaceWidget(double bounds[6]) override;
92 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
94 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
95 {
96 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
97 }
98
99
101
106 vtkGetObjectMacro(HandleProperty, vtkProperty);
110
112
117 vtkGetObjectMacro(LineProperty, vtkProperty);
121
125 void SetViewProp(vtkProp* prop);
126
128
133 vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
135
137
144 vtkGetMacro(ProjectionNormal, int);
149
151
158 void SetProjectionPosition(double position);
159 vtkGetMacro(ProjectionPosition, double);
161
163
168 vtkBooleanMacro(SnapToImage, vtkTypeBool);
170
172
177 vtkSetMacro(AutoClose, vtkTypeBool);
178 vtkGetMacro(AutoClose, vtkTypeBool);
179 vtkBooleanMacro(AutoClose, vtkTypeBool);
181
183
189 vtkSetMacro(CaptureRadius, double);
190 vtkGetMacro(CaptureRadius, double);
192
200
205
207
212 vtkGetMacro(ImageSnapType, int);
214
216
219 void SetHandlePosition(int handle, double xyz[3]);
220 void SetHandlePosition(int handle, double x, double y, double z);
221 void GetHandlePosition(int handle, double xyz[3]);
222 double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
224
226
229 vtkGetMacro(NumberOfHandles, int);
231
233
238 vtkBooleanMacro(Interaction, vtkTypeBool);
240
247
251 int IsClosed();
252
254
267
268protected:
271
272 // Manage the state of the widget
273 int State;
285
286 // handles the events
287 static void ProcessEvents(
288 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
289
290 // ProcessEvents() dispatches to these methods.
298
300
301 // Controlling ivars
308 double CaptureRadius; // tolerance for auto path close
311 int LastX;
312 int LastY;
313
314 void Trace(int, int);
315 void Snap(double*);
316 void MovePoint(const double*, const double*);
317 void Translate(const double*, const double*);
318 void ClosePath();
319
320 // 2D glyphs representing hot spots (e.g., handles)
324
325 // Transforms required as 2D glyphs are generated in the x-y plane
329
330 void AppendHandles(double*);
332 void AllocateHandles(const int&);
333 void AdjustHandlePosition(const int&, double*);
334 int HighlightHandle(vtkProp*); // returns handle index or -1 on fail
335 void EraseHandle(const int&);
336 void SizeHandles() override;
337 void InsertHandleOnLine(double*);
338
342
343 vtkProp* ViewProp; // the prop we want to pick on
344 vtkPropPicker* PropPicker; // the prop's picker
345
346 // Representation of the line
352
353 void HighlightLine(const int&);
355 void ResetLine(double*);
356 void AppendLine(double*);
358
359 // Do the picking of the handles and the lines
363
364 // Register internal Pickers within PickingManager
365 void RegisterPickers() override;
366
367 // Properties used to control the appearance of selected objects and
368 // the manipulator in general.
374
375 // Enable/Disable mouse button events
379
380private:
382 void operator=(const vtkImageTracerWidget&) = delete;
383};
384
385VTK_ABI_NAMESPACE_END
386#endif
virtual void PlaceWidget(double bounds[6])=0
This method is used to initially place the widget.
abstract API for pickers that can pick an instance of vtkProp
represents an object (geometry & properties) in a rendered scene
Definition vtkActor.h:42
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
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
virtual void SetProjectionNormal(int)
Set the projection normal.
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
represent and manipulate 3D points
Definition vtkPoints.h:30
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:72
pick an actor/prop using graphics hardware
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:47
represent surface properties of a geometric object
Definition vtkProperty.h:60
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(...)