VTK
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 =========================================================================*/
38 #ifndef vtkLineRepresentation_h
39 #define vtkLineRepresentation_h
40 
41 #include "vtkInteractionWidgetsModule.h" // For export macro
43 
44 class vtkActor;
45 class vtkConeSource;
46 class vtkPolyDataMapper;
47 class vtkLineSource;
48 class vtkProperty;
49 class vtkPolyData;
52 class vtkBox;
53 class vtkFollower;
54 class vtkVectorText;
55 class vtkPolyDataMapper;
56 class vtkCellPicker;
57 
58 class VTKINTERACTIONWIDGETS_EXPORT vtkLineRepresentation : public vtkWidgetRepresentation
59 {
60 public:
64  static vtkLineRepresentation *New();
65 
67 
71  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
73 
75 
80  void GetPoint1WorldPosition(double pos[3]);
81  double* GetPoint1WorldPosition();
82  void GetPoint1DisplayPosition(double pos[3]);
83  double* GetPoint1DisplayPosition();
84  void SetPoint1WorldPosition(double pos[3]);
85  void SetPoint1DisplayPosition(double pos[3]);
86  void GetPoint2DisplayPosition(double pos[3]);
87  double* GetPoint2DisplayPosition();
88  void GetPoint2WorldPosition(double pos[3]);
89  double* GetPoint2WorldPosition();
90  void SetPoint2WorldPosition(double pos[3]);
91  void SetPoint2DisplayPosition(double pos[3]);
93 
95 
105  void SetHandleRepresentation(vtkPointHandleRepresentation3D *handle);
106  void InstantiateHandleRepresentation();
108 
110 
113  vtkGetObjectMacro(Point1Representation,vtkPointHandleRepresentation3D);
114  vtkGetObjectMacro(Point2Representation,vtkPointHandleRepresentation3D);
115  vtkGetObjectMacro(LineHandleRepresentation,vtkPointHandleRepresentation3D);
117 
119 
123  vtkGetObjectMacro(EndPointProperty,vtkProperty);
124  vtkGetObjectMacro(SelectedEndPointProperty,vtkProperty);
126 
128 
132  vtkGetObjectMacro(EndPoint2Property,vtkProperty);
133  vtkGetObjectMacro(SelectedEndPoint2Property,vtkProperty);
135 
137 
141  vtkGetObjectMacro(LineProperty,vtkProperty);
142  vtkGetObjectMacro(SelectedLineProperty,vtkProperty);
144 
146 
151  vtkSetClampMacro(Tolerance,int,1,100);
152  vtkGetMacro(Tolerance,int);
154 
156 
161  void SetResolution(int res);
162  int GetResolution();
164 
173  void GetPolyData(vtkPolyData *pd);
174 
176 
179  void PlaceWidget(double bounds[6]) VTK_OVERRIDE;
180  void BuildRepresentation() VTK_OVERRIDE;
181  int ComputeInteractionState(int X, int Y, int modify=0) VTK_OVERRIDE;
182  void StartWidgetInteraction(double e[2]) VTK_OVERRIDE;
183  void WidgetInteraction(double e[2]) VTK_OVERRIDE;
184  double *GetBounds() VTK_OVERRIDE;
186 
188 
191  void GetActors(vtkPropCollection *pc) VTK_OVERRIDE;
192  void ReleaseGraphicsResources(vtkWindow*) VTK_OVERRIDE;
193  int RenderOpaqueGeometry(vtkViewport*) VTK_OVERRIDE;
194  int RenderTranslucentPolygonalGeometry(vtkViewport*) VTK_OVERRIDE;
195  int HasTranslucentPolygonalGeometry() VTK_OVERRIDE;
197 
198  // Manage the state of the widget
199  enum {Outside=0,OnP1,OnP2,TranslatingP1,TranslatingP2,OnLine,Scaling};
200 
202 
211  vtkSetClampMacro(InteractionState,int,Outside,Scaling);
213 
215 
219  virtual void SetRepresentationState(int);
220  vtkGetMacro(RepresentationState, int);
222 
224 
228  void SetDirectionalLine(bool val);
229  vtkGetMacro(DirectionalLine, bool);
230  vtkBooleanMacro(DirectionalLine, bool);
232 
237  vtkMTimeType GetMTime() VTK_OVERRIDE;
238 
242  void SetRenderer(vtkRenderer *ren) VTK_OVERRIDE;
243 
245 
248  vtkSetMacro( DistanceAnnotationVisibility, int );
249  vtkGetMacro( DistanceAnnotationVisibility, int );
250  vtkBooleanMacro( DistanceAnnotationVisibility, int );
252 
254 
259  vtkSetStringMacro(DistanceAnnotationFormat);
260  vtkGetStringMacro(DistanceAnnotationFormat);
262 
264 
267  void SetDistanceAnnotationScale(double x, double y, double z)
268  {
269  double scale[3];
270  scale[0] = x;
271  scale[1] = y;
272  scale[2] = z;
273  this->SetDistanceAnnotationScale(scale);
274  }
275  virtual void SetDistanceAnnotationScale( double scale[3] );
276  virtual double * GetDistanceAnnotationScale();
278 
282  double GetDistance();
283 
284 
289  void SetLineColor(double r, double g, double b);
290 
294  virtual vtkProperty *GetDistanceAnnotationProperty();
295 
297 
300  vtkGetObjectMacro(TextActor, vtkFollower);
302 
303  enum { RestrictNone = 0, RestrictToX, RestrictToY, RestrictToZ };
304 
309  vtkSetClampMacro(RestrictFlag, int, RestrictNone, RestrictToZ);
310 
311 protected:
313  ~vtkLineRepresentation() VTK_OVERRIDE;
314 
315  // The handle and the rep used to close the handles
320 
321  // Manage how the representation appears
324 
325  // the line
329 
330  // glyphs representing hot spots (e.g., handles)
334 
335  // Properties used to control the appearance of selected objects and
336  // the manipulator in general.
343  void CreateDefaultProperties();
344 
345  // Selection tolerance for the handles and the line
347 
348  // Helper members
350  void ClampPosition(double x[3]);
351  void HighlightPoint(int ptId, int highlight);
352  void HighlightLine(int highlight);
353  int InBounds(double x[3]);
354  void SizeHandles();
355 
356  // Ivars used during widget interaction to hold initial positions
357  double StartP1[3];
358  double StartP2[3];
359  double StartLineHandle[3];
360  double Length;
361  double LastEventPosition[3];
362 
363  // Support GetBounds() method
365 
366  // Need to keep track if we have successfully initialized the display position.
367  // The widget tends to do stuff in world coordinates, put if the renderer has
368  // not been assigned, then certain operations do not properly update the display
369  // position.
371 
372  // Format for the label
375 
379  double Distance;
381 
383 
385 
386 private:
387  vtkLineRepresentation(const vtkLineRepresentation&) VTK_DELETE_FUNCTION;
388  void operator=(const vtkLineRepresentation&) VTK_DELETE_FUNCTION;
389 };
390 
391 #endif
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for instances of this class.
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:45
represent the position of a point in 3D space
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:300
abstract specification for Viewports
Definition: vtkViewport.h:44
represent surface properties of a geometric object
Definition: vtkProperty.h:58
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:57
generate polygonal cone
Definition: vtkConeSource.h:38
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
vtkPolyDataMapper * TextMapper
abstract class defines interface between the widget and widget representation classes ...
virtual void BuildRepresentation()=0
Subclasses of vtkWidgetRepresentation must implement these methods.
an ordered list of Props
vtkPointHandleRepresentation3D * Point1Representation
window superclass for vtkRenderWindow
Definition: vtkWindow.h:34
vtkPointHandleRepresentation3D * HandleRepresentation
vtkPolyDataAlgorithm ** HandleGeometry
Superclass for algorithms that produce only polydata as output.
a simple class to control print indentation
Definition: vtkIndent.h:33
virtual vtkMTimeType GetMTime()
Return this object's modified time.
vtkGetStringMacro(ExtensionsString)
Returns a string listing all available extensions.
vtkPolyDataMapper * LineMapper
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
create a line defined by two end points
Definition: vtkLineSource.h:36
map vtkPolyData to graphics primitives
a subclass of actor that always faces the camera
Definition: vtkFollower.h:40
virtual void PlaceWidget(double *vtkNotUsed(bounds[6]))
The following is a suggested API for widget representations.
ray-cast cell picker for all kinds of Prop3Ds
Definition: vtkCellPicker.h:63
vtkBooleanMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
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:38
a class defining the representation for a vtkLineWidget2
create polygonal text
Definition: vtkVectorText.h:41