VTK  9.3.0
vtkContourRepresentation.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
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 
66 VTK_ABI_NAMESPACE_BEGIN
69 class vtkPointPlacer;
70 class vtkPolyData;
71 class vtkIdList;
72 
73 //----------------------------------------------------------------------
75 {
76 public:
77  double WorldPosition[3];
79 
80  // The point id. This is blank except in the case of
81  // vtkPolygonalSurfaceContourLineInterpolator
83 };
84 
86 {
87 public:
88  double WorldPosition[3];
89  double WorldOrientation[9];
91  int Selected;
92  std::vector<vtkContourRepresentationPoint*> Points;
93 
94  // The point id. This is blank except in the case of
95  // vtkPolygonalSurfaceContourLineInterpolator
97 };
98 
100 {
101 public:
102  std::vector<vtkContourRepresentationNode*> Nodes;
103  void ClearNodes()
104  {
105  for (unsigned int i = 0; i < this->Nodes.size(); i++)
106  {
107  for (unsigned int j = 0; j < this->Nodes[i]->Points.size(); j++)
108  {
109  delete this->Nodes[i]->Points[j];
110  }
111  this->Nodes[i]->Points.clear();
112  delete this->Nodes[i];
113  }
114  this->Nodes.clear();
115  }
116 };
117 
118 class VTKINTERACTIONWIDGETS_EXPORT vtkContourRepresentation : public vtkWidgetRepresentation
119 {
120  friend class vtkContourWidget;
121 
122 public:
124 
128  void PrintSelf(ostream& os, vtkIndent indent) override;
130 
132 
136  virtual int AddNodeAtWorldPosition(double x, double y, double z);
137  virtual int AddNodeAtWorldPosition(double worldPos[3]);
138  virtual int AddNodeAtWorldPosition(double worldPos[3], double worldOrient[9]);
140 
142 
148  virtual int AddNodeAtDisplayPosition(double displayPos[2]);
149  virtual int AddNodeAtDisplayPosition(int displayPos[2]);
150  virtual int AddNodeAtDisplayPosition(int X, int Y);
152 
154 
160  virtual int ActivateNode(double displayPos[2]);
161  virtual int ActivateNode(int displayPos[2]);
162  virtual int ActivateNode(int X, int Y);
164 
165  // Description:
166  // Move the active node to a specified world position.
167  // Will return 0 if there is no active node or the node
168  // could not be moved to that position. 1 will be returned
169  // on success.
170  virtual int SetActiveNodeToWorldPosition(double pos[3]);
171  virtual int SetActiveNodeToWorldPosition(double pos[3], 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 
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 
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], double orient[9]);
270 
276  virtual int GetNthNodeSlope(int idx, double slope[3]);
277 
278  // Description:
279  // For a given node n, get the number of intermediate
280  // points between this node and the node at
281  // (n+1). If n is the last node and the loop is
282  // closed, this is the number of intermediate points
283  // between node n and node 0. 0 is returned if n is
284  // out of range.
285  virtual int GetNumberOfIntermediatePoints(int n);
286 
293  virtual int GetIntermediatePointWorldPosition(int n, int idx, double point[3]);
294 
300  virtual int AddIntermediatePointWorldPosition(int n, double point[3]);
301 
308  virtual int AddIntermediatePointWorldPosition(int n, double point[3], vtkIdType ptId);
309 
314  virtual int DeleteLastNode();
315 
320  virtual int DeleteActiveNode();
321 
326  virtual int DeleteNthNode(int n);
327 
331  virtual void ClearAllNodes();
332 
337  virtual int AddNodeOnContour(int X, int Y);
338 
340 
344  vtkSetClampMacro(PixelTolerance, int, 1, 100);
345  vtkGetMacro(PixelTolerance, int);
347 
349 
353  vtkSetClampMacro(WorldTolerance, double, 0.0, VTK_DOUBLE_MAX);
354  vtkGetMacro(WorldTolerance, double);
356 
357  // Used to communicate about the state of the representation
358  enum
359  {
360  Outside = 0,
361  Nearby
362  };
363 
364  enum
365  {
366  Inactive = 0,
369  Scale
370  };
371 
373 
377  vtkGetMacro(CurrentOperation, int);
378  vtkSetClampMacro(
381  {
382  this->SetCurrentOperation(vtkContourRepresentation::Inactive);
383  }
385  {
386  this->SetCurrentOperation(vtkContourRepresentation::Translate);
387  }
388  void SetCurrentOperationToShift() { this->SetCurrentOperation(vtkContourRepresentation::Shift); }
389  void SetCurrentOperationToScale() { this->SetCurrentOperation(vtkContourRepresentation::Scale); }
391 
392  // Description:
393  // Set / get the Point Placer. The point placer is
394  // responsible for converting display coordinates into
395  // world coordinates according to some constraints, and
396  // for validating world positions.
398  vtkGetObjectMacro(PointPlacer, vtkPointPlacer);
399 
401 
407  vtkGetObjectMacro(LineInterpolator, vtkContourLineInterpolator);
409 
411 
414  void BuildRepresentation() override = 0;
415  int ComputeInteractionState(int X, int Y, int modified = 0) override = 0;
416  void StartWidgetInteraction(double e[2]) override = 0;
417  void WidgetInteraction(double e[2]) override = 0;
419 
421 
424  void ReleaseGraphicsResources(vtkWindow* w) override = 0;
425  int RenderOverlay(vtkViewport* viewport) override = 0;
426  int RenderOpaqueGeometry(vtkViewport* viewport) override = 0;
427  int RenderTranslucentPolygonalGeometry(vtkViewport* viewport) override = 0;
430 
432 
437  vtkGetMacro(ClosedLoop, vtkTypeBool);
438  vtkBooleanMacro(ClosedLoop, vtkTypeBool);
440 
442 
447  vtkGetMacro(ShowSelectedNodes, vtkTypeBool);
448  vtkBooleanMacro(ShowSelectedNodes, vtkTypeBool);
450 
455 
461 
462  vtkSetMacro(RebuildLocator, bool);
463 
464 protected:
467 
468  // Selection tolerance for the handles
471 
474 
476 
479 
480  // A flag to indicate whether to show the Selected nodes
482 
484 
485  void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], int displayPos[2]);
486  void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], double displayPos[2]);
487  void SetNthNodeWorldPositionInternal(int n, double worldPos[3], double worldOrient[9]);
488 
490 
495  double worldPos[3], double worldOrient[9], int displayPos[2]);
497  double worldPos[3], double worldOrient[9], double displayPos[2]);
499 
500  virtual void UpdateLines(int index);
501  void UpdateLine(int idx1, int idx2);
502 
503  virtual int FindClosestPointOnContour(int X, int Y, double worldPos[3], int* idx);
504 
505  virtual void BuildLines() = 0;
506 
507  // This method is called when something changes in the point placer.
508  // It will cause all points to be updated, and all lines to be regenerated.
509  // It should be extended to detect changes in the line interpolator too.
510  virtual int UpdateContour();
512 
513  void ComputeMidpoint(double p1[3], double p2[3], double mid[3])
514  {
515  mid[0] = (p1[0] + p2[0]) / 2;
516  mid[1] = (p1[1] + p2[1]) / 2;
517  mid[2] = (p1[2] + p2[2]) / 2;
518  }
519 
531  virtual void Initialize(vtkPolyData*, vtkIdList*);
532 
537  virtual void Initialize(vtkPolyData*);
538 
544 
550 
555  void ResetLocator();
556 
557  void BuildLocator();
558 
560 
561 private:
563  void operator=(const vtkContourRepresentation&) = delete;
564 };
565 
566 VTK_ABI_NAMESPACE_END
567 #endif
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)
Add a node at a specific display position.
void StartWidgetInteraction(double e[2]) override=0
These are methods that satisfy vtkWidgetRepresentation's API.
virtual int AddNodeAtDisplayPosition(double displayPos[2])
Add a node at a specific display position.
void SetClosedLoop(vtkTypeBool val)
Set / Get the ClosedLoop value.
vtkContourRepresentationInternals * Internal
void PrintSelf(ostream &os, vtkIndent indent) override
Standard VTK methods.
void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], double displayPos[2])
void WidgetInteraction(double e[2]) override=0
These are methods that satisfy vtkWidgetRepresentation's API.
void SetCurrentOperationToTranslate()
Set / get the current operation.
void SetCurrentOperationToInactive()
Set / get the current operation.
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])
Set the nth node's world position.
virtual int GetNthNodeSlope(int idx, double slope[3])
Get the nth node's slope.
void GetNodePolyData(vtkPolyData *poly)
Get the nodes and not the intermediate points in this contour as a vtkPolyData.
virtual int UpdateContour()
virtual int GetNumberOfIntermediatePoints(int n)
void SetCurrentOperationToScale()
Set / get the current operation.
vtkIncrementalOctreePointLocator * Locator
Adding a point locator to the representation to speed up lookup of the active node when dealing with ...
virtual int GetActiveNodeSelected()
Set/Get whether the active or nth node is selected.
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)
Move the active node based on a specified display position.
void ReleaseGraphicsResources(vtkWindow *w) override=0
Methods required by vtkProp superclass.
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)
void BuildRepresentation() override=0
These are methods that satisfy vtkWidgetRepresentation's API.
virtual vtkPolyData * GetContourRepresentationAsPolyData()=0
Get the points in this contour as a vtkPolyData.
void UpdateLine(int idx1, int idx2)
void SetPointPlacer(vtkPointPlacer *)
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 nullptr to maintain backwards comp...
void SetLineInterpolator(vtkContourLineInterpolator *)
Set / Get the Line Interpolator.
virtual int SetNthNodeSelected(int)
Set/Get whether the active or nth node is selected.
int RenderOverlay(vtkViewport *viewport) override=0
Methods required by vtkProp superclass.
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)
vtkTypeBool HasTranslucentPolygonalGeometry() override=0
Methods required by vtkProp superclass.
int ComputeInteractionState(int X, int Y, int modified=0) override=0
These are methods that satisfy vtkWidgetRepresentation's API.
virtual int AddNodeAtWorldPosition(double worldPos[3])
Add a node at a specific world position.
void SetCurrentOperationToShift()
Set / get the current operation.
void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], int displayPos[2])
int RenderTranslucentPolygonalGeometry(vtkViewport *viewport) override=0
Methods required by vtkProp superclass.
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])
Set the nth node's display position.
virtual int GetNthNodeWorldOrientation(int n, double orient[9])
Get the nth node's world orientation.
virtual int ActivateNode(int displayPos[2])
Given a display position, activate a node.
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.
~vtkContourRepresentation() override
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 int GetNthNodeWorldPosition(int n, double pos[3])
Get the nth node's world position.
virtual void SetShowSelectedNodes(vtkTypeBool)
A flag to indicate whether to show the Selected nodes Default is to set it to false.
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])
Given a world position and orientation, this computes the display position using the renderer of this...
virtual int ActivateNode(int X, int Y)
Given a display position, activate a node.
int RenderOpaqueGeometry(vtkViewport *viewport) override=0
Methods required by vtkProp superclass.
virtual int SetNthNodeDisplayPosition(int n, double pos[2])
Set the nth node's display position.
virtual int GetNumberOfNodes()
Get the number of nodes.
virtual int SetActiveNodeToDisplayPosition(int pos[2])
Move the active node based on a specified display position.
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 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])
Add a node at a specific display position.
virtual void Initialize(vtkPolyData *, vtkIdList *)
Build a contour representation from externally supplied PolyData.
virtual int GetNthNodeSelected(int)
Set/Get whether the active or nth node is selected.
vtkContourLineInterpolator * LineInterpolator
virtual int SetActiveNodeToWorldPosition(double pos[3], double orient[9])
virtual int AddNodeAtWorldPosition(double worldPos[3], double worldOrient[9])
Add a node at a specific world position.
create a contour with a set of points
list of point or cell ids
Definition: vtkIdList.h:32
Incremental octree in support of both point location and point insertion.
a simple class to control print indentation
Definition: vtkIndent.h:38
Abstract interface to translate 2D display positions to world coordinates.
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:89
record modification and/or execution time
Definition: vtkTimeStamp.h:34
abstract specification for Viewports
Definition: vtkViewport.h:54
abstract class defines interface between the widget and widget representation classes
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
@ point
Definition: vtkX3D.h:236
@ index
Definition: vtkX3D.h:246
int vtkTypeBool
Definition: vtkABI.h:64
int vtkIdType
Definition: vtkType.h:315
#define VTK_DOUBLE_MAX
Definition: vtkType.h:154