VTK  9.2.6
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 =========================================================================*/
41 #ifndef vtkLineRepresentation_h
42 #define vtkLineRepresentation_h
43 
44 #include "vtkInteractionWidgetsModule.h" // For export macro
46 
47 class vtkActor;
48 class vtkConeSource;
49 class vtkPolyDataMapper;
50 class vtkLineSource;
51 class vtkProperty;
52 class vtkPolyData;
55 class vtkBox;
56 class vtkFollower;
57 class vtkVectorText;
58 class vtkPolyDataMapper;
59 class vtkCellPicker;
60 
61 class VTKINTERACTIONWIDGETS_EXPORT vtkLineRepresentation : public vtkWidgetRepresentation
62 {
63 public:
67  static vtkLineRepresentation* New();
68 
70 
74  void PrintSelf(ostream& os, vtkIndent indent) override;
76 
78 
83  void GetPoint1WorldPosition(double pos[3]);
84  double* GetPoint1WorldPosition() VTK_SIZEHINT(3);
85  void GetPoint1DisplayPosition(double pos[3]);
86  double* GetPoint1DisplayPosition() VTK_SIZEHINT(3);
87  void SetPoint1WorldPosition(double pos[3]);
88  void SetPoint1DisplayPosition(double pos[3]);
89  void GetPoint2DisplayPosition(double pos[3]);
90  double* GetPoint2DisplayPosition() VTK_SIZEHINT(3);
91  void GetPoint2WorldPosition(double pos[3]);
92  double* GetPoint2WorldPosition() VTK_SIZEHINT(3);
93  void SetPoint2WorldPosition(double pos[3]);
94  void SetPoint2DisplayPosition(double pos[3]);
96 
98 
108  void SetHandleRepresentation(vtkPointHandleRepresentation3D* handle);
109  void InstantiateHandleRepresentation();
111 
113 
116  vtkGetObjectMacro(Point1Representation, vtkPointHandleRepresentation3D);
117  vtkGetObjectMacro(Point2Representation, vtkPointHandleRepresentation3D);
118  vtkGetObjectMacro(LineHandleRepresentation, vtkPointHandleRepresentation3D);
120 
122 
126  vtkGetObjectMacro(EndPointProperty, vtkProperty);
127  vtkGetObjectMacro(SelectedEndPointProperty, vtkProperty);
129 
131 
135  vtkGetObjectMacro(EndPoint2Property, vtkProperty);
136  vtkGetObjectMacro(SelectedEndPoint2Property, vtkProperty);
138 
140 
144  vtkGetObjectMacro(LineProperty, vtkProperty);
145  vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
147 
149 
154  vtkSetClampMacro(Tolerance, int, 1, 100);
155  vtkGetMacro(Tolerance, int);
157 
159 
164  void SetResolution(int res);
165  int GetResolution();
167 
176  void GetPolyData(vtkPolyData* pd);
177 
179 
182  void PlaceWidget(double bounds[6]) override;
183  void BuildRepresentation() override;
184  int ComputeInteractionState(int X, int Y, int modify = 0) override;
185  void StartWidgetInteraction(double e[2]) override;
186  void WidgetInteraction(double e[2]) override;
187  double* GetBounds() VTK_SIZEHINT(6) override;
189 
191 
194  void GetActors(vtkPropCollection* pc) override;
195  void ReleaseGraphicsResources(vtkWindow*) override;
196  int RenderOpaqueGeometry(vtkViewport*) override;
197  int RenderTranslucentPolygonalGeometry(vtkViewport*) override;
198  vtkTypeBool HasTranslucentPolygonalGeometry() override;
200 
201  // Manage the state of the widget
202  enum
203  {
204  Outside = 0,
210  Scaling
211  };
212 
214 
223  vtkSetClampMacro(InteractionState, int, Outside, Scaling);
225 
227 
231  virtual void SetRepresentationState(int);
232  vtkGetMacro(RepresentationState, int);
234 
236 
240  void SetDirectionalLine(bool val);
241  vtkGetMacro(DirectionalLine, bool);
242  vtkBooleanMacro(DirectionalLine, bool);
244 
249  vtkMTimeType GetMTime() override;
250 
254  void SetRenderer(vtkRenderer* ren) override;
255 
257 
260  vtkSetMacro(DistanceAnnotationVisibility, vtkTypeBool);
261  vtkGetMacro(DistanceAnnotationVisibility, vtkTypeBool);
262  vtkBooleanMacro(DistanceAnnotationVisibility, vtkTypeBool);
264 
266 
271  vtkSetStringMacro(DistanceAnnotationFormat);
272  vtkGetStringMacro(DistanceAnnotationFormat);
274 
276 
279  void SetDistanceAnnotationScale(double x, double y, double z)
280  {
281  double scale[3];
282  scale[0] = x;
283  scale[1] = y;
284  scale[2] = z;
285  this->SetDistanceAnnotationScale(scale);
286  }
287  virtual void SetDistanceAnnotationScale(double scale[3]);
288  virtual double* GetDistanceAnnotationScale() VTK_SIZEHINT(3);
290 
294  double GetDistance();
295 
300  void SetLineColor(double r, double g, double b);
301 
305  virtual vtkProperty* GetDistanceAnnotationProperty();
306 
308 
311  vtkGetObjectMacro(TextActor, vtkFollower);
313 
314  enum
315  {
316  RestrictNone = 0,
319  RestrictToZ
320  };
321 
322 protected:
324  ~vtkLineRepresentation() override;
325 
326  // The handle and the rep used to close the handles
331 
332  // Manage how the representation appears
335 
336  // the line
340 
341  // glyphs representing hot spots (e.g., handles)
345 
346  // Properties used to control the appearance of selected objects and
347  // the manipulator in general.
354  void CreateDefaultProperties();
355 
356  // Selection tolerance for the handles and the line
358 
359  // Helper members
361  void ClampPosition(double x[3]);
362  void HighlightPoint(int ptId, int highlight);
363  void HighlightLine(int highlight);
364  int InBounds(double x[3]);
365  void SizeHandles();
366 
367  // Ivars used during widget interaction to hold initial positions
368  double StartP1[3];
369  double StartP2[3];
370  double StartLineHandle[3];
371  double Length;
372  double LastEventPosition[3];
373 
374  // Support GetBounds() method
376 
377  // Need to keep track if we have successfully initialized the display position.
378  // The widget tends to do stuff in world coordinates, put if the renderer has
379  // not been assigned, then certain operations do not properly update the display
380  // position.
382 
383  // Format for the label
386 
390  double Distance;
392 
394 
395 private:
397  void operator=(const vtkLineRepresentation&) = delete;
398 };
399 
400 #endif
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for instances of this class.
vtkTypeBool DistanceAnnotationVisibility
void GetBounds(T a, double bds[6])
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:51
represent the position of a point in 3D space
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
abstract specification for Viewports
Definition: vtkViewport.h:55
represent surface properties of a geometric object
Definition: vtkProperty.h:67
vtkPointHandleRepresentation3D * Point2Representation
virtual void SetRenderer(vtkRenderer *ren)
Subclasses of vtkWidgetRepresentation must implement these methods.
vtkPolyDataMapper ** HandleMapper
void SetDistanceAnnotationScale(double x, double y, double z)
Scale text (font size along each dimension).
vtkProperty * SelectedEndPoint2Property
vtkProperty * SelectedEndPointProperty
abstract specification for renderers
Definition: vtkRenderer.h:72
generate polygonal cone
Definition: vtkConeSource.h:44
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:90
vtkPolyDataMapper * TextMapper
abstract class defines interface between the widget and widget representation classes ...
an ordered list of Props
vtkPointHandleRepresentation3D * Point1Representation
int vtkTypeBool
Definition: vtkABI.h:69
window superclass for vtkRenderWindow
Definition: vtkWindow.h:38
vtkPointHandleRepresentation3D * HandleRepresentation
vtkPolyDataAlgorithm ** HandleGeometry
Superclass for algorithms that produce only polydata as output.
a simple class to control print indentation
Definition: vtkIndent.h:39
virtual vtkMTimeType GetMTime()
Return this object's modified time.
vtkPolyDataMapper * LineMapper
#define VTK_SIZEHINT(...)
create a line defined by two end points
Definition: vtkLineSource.h:63
map vtkPolyData to graphics primitives
a subclass of actor that always faces the camera
Definition: vtkFollower.h:43
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:72
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
vtkPointHandleRepresentation3D * LineHandleRepresentation
implicit function for a bounding box
Definition: vtkBox.h:41
a class defining the representation for a vtkLineWidget2
create polygonal text
Definition: vtkVectorText.h:47