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 =========================================================================*/
62 #ifndef vtkContourRepresentation_h
63 #define vtkContourRepresentation_h
64 
65 #include "vtkInteractionWidgetsModule.h" // For export macro
67 #include <vector> // STL Header; Required for vector
68 
71 class vtkPointPlacer;
72 class vtkPolyData;
73 class vtkIdList;
74 
75 //----------------------------------------------------------------------
77 {
78 public:
79  double WorldPosition[3];
81 
82  // The point id. This is blank except in the case of
83  // vtkPolygonalSurfaceContourLineInterpolator
85 };
86 
88 {
89 public:
90  double WorldPosition[3];
91  double WorldOrientation[9];
93  int Selected;
94  std::vector<vtkContourRepresentationPoint*> Points;
95 
96  // The point id. This is blank except in the case of
97  // vtkPolygonalSurfaceContourLineInterpolator
99 };
100 
102 {
103 public:
104  std::vector<vtkContourRepresentationNode*> Nodes;
105  void ClearNodes()
106  {
107  for(unsigned int i=0;i<this->Nodes.size();i++)
108  {
109  for (unsigned int j=0;j<this->Nodes[i]->Points.size();j++)
110  {
111  delete this->Nodes[i]->Points[j];
112  }
113  this->Nodes[i]->Points.clear();
114  delete this->Nodes[i];
115  }
116  this->Nodes.clear();
117  }
118 };
119 
120 class VTKINTERACTIONWIDGETS_EXPORT vtkContourRepresentation : public vtkWidgetRepresentation
121 {
122  friend class vtkContourWidget;
123 public:
125 
129  void PrintSelf(ostream& os, vtkIndent indent) override;
131 
133 
137  virtual int AddNodeAtWorldPosition( double x, double y, double z);
138  virtual int AddNodeAtWorldPosition( double worldPos[3] );
139  virtual int AddNodeAtWorldPosition( double worldPos[3],
140  double worldOrient[9] );
142 
144 
150  virtual int AddNodeAtDisplayPosition( double displayPos[2] );
151  virtual int AddNodeAtDisplayPosition( int displayPos[2] );
152  virtual int AddNodeAtDisplayPosition( int X, int Y );
154 
156 
162  virtual int ActivateNode( double displayPos[2] );
163  virtual int ActivateNode( int displayPos[2] );
164  virtual int ActivateNode( int X, int Y );
166 
167  // Description:
168  // Move the active node to a specified world position.
169  // Will return 0 if there is no active node or the node
170  // could not be moved to that position. 1 will be returned
171  // on success.
172  virtual int SetActiveNodeToWorldPosition( double pos[3] );
173  virtual int SetActiveNodeToWorldPosition( double pos[3],
174  double orient[9] );
175 
177 
184  virtual int SetActiveNodeToDisplayPosition( double pos[2] );
185  virtual int SetActiveNodeToDisplayPosition( int pos[2] );
186  virtual int SetActiveNodeToDisplayPosition( int X, int Y );
188 
190 
193  virtual int ToggleActiveNodeSelected();
194  virtual int GetActiveNodeSelected();
195  virtual int GetNthNodeSelected(int);
196  virtual int SetNthNodeSelected(int);
198 
203  virtual int GetActiveNodeWorldPosition( double pos[3] );
204 
209  virtual int GetActiveNodeWorldOrientation( double orient[9] );
210 
215  virtual int GetActiveNodeDisplayPosition( double pos[2] );
216 
220  virtual int GetNumberOfNodes();
221 
227  virtual int GetNthNodeDisplayPosition( int n, double pos[2] );
228 
234  virtual int GetNthNodeWorldPosition( int n, double pos[3] );
235 
239  virtual vtkContourRepresentationNode *GetNthNode(int n);
240 
246  virtual int GetNthNodeWorldOrientation( int n, double orient[9] );
247 
249 
257  virtual int SetNthNodeDisplayPosition( int n, int X, int Y );
258  virtual int SetNthNodeDisplayPosition( int n, int pos[2] );
259  virtual int SetNthNodeDisplayPosition( int n, double pos[2] );
261 
263 
270  virtual int SetNthNodeWorldPosition( int n, double pos[3] );
271  virtual int SetNthNodeWorldPosition( int n, double pos[3],
272  double orient[9] );
274 
280  virtual int GetNthNodeSlope( int idx, double slope[3] );
281 
282  // Description:
283  // For a given node n, get the number of intermediate
284  // points between this node and the node at
285  // (n+1). If n is the last node and the loop is
286  // closed, this is the number of intermediate points
287  // between node n and node 0. 0 is returned if n is
288  // out of range.
289  virtual int GetNumberOfIntermediatePoints( int n );
290 
297  virtual int GetIntermediatePointWorldPosition( int n,
298  int idx, double point[3] );
299 
305  virtual int AddIntermediatePointWorldPosition( int n,
306  double point[3] );
307 
314  virtual int AddIntermediatePointWorldPosition( int n,
315  double point[3], vtkIdType ptId );
316 
321  virtual int DeleteLastNode();
322 
327  virtual int DeleteActiveNode();
328 
333  virtual int DeleteNthNode( int n );
334 
338  virtual void ClearAllNodes();
339 
344  virtual int AddNodeOnContour( int X, int Y );
345 
347 
351  vtkSetClampMacro(PixelTolerance,int,1,100);
352  vtkGetMacro(PixelTolerance,int);
354 
356 
360  vtkSetClampMacro(WorldTolerance, double, 0.0, VTK_DOUBLE_MAX);
361  vtkGetMacro(WorldTolerance, double);
363 
364  // Used to communicate about the state of the representation
365  enum {
366  Outside=0,
367  Nearby
368  };
369 
370  enum {
371  Inactive = 0,
374  Scale
375  };
376 
378 
382  vtkGetMacro( CurrentOperation, int );
383  vtkSetClampMacro( CurrentOperation, int,
387  { this->SetCurrentOperation( vtkContourRepresentation::Inactive ); }
389  { this->SetCurrentOperation( vtkContourRepresentation::Translate ); }
391  {this->SetCurrentOperation( vtkContourRepresentation::Shift ); }
393  {this->SetCurrentOperation( vtkContourRepresentation::Scale ); }
395 
396  // Description:
397  // Set / get the Point Placer. The point placer is
398  // responsible for converting display coordinates into
399  // world coordinates according to some constraints, and
400  // for validating world positions.
401  void SetPointPlacer( vtkPointPlacer * );
402  vtkGetObjectMacro( PointPlacer, vtkPointPlacer );
403 
405 
410  void SetLineInterpolator( vtkContourLineInterpolator *);
411  vtkGetObjectMacro( LineInterpolator, vtkContourLineInterpolator );
413 
415 
418  void BuildRepresentation() override =0;
419  int ComputeInteractionState(int X, int Y, int modified=0) override =0;
420  void StartWidgetInteraction(double e[2]) override =0;
421  void WidgetInteraction(double e[2]) override =0;
423 
425 
428  void ReleaseGraphicsResources(vtkWindow *w) override =0;
429  int RenderOverlay(vtkViewport *viewport) override =0;
430  int RenderOpaqueGeometry(vtkViewport *viewport) override =0;
431  int RenderTranslucentPolygonalGeometry(vtkViewport *viewport) override =0;
434 
436 
440  void SetClosedLoop( vtkTypeBool val );
441  vtkGetMacro( ClosedLoop, vtkTypeBool );
442  vtkBooleanMacro( ClosedLoop, vtkTypeBool );
444 
446 
450  virtual void SetShowSelectedNodes(vtkTypeBool);
451  vtkGetMacro( ShowSelectedNodes, vtkTypeBool );
452  vtkBooleanMacro( ShowSelectedNodes, vtkTypeBool );
454 
458  virtual vtkPolyData* GetContourRepresentationAsPolyData() = 0;
459 
464  void GetNodePolyData( vtkPolyData* poly );
465 
466  vtkSetMacro(RebuildLocator,bool);
467 
468 protected:
470  ~vtkContourRepresentation() override;
471 
472  // Selection tolerance for the handles
475 
478 
480 
483 
484  // A flag to indicate whether to show the Selected nodes
486 
488 
489  void AddNodeAtPositionInternal( double worldPos[3],
490  double worldOrient[9], int displayPos[2] );
491  void AddNodeAtPositionInternal( double worldPos[3],
492  double worldOrient[9], double displayPos[2] );
493  void SetNthNodeWorldPositionInternal( int n, double worldPos[3],
494  double worldOrient[9] );
495 
497 
501  void GetRendererComputedDisplayPositionFromWorldPosition( double worldPos[3],
502  double worldOrient[9], int displayPos[2] );
503  void GetRendererComputedDisplayPositionFromWorldPosition( double worldPos[3],
504  double worldOrient[9], double displayPos[2] );
506 
507  virtual void UpdateLines( int index );
508  void UpdateLine( int idx1, int idx2 );
509 
510  virtual int FindClosestPointOnContour( int X, int Y,
511  double worldPos[3],
512  int *idx );
513 
514  virtual void BuildLines()=0;
515 
516  // This method is called when something changes in the point placer.
517  // It will cause all points to be updated, and all lines to be regenerated.
518  // It should be extended to detect changes in the line interpolator too.
519  virtual int UpdateContour();
521 
522  void ComputeMidpoint( double p1[3], double p2[3], double mid[3] )
523  {
524  mid[0] = (p1[0] + p2[0])/2;
525  mid[1] = (p1[1] + p2[1])/2;
526  mid[2] = (p1[2] + p2[2])/2;
527  }
528 
540  virtual void Initialize( vtkPolyData *, vtkIdList *);
541 
546  virtual void Initialize( vtkPolyData *);
547 
552  virtual void InitializeContour( vtkPolyData *, vtkIdList * );
553 
559 
564  void ResetLocator();
565 
566  void BuildLocator();
567 
569 
570 
571 private:
573  void operator=(const vtkContourRepresentation&) = delete;
574 };
575 
576 #endif
577 
vtkContourRepresentation::SetCurrentOperationToInactive
void SetCurrentOperationToInactive()
Definition: vtkContourRepresentation.h:386
vtkWidgetRepresentation::StartWidgetInteraction
virtual void StartWidgetInteraction(double eventPos[2])
Definition: vtkWidgetRepresentation.h:136
vtkWidgetRepresentation.h
vtkContourRepresentation::ClosedLoop
vtkTypeBool ClosedLoop
Definition: vtkContourRepresentation.h:482
vtkContourRepresentationNode::NormalizedDisplayPosition
double NormalizedDisplayPosition[2]
Definition: vtkContourRepresentation.h:92
vtkPointPlacer
Abstract interface to translate 2D display positions to world coordinates.
Definition: vtkPointPlacer.h:49
vtkIdType
int vtkIdType
Definition: vtkType.h:347
vtkContourRepresentationInternals::ClearNodes
void ClearNodes()
Definition: vtkContourRepresentation.h:105
vtkContourLineInterpolator
Defines API for interpolating/modifying nodes from a vtkContourRepresentation.
Definition: vtkContourLineInterpolator.h:42
vtkContourRepresentationInternals
Definition: vtkContourRepresentation.h:101
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:35
vtkContourRepresentationNode::WorldPosition
double WorldPosition[3]
Definition: vtkContourRepresentation.h:90
vtkContourRepresentation
represent the vtkContourWidget
Definition: vtkContourRepresentation.h:120
vtkWidgetRepresentation
abstract class defines interface between the widget and widget representation classes
Definition: vtkWidgetRepresentation.h:60
vtkContourWidget
create a contour with a set of points
Definition: vtkContourWidget.h:136
vtkContourRepresentation::SetCurrentOperationToShift
void SetCurrentOperationToShift()
Definition: vtkContourRepresentation.h:390
vtkContourRepresentation::ComputeMidpoint
void ComputeMidpoint(double p1[3], double p2[3], double mid[3])
Definition: vtkContourRepresentation.h:522
vtkWidgetRepresentation::BuildRepresentation
virtual void BuildRepresentation()=0
vtkContourRepresentation::ContourBuildTime
vtkTimeStamp ContourBuildTime
Definition: vtkContourRepresentation.h:520
vtkContourWidget::Initialize
virtual void Initialize()
Definition: vtkContourWidget.h:245
vtkWindow
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
vtkContourRepresentationInternals::Nodes
std::vector< vtkContourRepresentationNode * > Nodes
Definition: vtkContourRepresentation.h:104
vtkWidgetRepresentation::RenderTranslucentPolygonalGeometry
int RenderTranslucentPolygonalGeometry(vtkViewport *vtkNotUsed(viewport)) override
Definition: vtkWidgetRepresentation.h:223
vtkWidgetRepresentation::ReleaseGraphicsResources
void ReleaseGraphicsResources(vtkWindow *) override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
Definition: vtkWidgetRepresentation.h:220
vtkContourRepresentationNode::PointId
vtkIdType PointId
Definition: vtkContourRepresentation.h:98
vtkX3D::point
Definition: vtkX3D.h:236
vtkWidgetRepresentation::WidgetInteraction
virtual void WidgetInteraction(double newEventPos[2])
Definition: vtkWidgetRepresentation.h:137
vtkContourRepresentationNode::Points
std::vector< vtkContourRepresentationPoint * > Points
Definition: vtkContourRepresentation.h:94
vtkIncrementalOctreePointLocator
Incremental octree in support of both point location and point insertion.
Definition: vtkIncrementalOctreePointLocator.h:63
vtkContourRepresentation::SetCurrentOperationToTranslate
void SetCurrentOperationToTranslate()
Definition: vtkContourRepresentation.h:388
vtkContourRepresentation::Shift
Definition: vtkContourRepresentation.h:373
vtkContourRepresentation::Locator
vtkIncrementalOctreePointLocator * Locator
Adding a point locator to the representation to speed up lookup of the active node when dealing with ...
Definition: vtkContourRepresentation.h:558
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkContourRepresentation::PixelTolerance
int PixelTolerance
Definition: vtkContourRepresentation.h:473
vtkContourRepresentation::PointPlacer
vtkPointPlacer * PointPlacer
Definition: vtkContourRepresentation.h:476
vtkIdList
list of point or cell ids
Definition: vtkIdList.h:36
vtkContourRepresentationNode::Selected
int Selected
Definition: vtkContourRepresentation.h:93
vtkContourRepresentation::CurrentOperation
int CurrentOperation
Definition: vtkContourRepresentation.h:481
vtkViewport
abstract specification for Viewports
Definition: vtkViewport.h:47
vtkContourRepresentation::RebuildLocator
bool RebuildLocator
Definition: vtkContourRepresentation.h:568
vtkContourRepresentationNode::WorldOrientation
double WorldOrientation[9]
Definition: vtkContourRepresentation.h:91
vtkContourRepresentation::Internal
vtkContourRepresentationInternals * Internal
Definition: vtkContourRepresentation.h:487
vtkContourRepresentation::ShowSelectedNodes
vtkTypeBool ShowSelectedNodes
Definition: vtkContourRepresentation.h:485
vtkContourRepresentationPoint::PointId
vtkIdType PointId
Definition: vtkContourRepresentation.h:84
vtkContourRepresentation::WorldTolerance
double WorldTolerance
Definition: vtkContourRepresentation.h:474
vtkWidgetRepresentation::RenderOverlay
int RenderOverlay(vtkViewport *vtkNotUsed(viewport)) override
Definition: vtkWidgetRepresentation.h:221
vtkWidgetRepresentation::RenderOpaqueGeometry
int RenderOpaqueGeometry(vtkViewport *vtkNotUsed(viewport)) override
Definition: vtkWidgetRepresentation.h:222
vtkContourRepresentation::Scale
Definition: vtkContourRepresentation.h:374
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:85
vtkContourRepresentation::ActiveNode
int ActiveNode
Definition: vtkContourRepresentation.h:479
vtkContourRepresentationNode
Definition: vtkContourRepresentation.h:87
vtkContourRepresentation::Translate
Definition: vtkContourRepresentation.h:372
vtkWidgetRepresentation::HasTranslucentPolygonalGeometry
vtkTypeBool HasTranslucentPolygonalGeometry() override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THESE METHODS OUTSIDE OF THE RENDE...
Definition: vtkWidgetRepresentation.h:225
vtkContourRepresentation::LineInterpolator
vtkContourLineInterpolator * LineInterpolator
Definition: vtkContourRepresentation.h:477
vtkContourRepresentation::SetCurrentOperationToScale
void SetCurrentOperationToScale()
Definition: vtkContourRepresentation.h:392
vtkContourRepresentation::Inactive
Definition: vtkContourRepresentation.h:371
vtkContourRepresentationPoint
Definition: vtkContourRepresentation.h:76
vtkX3D::index
Definition: vtkX3D.h:246
vtkContourRepresentationPoint::WorldPosition
double WorldPosition[3]
Definition: vtkContourRepresentation.h:79
VTK_DOUBLE_MAX
#define VTK_DOUBLE_MAX
Definition: vtkType.h:169
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkWidgetRepresentation::ComputeInteractionState
virtual int ComputeInteractionState(int X, int Y, int modify=0)
vtkContourRepresentationPoint::NormalizedDisplayPosition
double NormalizedDisplayPosition[2]
Definition: vtkContourRepresentation.h:80
vtkWidgetRepresentation::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.