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
66VTK_ABI_NAMESPACE_BEGIN
69class vtkPointPlacer;
70class vtkPolyData;
71class vtkIdList;
72
73//----------------------------------------------------------------------
75{
76public:
77 double WorldPosition[3];
79
80 // The point id. This is blank except in the case of
81 // vtkPolygonalSurfaceContourLineInterpolator
83};
84
86{
87public:
88 double WorldPosition[3];
92 std::vector<vtkContourRepresentationPoint*> Points;
93
94 // The point id. This is blank except in the case of
95 // vtkPolygonalSurfaceContourLineInterpolator
97};
98
100{
101public:
102 std::vector<vtkContourRepresentationNode*> Nodes;
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
118class VTKINTERACTIONWIDGETS_EXPORT vtkContourRepresentation : public vtkWidgetRepresentation
119{
120 friend class vtkContourWidget;
121
122public:
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
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.
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;
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
464protected:
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
532
537 virtual void Initialize(vtkPolyData*);
538
544
550
556
558
560
561private:
563 void operator=(const vtkContourRepresentation&) = delete;
564};
565
566VTK_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 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: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
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:34
int vtkTypeBool
Definition vtkABI.h:64
int vtkIdType
Definition vtkType.h:315
#define VTK_DOUBLE_MAX
Definition vtkType.h:154