VTK  9.2.6
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=========================================================================*/
71#ifndef vtkContourRepresentation_h
72#define vtkContourRepresentation_h
73
74#include "vtkInteractionWidgetsModule.h" // For export macro
76#include <vector> // STL Header; Required for vector
77
80class vtkPointPlacer;
81class vtkPolyData;
82class vtkIdList;
83
84//----------------------------------------------------------------------
86{
87public:
88 double WorldPosition[3];
90
91 // The point id. This is blank except in the case of
92 // vtkPolygonalSurfaceContourLineInterpolator
94};
95
97{
98public:
99 double WorldPosition[3];
103 std::vector<vtkContourRepresentationPoint*> Points;
104
105 // The point id. This is blank except in the case of
106 // vtkPolygonalSurfaceContourLineInterpolator
108};
109
111{
112public:
113 std::vector<vtkContourRepresentationNode*> Nodes;
115 {
116 for (unsigned int i = 0; i < this->Nodes.size(); i++)
117 {
118 for (unsigned int j = 0; j < this->Nodes[i]->Points.size(); j++)
119 {
120 delete this->Nodes[i]->Points[j];
121 }
122 this->Nodes[i]->Points.clear();
123 delete this->Nodes[i];
124 }
125 this->Nodes.clear();
126 }
127};
128
129class VTKINTERACTIONWIDGETS_EXPORT vtkContourRepresentation : public vtkWidgetRepresentation
130{
131 friend class vtkContourWidget;
132
133public:
135
139 void PrintSelf(ostream& os, vtkIndent indent) override;
141
143
147 virtual int AddNodeAtWorldPosition(double x, double y, double z);
148 virtual int AddNodeAtWorldPosition(double worldPos[3]);
149 virtual int AddNodeAtWorldPosition(double worldPos[3], double worldOrient[9]);
151
153
159 virtual int AddNodeAtDisplayPosition(double displayPos[2]);
160 virtual int AddNodeAtDisplayPosition(int displayPos[2]);
161 virtual int AddNodeAtDisplayPosition(int X, int Y);
163
165
171 virtual int ActivateNode(double displayPos[2]);
172 virtual int ActivateNode(int displayPos[2]);
173 virtual int ActivateNode(int X, int Y);
175
176 // Description:
177 // Move the active node to a specified world position.
178 // Will return 0 if there is no active node or the node
179 // could not be moved to that position. 1 will be returned
180 // on success.
181 virtual int SetActiveNodeToWorldPosition(double pos[3]);
182 virtual int SetActiveNodeToWorldPosition(double pos[3], double orient[9]);
183
185
192 virtual int SetActiveNodeToDisplayPosition(double pos[2]);
193 virtual int SetActiveNodeToDisplayPosition(int pos[2]);
194 virtual int SetActiveNodeToDisplayPosition(int X, int Y);
196
198
203 virtual int GetNthNodeSelected(int);
204 virtual int SetNthNodeSelected(int);
206
211 virtual int GetActiveNodeWorldPosition(double pos[3]);
212
217 virtual int GetActiveNodeWorldOrientation(double orient[9]);
218
223 virtual int GetActiveNodeDisplayPosition(double pos[2]);
224
228 virtual int GetNumberOfNodes();
229
235 virtual int GetNthNodeDisplayPosition(int n, double pos[2]);
236
242 virtual int GetNthNodeWorldPosition(int n, double pos[3]);
243
248
254 virtual int GetNthNodeWorldOrientation(int n, double orient[9]);
255
257
265 virtual int SetNthNodeDisplayPosition(int n, int X, int Y);
266 virtual int SetNthNodeDisplayPosition(int n, int pos[2]);
267 virtual int SetNthNodeDisplayPosition(int n, double pos[2]);
269
271
278 virtual int SetNthNodeWorldPosition(int n, double pos[3]);
279 virtual int SetNthNodeWorldPosition(int n, double pos[3], double orient[9]);
281
287 virtual int GetNthNodeSlope(int idx, double slope[3]);
288
289 // Description:
290 // For a given node n, get the number of intermediate
291 // points between this node and the node at
292 // (n+1). If n is the last node and the loop is
293 // closed, this is the number of intermediate points
294 // between node n and node 0. 0 is returned if n is
295 // out of range.
297
304 virtual int GetIntermediatePointWorldPosition(int n, int idx, double point[3]);
305
311 virtual int AddIntermediatePointWorldPosition(int n, double point[3]);
312
319 virtual int AddIntermediatePointWorldPosition(int n, double point[3], vtkIdType ptId);
320
325 virtual int DeleteLastNode();
326
331 virtual int DeleteActiveNode();
332
337 virtual int DeleteNthNode(int n);
338
342 virtual void ClearAllNodes();
343
348 virtual int AddNodeOnContour(int X, int Y);
349
351
355 vtkSetClampMacro(PixelTolerance, int, 1, 100);
356 vtkGetMacro(PixelTolerance, int);
358
360
364 vtkSetClampMacro(WorldTolerance, double, 0.0, VTK_DOUBLE_MAX);
365 vtkGetMacro(WorldTolerance, double);
367
368 // Used to communicate about the state of the representation
369 enum
370 {
371 Outside = 0,
372 Nearby
373 };
374
375 enum
376 {
377 Inactive = 0,
380 Scale
381 };
382
384
388 vtkGetMacro(CurrentOperation, int);
389 vtkSetClampMacro(
392 {
393 this->SetCurrentOperation(vtkContourRepresentation::Inactive);
394 }
396 {
397 this->SetCurrentOperation(vtkContourRepresentation::Translate);
398 }
399 void SetCurrentOperationToShift() { this->SetCurrentOperation(vtkContourRepresentation::Shift); }
400 void SetCurrentOperationToScale() { this->SetCurrentOperation(vtkContourRepresentation::Scale); }
402
403 // Description:
404 // Set / get the Point Placer. The point placer is
405 // responsible for converting display coordinates into
406 // world coordinates according to some constraints, and
407 // for validating world positions.
409 vtkGetObjectMacro(PointPlacer, vtkPointPlacer);
410
412
418 vtkGetObjectMacro(LineInterpolator, vtkContourLineInterpolator);
420
422
425 void BuildRepresentation() override = 0;
426 int ComputeInteractionState(int X, int Y, int modified = 0) override = 0;
427 void StartWidgetInteraction(double e[2]) override = 0;
428 void WidgetInteraction(double e[2]) override = 0;
430
432
435 void ReleaseGraphicsResources(vtkWindow* w) override = 0;
436 int RenderOverlay(vtkViewport* viewport) override = 0;
437 int RenderOpaqueGeometry(vtkViewport* viewport) override = 0;
441
443
448 vtkGetMacro(ClosedLoop, vtkTypeBool);
449 vtkBooleanMacro(ClosedLoop, vtkTypeBool);
451
453
458 vtkGetMacro(ShowSelectedNodes, vtkTypeBool);
459 vtkBooleanMacro(ShowSelectedNodes, vtkTypeBool);
461
466
472
473 vtkSetMacro(RebuildLocator, bool);
474
475protected:
478
479 // Selection tolerance for the handles
482
485
487
490
491 // A flag to indicate whether to show the Selected nodes
493
495
496 void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], int displayPos[2]);
497 void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], double displayPos[2]);
498 void SetNthNodeWorldPositionInternal(int n, double worldPos[3], double worldOrient[9]);
499
501
506 double worldPos[3], double worldOrient[9], int displayPos[2]);
508 double worldPos[3], double worldOrient[9], double displayPos[2]);
510
511 virtual void UpdateLines(int index);
512 void UpdateLine(int idx1, int idx2);
513
514 virtual int FindClosestPointOnContour(int X, int Y, double worldPos[3], int* idx);
515
516 virtual void BuildLines() = 0;
517
518 // This method is called when something changes in the point placer.
519 // It will cause all points to be updated, and all lines to be regenerated.
520 // It should be extended to detect changes in the line interpolator too.
521 virtual int UpdateContour();
523
524 void ComputeMidpoint(double p1[3], double p2[3], double mid[3])
525 {
526 mid[0] = (p1[0] + p2[0]) / 2;
527 mid[1] = (p1[1] + p2[1]) / 2;
528 mid[2] = (p1[2] + p2[2]) / 2;
529 }
530
543
548 virtual void Initialize(vtkPolyData*);
549
555
561
567
569
571
572private:
574 void operator=(const vtkContourRepresentation&) = delete;
575};
576
577#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 vtkContourRepresentationNode * GetNthNode(int n)
Get the nth node.
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 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.
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.
virtual vtkPolyData * GetContourRepresentationAsPolyData()=0
Get the points in this contour as a vtkPolyData.
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:43
Incremental octree in support of both point location and point insertion.
a simple class to control print indentation
Definition vtkIndent.h:49
Abstract interface to translate 2D display positions to world coordinates.
concrete dataset represents vertices, lines, polygons, and triangle strips
record modification and/or execution time
abstract specification for Viewports
Definition vtkViewport.h:65
abstract class defines interface between the widget and widget representation classes
window superclass for vtkRenderWindow
Definition vtkWindow.h:48
int vtkTypeBool
Definition vtkABI.h:69
int vtkIdType
Definition vtkType.h:332
#define VTK_DOUBLE_MAX
Definition vtkType.h:165