VTK  9.1.0
vtkLineWidget.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkLineWidget.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 =========================================================================*/
92 #ifndef vtkLineWidget_h
93 #define vtkLineWidget_h
94 
95 #include "vtk3DWidget.h"
96 #include "vtkInteractionWidgetsModule.h" // For export macro
97 #include "vtkLineSource.h" // For passing calls to it
98 
99 class vtkActor;
100 class vtkPolyDataMapper;
101 class vtkPoints;
102 class vtkPolyData;
103 class vtkProp;
104 class vtkProperty;
105 class vtkSphereSource;
106 class vtkCellPicker;
107 class vtkPointWidget;
108 class vtkPWCallback;
109 class vtkPW1Callback;
110 class vtkPW2Callback;
111 
112 class VTKINTERACTIONWIDGETS_EXPORT vtkLineWidget : public vtk3DWidget
113 {
114 public:
118  static vtkLineWidget* New();
119 
120  vtkTypeMacro(vtkLineWidget, vtk3DWidget);
121  void PrintSelf(ostream& os, vtkIndent indent) override;
122 
124 
127  void SetEnabled(int) override;
128  void PlaceWidget(double bounds[6]) override;
129  void PlaceWidget() override { this->Superclass::PlaceWidget(); }
131  double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
132  {
133  this->Superclass::PlaceWidget(xmin, xmax, ymin, ymax, zmin, zmax);
134  }
136 
140  void SetResolution(int r) { this->LineSource->SetResolution(r); }
141  int GetResolution() { return this->LineSource->GetResolution(); }
142 
146  void SetPoint1(double x, double y, double z);
147  void SetPoint1(double x[3]) { this->SetPoint1(x[0], x[1], x[2]); }
148  double* GetPoint1() VTK_SIZEHINT(3) { return this->LineSource->GetPoint1(); }
149  void GetPoint1(double xyz[3]) { this->LineSource->GetPoint1(xyz); }
150 
154  void SetPoint2(double x, double y, double z);
155  void SetPoint2(double x[3]) { this->SetPoint2(x[0], x[1], x[2]); }
156  double* GetPoint2() VTK_SIZEHINT(3) { return this->LineSource->GetPoint2(); }
157  void GetPoint2(double xyz[3]) { this->LineSource->GetPoint2(xyz); }
158 
160 
166  vtkSetClampMacro(Align, int, XAxis, None);
167  vtkGetMacro(Align, int);
168  void SetAlignToXAxis() { this->SetAlign(XAxis); }
169  void SetAlignToYAxis() { this->SetAlign(YAxis); }
170  void SetAlignToZAxis() { this->SetAlign(ZAxis); }
171  void SetAlignToNone() { this->SetAlign(None); }
173 
175 
181  vtkSetMacro(ClampToBounds, vtkTypeBool);
182  vtkGetMacro(ClampToBounds, vtkTypeBool);
183  vtkBooleanMacro(ClampToBounds, vtkTypeBool);
185 
194 
196 
201  vtkGetObjectMacro(HandleProperty, vtkProperty);
202  vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
204 
206 
210  vtkGetObjectMacro(LineProperty, vtkProperty);
211  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
213 
214 protected:
216  ~vtkLineWidget() override;
217 
218  // Manage the state of the widget
219  friend class vtkPWCallback;
220 
221  int State;
223  {
224  Start = 0,
228  Outside
229  };
230 
231  // handles the events
232  static void ProcessEvents(
233  vtkObject* object, unsigned long event, void* clientdata, void* calldata);
234 
235  // ProcessEvents() dispatches to these methods.
242  virtual void OnMouseMove();
243 
244  // controlling ivars
245  int Align;
246 
248  {
252  None
253  };
254 
255  // the line
259  void HighlightLine(int highlight);
260 
261  // glyphs representing hot spots (e.g., handles)
265 
267  void SizeHandles() override;
268  void HandlesOn(double length);
269  void HandlesOff();
270  int HighlightHandle(vtkProp* prop); // returns cell id
271  void HighlightHandles(int highlight);
272 
273  // Do the picking
277  double LastPosition[3];
278  void SetLinePosition(double x[3]);
279 
280  // Register internal Pickers within PickingManager
281  void RegisterPickers() override;
282 
283  // Methods to manipulate the hexahedron.
284  void Scale(double* p1, double* p2, int X, int Y);
285 
286  // Initial bounds
288  void ClampPosition(double x[3]);
289  int InBounds(double x[3]);
290 
291  // Properties used to control the appearance of selected objects and
292  // the manipulator in general.
298 
299  void GenerateLine();
300 
301  // Methods for managing the point widgets used to control the endpoints
305  vtkPWCallback* PWCallback;
306  vtkPW1Callback* PW1Callback;
307  vtkPW2Callback* PW2Callback;
311  int ForwardEvent(unsigned long event);
312 
313 private:
314  vtkLineWidget(const vtkLineWidget&) = delete;
315  void operator=(const vtkLineWidget&) = delete;
316 };
317 
318 #endif
vtkPolyDataMapper
map vtkPolyData to graphics primitives
Definition: vtkPolyDataMapper.h:146
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:143
vtkLineWidget::SetAlignToZAxis
void SetAlignToZAxis()
Force the line widget to be aligned with one of the x-y-z axes.
Definition: vtkLineWidget.h:170
vtkLineWidget::ClampPosition
void ClampPosition(double x[3])
vtkLineWidget::LineSource
vtkLineSource * LineSource
Definition: vtkLineWidget.h:258
vtkLineWidget::LineActor
vtkActor * LineActor
Definition: vtkLineWidget.h:256
vtkLineWidget::GetResolution
int GetResolution()
Definition: vtkLineWidget.h:141
vtkLineWidget::SetAlignToYAxis
void SetAlignToYAxis()
Force the line widget to be aligned with one of the x-y-z axes.
Definition: vtkLineWidget.h:169
vtkLineWidget::RegisterPickers
void RegisterPickers() override
Register internal Pickers in the Picking Manager.
vtkLineWidget::CreateDefaultProperties
void CreateDefaultProperties()
vtkLineWidget::PlaceWidget
void PlaceWidget(double bounds[6]) override
Methods that satisfy the superclass' API.
vtkLineWidget::AlignmentState
AlignmentState
Definition: vtkLineWidget.h:248
vtkLineWidget::GetPolyData
void GetPolyData(vtkPolyData *pd)
Grab the polydata (including points) that defines the line.
vtkLineWidget::SetAlignToNone
void SetAlignToNone()
Force the line widget to be aligned with one of the x-y-z axes.
Definition: vtkLineWidget.h:171
vtkLineWidget::ForwardEvent
int ForwardEvent(unsigned long event)
vtkLineWidget::SetPoint1
void SetPoint1(double x[3])
Definition: vtkLineWidget.h:147
vtkLineWidget::OnRightButtonDown
void OnRightButtonDown()
vtkLineWidget::GetPoint2
double * GetPoint2()
Definition: vtkLineWidget.h:156
vtkLineWidget::PointWidget
vtkPointWidget * PointWidget
Definition: vtkLineWidget.h:302
vtkLineWidget::Handle
vtkActor ** Handle
Definition: vtkLineWidget.h:262
vtkLineWidget::OnMiddleButtonDown
void OnMiddleButtonDown()
vtkLineWidget::CurrentHandle
vtkActor * CurrentHandle
Definition: vtkLineWidget.h:276
vtkLineWidget::HandleGeometry
vtkSphereSource ** HandleGeometry
Definition: vtkLineWidget.h:264
vtkLineWidget::GenerateLine
void GenerateLine()
vtkLineWidget::SetPoint1
void SetPoint1(double x, double y, double z)
Set/Get the position of first end point.
vtkLineWidget::LineMapper
vtkPolyDataMapper * LineMapper
Definition: vtkLineWidget.h:257
vtkLineWidget::New
static vtkLineWidget * New()
Instantiate the object.
vtkLineWidget::HandlePicker
vtkCellPicker * HandlePicker
Definition: vtkLineWidget.h:274
vtkLineWidget::EnablePointWidget
void EnablePointWidget()
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:82
vtkLineWidget::OnLeftButtonUp
void OnLeftButtonUp()
vtkPointWidget
position a point in 3D space
Definition: vtkPointWidget.h:103
vtkX3D::length
@ length
Definition: vtkX3D.h:399
vtkLineWidget::SizeHandles
void SizeHandles() override
vtkLineWidget::HighlightHandles
void HighlightHandles(int highlight)
vtkLineWidget::SetResolution
void SetResolution(int r)
Set/Get the resolution (number of subdivisions) of the line.
Definition: vtkLineWidget.h:140
vtkLineWidget::CurrentPointWidget
vtkPointWidget * CurrentPointWidget
Definition: vtkLineWidget.h:308
vtkLineWidget::vtkLineWidget
vtkLineWidget()
vtkLineWidget::State
int State
Definition: vtkLineWidget.h:221
vtkLineWidget::Align
int Align
Definition: vtkLineWidget.h:245
vtkLineWidget::SetPoint2
void SetPoint2(double x, double y, double z)
Set position of other end point.
vtkLineWidget::SetPoint2
void SetPoint2(double x[3])
Definition: vtkLineWidget.h:155
vtkLineWidget::SetLinePosition
void SetLinePosition(double x[3])
vtkLineWidget::OnRightButtonUp
void OnRightButtonUp()
vtkLineWidget::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkLineWidget::GetPoint2
void GetPoint2(double xyz[3])
Definition: vtkLineWidget.h:157
vtkLineWidget::BuildRepresentation
void BuildRepresentation()
vtkLineWidget::OnMouseMove
virtual void OnMouseMove()
vtkLineWidget::SetAlignToXAxis
void SetAlignToXAxis()
Force the line widget to be aligned with one of the x-y-z axes.
Definition: vtkLineWidget.h:168
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:48
vtkLineWidget
3D widget for manipulating a line
Definition: vtkLineWidget.h:113
vtkLineWidget::ZAxis
@ ZAxis
Definition: vtkLineWidget.h:251
vtkLineWidget::Scale
void Scale(double *p1, double *p2, int X, int Y)
vtkLineWidget::HighlightHandle
int HighlightHandle(vtkProp *prop)
vtkSphereSource
create a polygonal sphere centered at the origin
Definition: vtkSphereSource.h:149
vtkLineWidget::SelectedLineProperty
vtkProperty * SelectedLineProperty
Definition: vtkLineWidget.h:296
vtkLineWidget::LinePicker
vtkCellPicker * LinePicker
Definition: vtkLineWidget.h:275
vtkLineWidget::HandlesOn
void HandlesOn(double length)
vtkActor
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:155
vtkLineWidget::GetPoint1
double * GetPoint1()
Definition: vtkLineWidget.h:148
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:113
vtkLineWidget::MovingHandle
@ MovingHandle
Definition: vtkLineWidget.h:225
vtkLineWidget::LineProperty
vtkProperty * LineProperty
Definition: vtkLineWidget.h:295
vtkLineWidget::DisablePointWidget
void DisablePointWidget()
vtkLineWidget::PlaceWidget
void PlaceWidget(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) override
Methods that satisfy the superclass' API.
Definition: vtkLineWidget.h:130
vtkLineSource.h
vtk3DWidget
an abstract superclass for 3D widgets
Definition: vtk3DWidget.h:71
vtkLineWidget::HandlesOff
void HandlesOff()
vtkLineWidget::~vtkLineWidget
~vtkLineWidget() override
vtkLineWidget::HandleProperty
vtkProperty * HandleProperty
Definition: vtkLineWidget.h:293
vtkLineWidget::ProcessEvents
static void ProcessEvents(vtkObject *object, unsigned long event, void *clientdata, void *calldata)
vtkLineSource
create a line defined by two end points
Definition: vtkLineSource.h:170
vtkLineWidget::OnLeftButtonDown
void OnLeftButtonDown()
vtkLineWidget::MovingLine
@ MovingLine
Definition: vtkLineWidget.h:226
vtkLineWidget::SelectedHandleProperty
vtkProperty * SelectedHandleProperty
Definition: vtkLineWidget.h:294
vtkLineWidget::YAxis
@ YAxis
Definition: vtkLineWidget.h:250
vtkLineWidget::PW2Callback
vtkPW2Callback * PW2Callback
Definition: vtkLineWidget.h:307
vtkProp
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:76
vtkLineWidget::OnMiddleButtonUp
void OnMiddleButtonUp()
vtkLineWidget::PlaceWidget
void PlaceWidget() override
Methods that satisfy the superclass' API.
Definition: vtkLineWidget.h:129
vtkLineWidget::GetPoint1
void GetPoint1(double xyz[3])
Definition: vtkLineWidget.h:149
vtkLineWidget::PointWidget1
vtkPointWidget * PointWidget1
Definition: vtkLineWidget.h:303
vtkLineWidget::HighlightLine
void HighlightLine(int highlight)
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
vtkLineWidget::SetEnabled
void SetEnabled(int) override
Methods that satisfy the superclass' API.
vtkLineWidget::PW1Callback
vtkPW1Callback * PW1Callback
Definition: vtkLineWidget.h:306
vtkLineWidget::ClampToBounds
vtkTypeBool ClampToBounds
Definition: vtkLineWidget.h:287
vtkLineWidget::Scaling
@ Scaling
Definition: vtkLineWidget.h:227
vtk3DWidget.h
vtkProperty
represent surface properties of a geometric object
Definition: vtkProperty.h:171
vtkLineWidget::InBounds
int InBounds(double x[3])
vtkCellPicker
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:96
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkLineWidget::PointWidget2
vtkPointWidget * PointWidget2
Definition: vtkLineWidget.h:304
vtkLineWidget::XAxis
@ XAxis
Definition: vtkLineWidget.h:249
vtkLineWidget::WidgetState
WidgetState
Definition: vtkLineWidget.h:223
vtkLineWidget::HandleMapper
vtkPolyDataMapper ** HandleMapper
Definition: vtkLineWidget.h:263
vtkLineWidget::PWCallback
vtkPWCallback * PWCallback
Definition: vtkLineWidget.h:305