VTK
vtkContourRepresentation.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkContourRepresentation.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 =========================================================================*/
59 #ifndef vtkContourRepresentation_h
60 #define vtkContourRepresentation_h
61 
62 #include "vtkInteractionWidgetsModule.h" // For export macro
64 #include <vector> // STL Header; Required for vector
65 
68 class vtkPointPlacer;
69 class vtkPolyData;
70 class vtkIdList;
71 
72 //----------------------------------------------------------------------
74 {
75 public:
76  double WorldPosition[3];
78 
79  // The point id. This is blank except in the case of
80  // vtkPolygonalSurfaceContourLineInterpolator
82 };
83 
85 {
86 public:
87  double WorldPosition[3];
88  double WorldOrientation[9];
90  int Selected;
91  std::vector<vtkContourRepresentationPoint*> Points;
92 
93  // The point id. This is blank except in the case of
94  // vtkPolygonalSurfaceContourLineInterpolator
96 };
97 
99 {
100 public:
101  std::vector<vtkContourRepresentationNode*> Nodes;
102  void ClearNodes()
103  {
104  for(unsigned int i=0;i<this->Nodes.size();i++)
105  {
106  for (unsigned int j=0;j<this->Nodes[i]->Points.size();j++)
107  {
108  delete this->Nodes[i]->Points[j];
109  }
110  this->Nodes[i]->Points.clear();
111  delete this->Nodes[i];
112  }
113  this->Nodes.clear();
114  }
115 };
116 
117 class VTKINTERACTIONWIDGETS_EXPORT vtkContourRepresentation : public vtkWidgetRepresentation
118 {
119  friend class vtkContourWidget;
120 public:
122 
126  void PrintSelf(ostream& os, vtkIndent indent) override;
128 
130 
134  virtual int AddNodeAtWorldPosition( double x, double y, double z);
135  virtual int AddNodeAtWorldPosition( double worldPos[3] );
136  virtual int AddNodeAtWorldPosition( double worldPos[3],
137  double worldOrient[9] );
139 
141 
147  virtual int AddNodeAtDisplayPosition( double displayPos[2] );
148  virtual int AddNodeAtDisplayPosition( int displayPos[2] );
149  virtual int AddNodeAtDisplayPosition( int X, int Y );
151 
153 
159  virtual int ActivateNode( double displayPos[2] );
160  virtual int ActivateNode( int displayPos[2] );
161  virtual int ActivateNode( int X, int Y );
163 
164  // Descirption:
165  // Move the active node to a specified world position.
166  // Will return 0 if there is no active node or the node
167  // could not be moved to that position. 1 will be returned
168  // on success.
169  virtual int SetActiveNodeToWorldPosition( double pos[3] );
170  virtual int SetActiveNodeToWorldPosition( double pos[3],
171  double orient[9] );
172 
174 
181  virtual int SetActiveNodeToDisplayPosition( double pos[2] );
182  virtual int SetActiveNodeToDisplayPosition( int pos[2] );
183  virtual int SetActiveNodeToDisplayPosition( int X, int Y );
185 
187 
190  virtual int ToggleActiveNodeSelected();
191  virtual int GetActiveNodeSelected();
192  virtual int GetNthNodeSelected(int);
193  virtual int SetNthNodeSelected(int);
195 
200  virtual int GetActiveNodeWorldPosition( double pos[3] );
201 
206  virtual int GetActiveNodeWorldOrientation( double orient[9] );
207 
212  virtual int GetActiveNodeDisplayPosition( double pos[2] );
213 
217  virtual int GetNumberOfNodes();
218 
224  virtual int GetNthNodeDisplayPosition( int n, double pos[2] );
225 
231  virtual int GetNthNodeWorldPosition( int n, double pos[3] );
232 
236  virtual vtkContourRepresentationNode *GetNthNode(int n);
237 
243  virtual int GetNthNodeWorldOrientation( int n, double orient[9] );
244 
246 
254  virtual int SetNthNodeDisplayPosition( int n, int X, int Y );
255  virtual int SetNthNodeDisplayPosition( int n, int pos[2] );
256  virtual int SetNthNodeDisplayPosition( int n, double pos[2] );
258 
260 
267  virtual int SetNthNodeWorldPosition( int n, double pos[3] );
268  virtual int SetNthNodeWorldPosition( int n, double pos[3],
269  double orient[9] );
271 
277  virtual int GetNthNodeSlope( int idx, double slope[3] );
278 
279  // Descirption:
280  // For a given node n, get the number of intermediate
281  // points between this node and the node at
282  // (n+1). If n is the last node and the loop is
283  // closed, this is the number of intermediate points
284  // between node n and node 0. 0 is returned if n is
285  // out of range.
286  virtual int GetNumberOfIntermediatePoints( int n );
287 
294  virtual int GetIntermediatePointWorldPosition( int n,
295  int idx, double point[3] );
296 
302  virtual int AddIntermediatePointWorldPosition( int n,
303  double point[3] );
304 
311  virtual int AddIntermediatePointWorldPosition( int n,
312  double point[3], vtkIdType ptId );
313 
318  virtual int DeleteLastNode();
319 
324  virtual int DeleteActiveNode();
325 
330  virtual int DeleteNthNode( int n );
331 
335  virtual void ClearAllNodes();
336 
341  virtual int AddNodeOnContour( int X, int Y );
342 
344 
348  vtkSetClampMacro(PixelTolerance,int,1,100);
349  vtkGetMacro(PixelTolerance,int);
351 
353 
357  vtkSetClampMacro(WorldTolerance, double, 0.0, VTK_DOUBLE_MAX);
358  vtkGetMacro(WorldTolerance, double);
360 
361  // Used to communicate about the state of the representation
362  enum {
363  Outside=0,
364  Nearby
365  };
366 
367  enum {
368  Inactive = 0,
371  Scale
372  };
373 
375 
379  vtkGetMacro( CurrentOperation, int );
380  vtkSetClampMacro( CurrentOperation, int,
384  { this->SetCurrentOperation( vtkContourRepresentation::Inactive ); }
386  { this->SetCurrentOperation( vtkContourRepresentation::Translate ); }
388  {this->SetCurrentOperation( vtkContourRepresentation::Shift ); }
390  {this->SetCurrentOperation( vtkContourRepresentation::Scale ); }
392 
393  // Descirption:
394  // Set / get the Point Placer. The point placer is
395  // responsible for converting display coordinates into
396  // world coordinates according to some constraints, and
397  // for validating world positions.
398  void SetPointPlacer( vtkPointPlacer * );
399  vtkGetObjectMacro( PointPlacer, vtkPointPlacer );
400 
402 
407  void SetLineInterpolator( vtkContourLineInterpolator *);
408  vtkGetObjectMacro( LineInterpolator, vtkContourLineInterpolator );
410 
412 
415  void BuildRepresentation() override =0;
416  int ComputeInteractionState(int X, int Y, int modified=0) override =0;
417  void StartWidgetInteraction(double e[2]) override =0;
418  void WidgetInteraction(double e[2]) override =0;
420 
422 
425  void ReleaseGraphicsResources(vtkWindow *w) override =0;
426  int RenderOverlay(vtkViewport *viewport) override =0;
427  int RenderOpaqueGeometry(vtkViewport *viewport) override =0;
428  int RenderTranslucentPolygonalGeometry(vtkViewport *viewport) override =0;
429  int HasTranslucentPolygonalGeometry() override =0;
431 
433 
437  void SetClosedLoop( vtkTypeBool val );
438  vtkGetMacro( ClosedLoop, vtkTypeBool );
439  vtkBooleanMacro( ClosedLoop, vtkTypeBool );
441 
443 
447  virtual void SetShowSelectedNodes(vtkTypeBool);
448  vtkGetMacro( ShowSelectedNodes, vtkTypeBool );
449  vtkBooleanMacro( ShowSelectedNodes, vtkTypeBool );
451 
455  virtual vtkPolyData* GetContourRepresentationAsPolyData() = 0;
456 
461  void GetNodePolyData( vtkPolyData* poly );
462 
463  vtkSetMacro(RebuildLocator,bool);
464 
465 protected:
467  ~vtkContourRepresentation() override;
468 
469  // Selection tolerance for the handles
472 
475 
477 
480 
481  // A flag to indicate whether to show the Selected nodes
483 
485 
486  void AddNodeAtPositionInternal( double worldPos[3],
487  double worldOrient[9], int displayPos[2] );
488  void AddNodeAtPositionInternal( double worldPos[3],
489  double worldOrient[9], double displayPos[2] );
490  void SetNthNodeWorldPositionInternal( int n, double worldPos[3],
491  double worldOrient[9] );
492 
494 
498  void GetRendererComputedDisplayPositionFromWorldPosition( double worldPos[3],
499  double worldOrient[9], int displayPos[2] );
500  void GetRendererComputedDisplayPositionFromWorldPosition( double worldPos[3],
501  double worldOrient[9], double displayPos[2] );
503 
504  virtual void UpdateLines( int index );
505  void UpdateLine( int idx1, int idx2 );
506 
507  virtual int FindClosestPointOnContour( int X, int Y,
508  double worldPos[3],
509  int *idx );
510 
511  virtual void BuildLines()=0;
512 
513  // This method is called when something changes in the point placer.
514  // It will cause all points to be updated, and all lines to be regenerated.
515  // It should be extended to detect changes in the line interpolator too.
516  virtual int UpdateContour();
518 
519  void ComputeMidpoint( double p1[3], double p2[3], double mid[3] )
520  {
521  mid[0] = (p1[0] + p2[0])/2;
522  mid[1] = (p1[1] + p2[1])/2;
523  mid[2] = (p1[2] + p2[2])/2;
524  }
525 
537  virtual void Initialize( vtkPolyData *, vtkIdList *);
538 
543  virtual void Initialize( vtkPolyData *);
544 
549  virtual void InitializeContour( vtkPolyData *, vtkIdList * );
550 
556 
561  void ResetLocator();
562 
563  void BuildLocator();
564 
566 
567 
568 private:
570  void operator=(const vtkContourRepresentation&) = delete;
571 };
572 
573 #endif
574 
std::vector< vtkContourRepresentationNode * > Nodes
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for instances of this class.
std::vector< vtkContourRepresentationPoint * > Points
void SetCurrentOperationToInactive()
Set / get the current operation.
virtual int ComputeInteractionState(int X, int Y, int modify=0)
#define VTK_DOUBLE_MAX
Definition: vtkType.h:167
abstract specification for Viewports
Definition: vtkViewport.h:44
virtual void StartWidgetInteraction(double eventPos[2])
record modification and/or execution time
Definition: vtkTimeStamp.h:32
void SetCurrentOperationToTranslate()
Set / get the current operation.
int vtkIdType
Definition: vtkType.h:345
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
vtkIncrementalOctreePointLocator * Locator
Adding a point locator to the representation to speed up lookup of the active node when dealing with ...
represent the vtkContourWidget
abstract class defines interface between the widget and widget representation classes
virtual void BuildRepresentation()=0
Subclasses of vtkWidgetRepresentation must implement these methods.
void SetCurrentOperationToShift()
Set / get the current operation.
int vtkTypeBool
Definition: vtkABI.h:69
window superclass for vtkRenderWindow
Definition: vtkWindow.h:34
int RenderTranslucentPolygonalGeometry(vtkViewport *vtkNotUsed(viewport)) override
int HasTranslucentPolygonalGeometry() override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THESE METHODS OUTSIDE OF THE RENDE...
a simple class to control print indentation
Definition: vtkIndent.h:33
void ComputeMidpoint(double p1[3], double p2[3], double mid[3])
list of point or cell ids
Definition: vtkIdList.h:30
void ReleaseGraphicsResources(vtkWindow *) override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
Abstract interface to translate 2D display positions to world coordinates.
vtkContourRepresentationInternals * Internal
virtual void WidgetInteraction(double newEventPos[2])
int RenderOpaqueGeometry(vtkViewport *vtkNotUsed(viewport)) override
Defines API for interpolating/modifying nodes from a vtkContourRepresentation.
void SetCurrentOperationToScale()
Set / get the current operation.
int RenderOverlay(vtkViewport *vtkNotUsed(viewport)) override
create a contour with a set of points
vtkContourLineInterpolator * LineInterpolator
virtual void Initialize()
Incremental octree in support of both point location and point insertion.