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=========================================================================*/
93#ifndef vtkImageTracerWidget_h
94#define vtkImageTracerWidget_h
95
96#include "vtk3DWidget.h"
97#include "vtkInteractionWidgetsModule.h" // For export macro
98
100class vtkActor;
101class vtkCellArray;
102class vtkCellPicker;
103class vtkFloatArray;
104class vtkGlyphSource2D;
105class vtkPoints;
106class vtkPolyData;
107class vtkProp;
108class vtkProperty;
109class vtkPropPicker;
110class vtkTransform;
112
113#define VTK_ITW_PROJECTION_YZ 0
114#define VTK_ITW_PROJECTION_XZ 1
115#define VTK_ITW_PROJECTION_XY 2
116#define VTK_ITW_SNAP_CELLS 0
117#define VTK_ITW_SNAP_POINTS 1
118
119class VTKINTERACTIONWIDGETS_EXPORT vtkImageTracerWidget : public vtk3DWidget
120{
121public:
126
128 void PrintSelf(ostream& os, vtkIndent indent) override;
129
131
134 void SetEnabled(int) override;
135 void PlaceWidget(double bounds[6]) override;
136 void PlaceWidget() override { this->Superclass::PlaceWidget(); }
138 double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
139 {
140 this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
141 }
143
145
150 vtkGetObjectMacro(HandleProperty, vtkProperty);
152 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
154
156
161 vtkGetObjectMacro(LineProperty, vtkProperty);
163 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
165
169 void SetViewProp(vtkProp* prop);
170
172
175 vtkSetMacro(ProjectToPlane, vtkTypeBool);
176 vtkGetMacro(ProjectToPlane, vtkTypeBool);
177 vtkBooleanMacro(ProjectToPlane, vtkTypeBool);
179
181
187 vtkSetClampMacro(ProjectionNormal, int, VTK_ITW_PROJECTION_YZ, VTK_ITW_PROJECTION_XY);
188 vtkGetMacro(ProjectionNormal, int);
189 void SetProjectionNormalToXAxes() { this->SetProjectionNormal(0); }
190 void SetProjectionNormalToYAxes() { this->SetProjectionNormal(1); }
191 void SetProjectionNormalToZAxes() { this->SetProjectionNormal(2); }
193
195
203 vtkGetMacro(ProjectionPosition, double);
205
207
211 vtkGetMacro(SnapToImage, vtkTypeBool);
212 vtkBooleanMacro(SnapToImage, vtkTypeBool);
214
216
221 vtkSetMacro(AutoClose, vtkTypeBool);
222 vtkGetMacro(AutoClose, vtkTypeBool);
223 vtkBooleanMacro(AutoClose, vtkTypeBool);
225
227
233 vtkSetMacro(CaptureRadius, double);
234 vtkGetMacro(CaptureRadius, double);
236
244
248 vtkGlyphSource2D* GetGlyphSource() { return this->HandleGenerator; }
249
251
255 vtkSetClampMacro(ImageSnapType, int, VTK_ITW_SNAP_CELLS, VTK_ITW_SNAP_POINTS);
256 vtkGetMacro(ImageSnapType, int);
258
260
263 void SetHandlePosition(int handle, double xyz[3]);
264 void SetHandlePosition(int handle, double x, double y, double z);
265 void GetHandlePosition(int handle, double xyz[3]);
266 double* GetHandlePosition(int handle) VTK_SIZEHINT(3);
268
270
273 vtkGetMacro(NumberOfHandles, int);
275
277
281 vtkGetMacro(Interaction, vtkTypeBool);
282 vtkBooleanMacro(Interaction, vtkTypeBool);
284
291
295 int IsClosed();
296
298
301 vtkSetMacro(HandleLeftMouseButton, vtkTypeBool);
302 vtkGetMacro(HandleLeftMouseButton, vtkTypeBool);
303 vtkBooleanMacro(HandleLeftMouseButton, vtkTypeBool);
304 vtkSetMacro(HandleMiddleMouseButton, vtkTypeBool);
305 vtkGetMacro(HandleMiddleMouseButton, vtkTypeBool);
306 vtkBooleanMacro(HandleMiddleMouseButton, vtkTypeBool);
307 vtkSetMacro(HandleRightMouseButton, vtkTypeBool);
308 vtkGetMacro(HandleRightMouseButton, vtkTypeBool);
309 vtkBooleanMacro(HandleRightMouseButton, vtkTypeBool);
311
312protected:
315
316 // Manage the state of the widget
317 int State;
319 {
320 Start = 0,
327 Outside
328 };
329
330 // handles the events
331 static void ProcessEvents(
332 vtkObject* object, unsigned long event, void* clientdata, void* calldata);
333
334 // ProcessEvents() dispatches to these methods.
342
344
345 // Controlling ivars
352 double CaptureRadius; // tolerance for auto path close
355 int LastX;
356 int LastY;
357
358 void Trace(int, int);
359 void Snap(double*);
360 void MovePoint(const double*, const double*);
361 void Translate(const double*, const double*);
362 void ClosePath();
363
364 // 2D glyphs representing hot spots (e.g., handles)
368
369 // Transforms required as 2D glyphs are generated in the x-y plane
373
374 void AppendHandles(double*);
376 void AllocateHandles(const int&);
377 void AdjustHandlePosition(const int&, double*);
378 int HighlightHandle(vtkProp*); // returns handle index or -1 on fail
379 void EraseHandle(const int&);
380 void SizeHandles() override;
381 void InsertHandleOnLine(double*);
382
386
387 vtkProp* ViewProp; // the prop we want to pick on
388 vtkPropPicker* PropPicker; // the prop's picker
389
390 // Representation of the line
395 vtkIdType CurrentPoints[2];
396
397 void HighlightLine(const int&);
399 void ResetLine(double*);
400 void AppendLine(double*);
402
403 // Do the picking of the handles and the lines
407
408 // Register internal Pickers within PickingManager
409 void RegisterPickers() override;
410
411 // Properties used to control the appearance of selected objects and
412 // the manipulator in general.
418
419 // Enable/Disable mouse button events
423
424private:
426 void operator=(const vtkImageTracerWidget&) = delete;
427};
428
429#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:155
object to represent cell connectivity
Definition: vtkCellArray.h:290
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:96
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.
vtkCellPicker * HandlePicker
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 *)
vtkProperty * SelectedLineProperty
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:113
abstract base class for most VTK objects
Definition: vtkObject.h:73
represent and manipulate 3D points
Definition: vtkPoints.h:143
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
pick an actor/prop using graphics hardware
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:67
represent surface properties of a geometric object
Definition: vtkProperty.h:171
transform points and associated normals and vectors for polygonal dataset
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:164
@ position
Definition: vtkX3D.h:267
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(...)