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);
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  // Descirption:
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 
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 
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  // Descirption:
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 
298  int idx, double point[3] );
299 
306  double point[3] );
307 
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  // Descirption:
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.
402  vtkGetObjectMacro( PointPlacer, vtkPointPlacer );
403 
405 
411  vtkGetObjectMacro( LineInterpolator, vtkContourLineInterpolator );
413 
415 
418  virtual void BuildRepresentation()=0;
419  virtual int ComputeInteractionState(int X, int Y, int modified=0)=0;
420  virtual void StartWidgetInteraction(double e[2])=0;
421  virtual void WidgetInteraction(double e[2])=0;
423 
425 
429  virtual int RenderOverlay(vtkViewport *viewport)=0;
430  virtual int RenderOpaqueGeometry(vtkViewport *viewport)=0;
434 
436 
440  void SetClosedLoop( int val );
441  vtkGetMacro( ClosedLoop, int );
442  vtkBooleanMacro( ClosedLoop, int );
444 
446 
450  virtual void SetShowSelectedNodes(int);
451  vtkGetMacro( ShowSelectedNodes, int );
452  vtkBooleanMacro( ShowSelectedNodes, int );
454 
459 
465 
466  vtkSetMacro(RebuildLocator,bool);
467 
468 protected:
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 
502  double worldOrient[9], int displayPos[2] );
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 
553 
559 
564  void ResetLocator();
565 
566  void BuildLocator();
567 
569 
570 
571 private:
572  vtkContourRepresentation(const vtkContourRepresentation&) VTK_DELETE_FUNCTION;
573  void operator=(const vtkContourRepresentation&) VTK_DELETE_FUNCTION;
574 };
575 
576 #endif
577 
Defines API for interpolating/modifying nodes from a vtkContourRepresentation.
std::vector< vtkContourRepresentationNode * > Nodes
std::vector< vtkContourRepresentationPoint * > Points
represent the vtkContourWidget
virtual int AddNodeAtDisplayPosition(int X, int Y)
virtual int AddNodeAtDisplayPosition(double displayPos[2])
Add a node at a specific display position.
vtkContourRepresentationInternals * Internal
void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], double displayPos[2])
virtual void SetShowSelectedNodes(int)
A flag to indicate whether to show the Selected nodes Default is to set it to false.
virtual int AddNodeOnContour(int X, int Y)
Given a specific X, Y pixel location, add a new node on the contour at this location.
virtual int SetNthNodeWorldPosition(int n, double pos[3], double orient[9])
virtual int GetNthNodeSlope(int idx, double slope[3])
Get the nth node's slope.
virtual int HasTranslucentPolygonalGeometry()=0
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THESE METHODS OUTSIDE OF THE RENDE...
void GetNodePolyData(vtkPolyData *poly)
Get the nodes and not the intermediate points in this contour as a vtkPolyData.
virtual void StartWidgetInteraction(double e[2])=0
virtual int UpdateContour()
virtual int GetNumberOfIntermediatePoints(int n)
vtkIncrementalOctreePointLocator * Locator
Adding a point locator to the representation to speed up lookup of the active node when dealing with ...
virtual int GetActiveNodeSelected()
void SetNthNodeWorldPositionInternal(int n, double worldPos[3], double worldOrient[9])
virtual vtkContourRepresentationNode * GetNthNode(int n)
Get the nth node.
virtual int SetActiveNodeToWorldPosition(double pos[3])
virtual int SetActiveNodeToDisplayPosition(int X, int Y)
void GetRendererComputedDisplayPositionFromWorldPosition(double worldPos[3], double worldOrient[9], int displayPos[2])
Given a world position and orientation, this computes the display position using the renderer of this...
virtual int DeleteNthNode(int n)
Delete the nth node.
virtual int DeleteLastNode()
Delete the last node.
virtual int FindClosestPointOnContour(int X, int Y, double worldPos[3], int *idx)
virtual vtkPolyData * GetContourRepresentationAsPolyData()=0
Get the points in this contour as a vtkPolyData.
void UpdateLine(int idx1, int idx2)
void SetPointPlacer(vtkPointPlacer *)
virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport)=0
virtual int GetIntermediatePointWorldPosition(int n, int idx, double point[3])
Get the world position of the intermediate point at index idx between nodes n and (n+1) (or n and 0 i...
virtual void Initialize(vtkPolyData *)
Overloaded initialize method, that is called when the vtkIdList is NULL to mantain backwards compatib...
void SetLineInterpolator(vtkContourLineInterpolator *)
Set / Get the Line Interpolator.
virtual int SetNthNodeSelected(int)
virtual int RenderOpaqueGeometry(vtkViewport *viewport)=0
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THESE METHODS OUTSIDE OF THE RENDE...
virtual void WidgetInteraction(double e[2])=0
virtual int DeleteActiveNode()
Delete the active node.
virtual void InitializeContour(vtkPolyData *, vtkIdList *)
Internal implementation, delegated to another method, so that users who override the method Initializ...
virtual int GetActiveNodeWorldOrientation(double orient[9])
Get the world orientation of the active node.
virtual void UpdateLines(int index)
virtual int AddNodeAtWorldPosition(double worldPos[3])
void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], int displayPos[2])
virtual int SetNthNodeDisplayPosition(int n, int X, int Y)
Set the nth node's display position.
virtual int SetNthNodeWorldPosition(int n, double pos[3])
Set the nth node's world position.
virtual int SetNthNodeDisplayPosition(int n, int pos[2])
virtual int GetNthNodeWorldOrientation(int n, double orient[9])
Get the nth node's world orientation.
virtual int ActivateNode(int displayPos[2])
virtual int AddNodeAtWorldPosition(double x, double y, double z)
Add a node at a specific world position.
virtual int ToggleActiveNodeSelected()
Set/Get whether the active or nth node is selected.
virtual int GetActiveNodeWorldPosition(double pos[3])
Get the world position of the active node.
virtual int GetActiveNodeDisplayPosition(double pos[2])
Get the display position of the active node.
virtual void ReleaseGraphicsResources(vtkWindow *w)=0
Methods required by vtkProp superclass.
virtual int GetNthNodeWorldPosition(int n, double pos[3])
Get the nth node's world position.
virtual int AddIntermediatePointWorldPosition(int n, double point[3])
Add an intermediate point between node n and n+1 (or n and 0 if n is the last node and the loop is cl...
virtual int ActivateNode(double displayPos[2])
Given a display position, activate a node.
void GetRendererComputedDisplayPositionFromWorldPosition(double worldPos[3], double worldOrient[9], double displayPos[2])
virtual int ActivateNode(int X, int Y)
virtual int SetNthNodeDisplayPosition(int n, double pos[2])
virtual int RenderOverlay(vtkViewport *viewport)=0
virtual int GetNumberOfNodes()
Get the number of nodes.
virtual void BuildRepresentation()=0
These are methods that satisfy vtkWidgetRepresentation's API.
void SetClosedLoop(int val)
Set / Get the ClosedLoop value.
virtual int SetActiveNodeToDisplayPosition(int pos[2])
virtual void ClearAllNodes()
Delete all nodes.
void ComputeMidpoint(double p1[3], double p2[3], double mid[3])
virtual void BuildLines()=0
void ResetLocator()
Deletes the previous locator if it exists and creates a new locator.
virtual int ComputeInteractionState(int X, int Y, int modified=0)=0
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
virtual int AddIntermediatePointWorldPosition(int n, double point[3], vtkIdType ptId)
Add an intermediate point between node n and n+1 (or n and 0 if n is the last node and the loop is cl...
virtual int GetNthNodeDisplayPosition(int n, double pos[2])
Get the nth node's display position.
virtual int SetActiveNodeToDisplayPosition(double pos[2])
Move the active node based on a specified display position.
virtual int AddNodeAtDisplayPosition(int displayPos[2])
virtual void Initialize(vtkPolyData *, vtkIdList *)
Build a contour representation from externally supplied PolyData.
virtual int GetNthNodeSelected(int)
vtkContourLineInterpolator * LineInterpolator
virtual int SetActiveNodeToWorldPosition(double pos[3], double orient[9])
virtual int AddNodeAtWorldPosition(double worldPos[3], double worldOrient[9])
create a contour with a set of points
list of point or cell ids
Definition: vtkIdList.h:37
Incremental octree in support of both point location and point insertion.
a simple class to control print indentation
Definition: vtkIndent.h:40
Abstract interface to translate 2D display positions to world coordinates.
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:86
record modification and/or execution time
Definition: vtkTimeStamp.h:36
abstract specification for Viewports
Definition: vtkViewport.h:48
abstract class defines interface between the widget and widget representation classes
window superclass for vtkRenderWindow
Definition: vtkWindow.h:35
@ point
Definition: vtkX3D.h:236
@ index
Definition: vtkX3D.h:246
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkBooleanMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
int vtkIdType
Definition: vtkType.h:287
#define VTK_DOUBLE_MAX
Definition: vtkType.h:163