VTK  9.1.0
vtkLineRepresentation.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkLineRepresentation.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 =========================================================================*/
57 #ifndef vtkLineRepresentation_h
58 #define vtkLineRepresentation_h
59 
60 #include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_0_0
61 #include "vtkInteractionWidgetsModule.h" // For export macro
63 
64 class vtkActor;
65 class vtkConeSource;
66 class vtkPolyDataMapper;
67 class vtkLineSource;
68 class vtkProperty;
69 class vtkPolyData;
72 class vtkBox;
73 class vtkFollower;
74 class vtkVectorText;
75 class vtkPolyDataMapper;
76 class vtkCellPicker;
77 
78 class VTKINTERACTIONWIDGETS_EXPORT vtkLineRepresentation : public vtkWidgetRepresentation
79 {
80 public:
85 
87 
91  void PrintSelf(ostream& os, vtkIndent indent) override;
93 
95 
100  void GetPoint1WorldPosition(double pos[3]);
102  void GetPoint1DisplayPosition(double pos[3]);
103  double* GetPoint1DisplayPosition() VTK_SIZEHINT(3);
104  void SetPoint1WorldPosition(double pos[3]);
105  void SetPoint1DisplayPosition(double pos[3]);
106  void GetPoint2DisplayPosition(double pos[3]);
107  double* GetPoint2DisplayPosition() VTK_SIZEHINT(3);
108  void GetPoint2WorldPosition(double pos[3]);
109  double* GetPoint2WorldPosition() VTK_SIZEHINT(3);
110  void SetPoint2WorldPosition(double pos[3]);
111  void SetPoint2DisplayPosition(double pos[3]);
113 
115 
125  void SetHandleRepresentation(vtkPointHandleRepresentation3D* handle);
126  void InstantiateHandleRepresentation();
128 
130 
133  vtkGetObjectMacro(Point1Representation, vtkPointHandleRepresentation3D);
134  vtkGetObjectMacro(Point2Representation, vtkPointHandleRepresentation3D);
135  vtkGetObjectMacro(LineHandleRepresentation, vtkPointHandleRepresentation3D);
137 
139 
143  vtkGetObjectMacro(EndPointProperty, vtkProperty);
144  vtkGetObjectMacro(SelectedEndPointProperty, vtkProperty);
146 
148 
152  vtkGetObjectMacro(EndPoint2Property, vtkProperty);
153  vtkGetObjectMacro(SelectedEndPoint2Property, vtkProperty);
155 
157 
161  vtkGetObjectMacro(LineProperty, vtkProperty);
162  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
164 
166 
171  vtkSetClampMacro(Tolerance, int, 1, 100);
172  vtkGetMacro(Tolerance, int);
174 
176 
181  void SetResolution(int res);
182  int GetResolution();
184 
193  void GetPolyData(vtkPolyData* pd);
194 
196 
199  void PlaceWidget(double bounds[6]) override;
200  void BuildRepresentation() override;
201  int ComputeInteractionState(int X, int Y, int modify = 0) override;
202  void StartWidgetInteraction(double e[2]) override;
203  void WidgetInteraction(double e[2]) override;
204  double* GetBounds() VTK_SIZEHINT(6) override;
206 
208 
211  void GetActors(vtkPropCollection* pc) override;
212  void ReleaseGraphicsResources(vtkWindow*) override;
213  int RenderOpaqueGeometry(vtkViewport*) override;
214  int RenderTranslucentPolygonalGeometry(vtkViewport*) override;
215  vtkTypeBool HasTranslucentPolygonalGeometry() override;
217 
218  // Manage the state of the widget
219  enum
220  {
221  Outside = 0,
227  Scaling
228  };
229 
231 
240  vtkSetClampMacro(InteractionState, int, Outside, Scaling);
242 
244 
248  virtual void SetRepresentationState(int);
249  vtkGetMacro(RepresentationState, int);
251 
253 
257  void SetDirectionalLine(bool val);
258  vtkGetMacro(DirectionalLine, bool);
259  vtkBooleanMacro(DirectionalLine, bool);
261 
266  vtkMTimeType GetMTime() override;
267 
271  void SetRenderer(vtkRenderer* ren) override;
272 
274 
277  vtkSetMacro(DistanceAnnotationVisibility, vtkTypeBool);
278  vtkGetMacro(DistanceAnnotationVisibility, vtkTypeBool);
279  vtkBooleanMacro(DistanceAnnotationVisibility, vtkTypeBool);
281 
283 
288  vtkSetStringMacro(DistanceAnnotationFormat);
289  vtkGetStringMacro(DistanceAnnotationFormat);
291 
293 
296  void SetDistanceAnnotationScale(double x, double y, double z)
297  {
298  double scale[3];
299  scale[0] = x;
300  scale[1] = y;
301  scale[2] = z;
302  this->SetDistanceAnnotationScale(scale);
303  }
304  virtual void SetDistanceAnnotationScale(double scale[3]);
307 
311  double GetDistance();
312 
317  void SetLineColor(double r, double g, double b);
318 
322  virtual vtkProperty* GetDistanceAnnotationProperty();
323 
325 
328  vtkGetObjectMacro(TextActor, vtkFollower);
330 
331  enum
332  {
333  RestrictNone = 0,
336  RestrictToZ
337  };
338 
343  VTK_DEPRECATED_IN_9_0_0("Removed in 9.0")
344  void SetRestrictFlag(int restrict_flag);
345 
346 protected:
349 
350  // The handle and the rep used to close the handles
351  vtkPointHandleRepresentation3D* HandleRepresentation;
352  vtkPointHandleRepresentation3D* Point1Representation;
353  vtkPointHandleRepresentation3D* Point2Representation;
354  vtkPointHandleRepresentation3D* LineHandleRepresentation;
355 
356  // Manage how the representation appears
357  int RepresentationState;
358  bool DirectionalLine;
359 
360  // the line
361  vtkActor* LineActor;
362  vtkPolyDataMapper* LineMapper;
363  vtkLineSource* LineSource;
364 
365  // glyphs representing hot spots (e.g., handles)
366  vtkActor** Handle;
367  vtkPolyDataMapper** HandleMapper;
368  vtkPolyDataAlgorithm** HandleGeometry;
369 
370  // Properties used to control the appearance of selected objects and
371  // the manipulator in general.
372  vtkProperty* EndPointProperty;
373  vtkProperty* SelectedEndPointProperty;
374  vtkProperty* EndPoint2Property;
375  vtkProperty* SelectedEndPoint2Property;
376  vtkProperty* LineProperty;
377  vtkProperty* SelectedLineProperty;
378  void CreateDefaultProperties();
379 
380  // Selection tolerance for the handles and the line
381  int Tolerance;
382 
383  // Helper members
384  int ClampToBounds;
385  void ClampPosition(double x[3]);
386  void HighlightPoint(int ptId, int highlight);
387  void HighlightLine(int highlight);
388  int InBounds(double x[3]);
389  void SizeHandles();
390 
391  // Ivars used during widget interaction to hold initial positions
392  double StartP1[3];
393  double StartP2[3];
394  double StartLineHandle[3];
395  double Length;
396  double LastEventPosition[3];
397 
398  // Support GetBounds() method
399  vtkBox* BoundingBox;
400 
401  // Need to keep track if we have successfully initialized the display position.
402  // The widget tends to do stuff in world coordinates, put if the renderer has
403  // not been assigned, then certain operations do not properly update the display
404  // position.
405  int InitializedDisplayPosition;
406 
407  // Format for the label
408  vtkTypeBool DistanceAnnotationVisibility;
409  char* DistanceAnnotationFormat;
410 
411  vtkFollower* TextActor;
412  vtkPolyDataMapper* TextMapper;
413  vtkVectorText* TextInput;
414  double Distance;
415  bool AnnotationTextScaleInitialized;
416 
417  vtkCellPicker* LinePicker;
418 
419 private:
421  void operator=(const vtkLineRepresentation&) = delete;
422 };
423 
424 #endif
vtkPolyDataMapper
map vtkPolyData to graphics primitives
Definition: vtkPolyDataMapper.h:146
vtkLineRepresentation::RestrictToY
@ RestrictToY
Definition: vtkLineRepresentation.h:335
vtkWidgetRepresentation.h
vtkFollower
a subclass of actor that always faces the camera
Definition: vtkFollower.h:120
vtkLineRepresentation::GetDistanceAnnotationScale
virtual double * GetDistanceAnnotationScale()
Scale text (font size along each dimension).
vtkLineRepresentation::SetDistanceAnnotationScale
void SetDistanceAnnotationScale(double x, double y, double z)
Scale text (font size along each dimension).
Definition: vtkLineRepresentation.h:296
vtkX3D::scale
@ scale
Definition: vtkX3D.h:235
vtkPointHandleRepresentation3D
represent the position of a point in 3D space
Definition: vtkPointHandleRepresentation3D.h:41
vtkLineRepresentation::GetMTime
vtkMTimeType GetMTime() override
Overload the superclasses' GetMTime() because internal classes are used to keep the state of the repr...
vtkLineRepresentation::OnP2
@ OnP2
Definition: vtkLineRepresentation.h:223
vtkConeSource
generate polygonal cone
Definition: vtkConeSource.h:148
vtkWidgetRepresentation
abstract class defines interface between the widget and widget representation classes
Definition: vtkWidgetRepresentation.h:60
vtkLineRepresentation::SetRepresentationState
virtual void SetRepresentationState(int)
Sets the visual appearance of the representation based on the state it is in.
vtkLineRepresentation::TranslatingP2
@ TranslatingP2
Definition: vtkLineRepresentation.h:225
vtkLineRepresentation::SetRenderer
void SetRenderer(vtkRenderer *ren) override
Overridden to set the rendererer on the internal representations.
vtkLineRepresentation::GetPoint1WorldPosition
double * GetPoint1WorldPosition()
Methods to Set/Get the coordinates of the two points defining this representation.
vtkVectorText
create polygonal text
Definition: vtkVectorText.h:151
vtkWindow
window superclass for vtkRenderWindow
Definition: vtkWindow.h:39
vtkLineRepresentation::OnLine
@ OnLine
Definition: vtkLineRepresentation.h:226
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:48
vtkBlockSortHelper::GetBounds
void GetBounds(T a, double bds[6])
Definition: vtkBlockSortHelper.h:37
vtkActor
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:155
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:113
VTK_DEPRECATED_IN_9_0_0
#define VTK_DEPRECATED_IN_9_0_0(reason)
Definition: vtkDeprecation.h:126
vtkLineRepresentation::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for the class.
vtkLineSource
create a line defined by two end points
Definition: vtkLineSource.h:170
vtkViewport
abstract specification for Viewports
Definition: vtkViewport.h:47
vtkLineRepresentation::TranslatingP1
@ TranslatingP1
Definition: vtkLineRepresentation.h:224
vtkBox
implicit function for a bounding box
Definition: vtkBox.h:138
vtkDeprecation.h
vtkLineRepresentation::New
static vtkLineRepresentation * New()
Instantiate the class.
vtkLineRepresentation::OnP1
@ OnP1
Definition: vtkLineRepresentation.h:222
vtkLineRepresentation::SetDirectionalLine
void SetDirectionalLine(bool val)
Sets the representation to be a directional line with point 1 represented as a cone.
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:182
vtkLineRepresentation::SetDistanceAnnotationScale
virtual void SetDistanceAnnotationScale(double scale[3])
Scale text (font size along each dimension).
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
vtkLineRepresentation::RestrictToX
@ RestrictToX
Definition: vtkLineRepresentation.h:334
vtkProperty
represent surface properties of a geometric object
Definition: vtkProperty.h:171
vtkLineRepresentation::GetPoint1WorldPosition
void GetPoint1WorldPosition(double pos[3])
Methods to Set/Get the coordinates of the two points defining this representation.
vtkPropCollection
an ordered list of Props
Definition: vtkPropCollection.h:85
vtkCellPicker
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:96
vtkLineRepresentation
a class defining the representation for a vtkLineWidget2
Definition: vtkLineRepresentation.h:79
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkMTimeType
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
vtkPolyDataAlgorithm
Superclass for algorithms that produce only polydata as output.
Definition: vtkPolyDataAlgorithm.h:151