VTK  9.4.20241226
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
69#ifndef vtkContourRepresentation_h
70#define vtkContourRepresentation_h
71
72#include "vtkInteractionWidgetsModule.h" // For export macro
74#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
75#include <vector> // STL Header; Required for vector
76
77VTK_ABI_NAMESPACE_BEGIN
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 VTK_MARSHALAUTO vtkContourRepresentation
131{
132 friend class vtkContourWidget;
133
134public:
136
140 void PrintSelf(ostream& os, vtkIndent indent) override;
142
144
148 virtual int AddNodeAtWorldPosition(double x, double y, double z);
149 virtual int AddNodeAtWorldPosition(double worldPos[3]);
150 virtual int AddNodeAtWorldPosition(double worldPos[3], double worldOrient[9]);
152
154
160 virtual int AddNodeAtDisplayPosition(double displayPos[2]);
161 virtual int AddNodeAtDisplayPosition(int displayPos[2]);
162 virtual int AddNodeAtDisplayPosition(int X, int Y);
164
166
172 virtual int ActivateNode(double displayPos[2]);
173 virtual int ActivateNode(int displayPos[2]);
174 virtual int ActivateNode(int X, int Y);
176
177 // Description:
178 // Move the active node to a specified world position.
179 // Will return 0 if there is no active node or the node
180 // could not be moved to that position. 1 will be returned
181 // on success.
182 virtual int SetActiveNodeToWorldPosition(double pos[3]);
183 virtual int SetActiveNodeToWorldPosition(double pos[3], double orient[9]);
184
186
193 virtual int SetActiveNodeToDisplayPosition(double pos[2]);
194 virtual int SetActiveNodeToDisplayPosition(int pos[2]);
195 virtual int SetActiveNodeToDisplayPosition(int X, int Y);
197
199
204 virtual int GetNthNodeSelected(int);
205 virtual int SetNthNodeSelected(int);
207
212 virtual int GetActiveNodeWorldPosition(double pos[3]);
213
218 virtual int GetActiveNodeWorldOrientation(double orient[9]);
219
224 virtual int GetActiveNodeDisplayPosition(double pos[2]);
225
229 virtual int GetNumberOfNodes();
230
236 virtual int GetNthNodeDisplayPosition(int n, double pos[2]);
237
243 virtual int GetNthNodeWorldPosition(int n, double pos[3]);
244
249
255 virtual int GetNthNodeWorldOrientation(int n, double orient[9]);
256
258
266 virtual int SetNthNodeDisplayPosition(int n, int X, int Y);
267 virtual int SetNthNodeDisplayPosition(int n, int pos[2]);
268 virtual int SetNthNodeDisplayPosition(int n, double pos[2]);
270
272
279 virtual int SetNthNodeWorldPosition(int n, double pos[3]);
280 virtual int SetNthNodeWorldPosition(int n, double pos[3], double orient[9]);
282
288 virtual int GetNthNodeSlope(int idx, double slope[3]);
289
290 // Description:
291 // For a given node n, get the number of intermediate
292 // points between this node and the node at
293 // (n+1). If n is the last node and the loop is
294 // closed, this is the number of intermediate points
295 // between node n and node 0. 0 is returned if n is
296 // out of range.
298
305 virtual int GetIntermediatePointWorldPosition(int n, int idx, double point[3]);
306
312 virtual int AddIntermediatePointWorldPosition(int n, double point[3]);
313
320 virtual int AddIntermediatePointWorldPosition(int n, double point[3], vtkIdType ptId);
321
326 virtual int DeleteLastNode();
327
332 virtual int DeleteActiveNode();
333
338 virtual int DeleteNthNode(int n);
339
343 virtual void ClearAllNodes();
344
349 virtual int AddNodeOnContour(int X, int Y);
350
352
356 vtkSetClampMacro(PixelTolerance, int, 1, 100);
357 vtkGetMacro(PixelTolerance, int);
359
361
365 vtkSetClampMacro(WorldTolerance, double, 0.0, VTK_DOUBLE_MAX);
366 vtkGetMacro(WorldTolerance, double);
368
369 // Used to communicate about the state of the representation
370 enum
371 {
372 Outside = 0,
373 Nearby
374 };
375
376 enum
377 {
378 Inactive = 0,
381 Scale
382 };
383
385
389 vtkGetMacro(CurrentOperation, int);
390 vtkSetClampMacro(
393 {
394 this->SetCurrentOperation(vtkContourRepresentation::Inactive);
395 }
397 {
398 this->SetCurrentOperation(vtkContourRepresentation::Translate);
399 }
400 void SetCurrentOperationToShift() { this->SetCurrentOperation(vtkContourRepresentation::Shift); }
401 void SetCurrentOperationToScale() { this->SetCurrentOperation(vtkContourRepresentation::Scale); }
403
404 // Description:
405 // Set / get the Point Placer. The point placer is
406 // responsible for converting display coordinates into
407 // world coordinates according to some constraints, and
408 // for validating world positions.
410 vtkGetObjectMacro(PointPlacer, vtkPointPlacer);
411
413
419 vtkGetObjectMacro(LineInterpolator, vtkContourLineInterpolator);
421
423
426 void BuildRepresentation() override = 0;
427 int ComputeInteractionState(int X, int Y, int modified = 0) override = 0;
428 void StartWidgetInteraction(double e[2]) override = 0;
429 void WidgetInteraction(double e[2]) override = 0;
431
433
436 void ReleaseGraphicsResources(vtkWindow* w) override = 0;
437 int RenderOverlay(vtkViewport* viewport) override = 0;
438 int RenderOpaqueGeometry(vtkViewport* viewport) override = 0;
442
444
449 vtkGetMacro(ClosedLoop, vtkTypeBool);
450 vtkBooleanMacro(ClosedLoop, vtkTypeBool);
452
454
459 vtkGetMacro(ShowSelectedNodes, vtkTypeBool);
460 vtkBooleanMacro(ShowSelectedNodes, vtkTypeBool);
462
467
473
474 vtkSetMacro(RebuildLocator, bool);
475
476protected:
479
480 // Selection tolerance for the handles
483
486
488
491
492 // A flag to indicate whether to show the Selected nodes
494
496
497 void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], int displayPos[2]);
498 void AddNodeAtPositionInternal(double worldPos[3], double worldOrient[9], double displayPos[2]);
499 void SetNthNodeWorldPositionInternal(int n, double worldPos[3], double worldOrient[9]);
500
502
507 double worldPos[3], double worldOrient[9], int displayPos[2]);
509 double worldPos[3], double worldOrient[9], double displayPos[2]);
511
512 virtual void UpdateLines(int index);
513 void UpdateLine(int idx1, int idx2);
514
515 virtual int FindClosestPointOnContour(int X, int Y, double worldPos[3], int* idx);
516
517 virtual void BuildLines() = 0;
518
519 // This method is called when something changes in the point placer.
520 // It will cause all points to be updated, and all lines to be regenerated.
521 // It should be extended to detect changes in the line interpolator too.
522 virtual int UpdateContour();
524
525 void ComputeMidpoint(double p1[3], double p2[3], double mid[3])
526 {
527 mid[0] = (p1[0] + p2[0]) / 2;
528 mid[1] = (p1[1] + p2[1]) / 2;
529 mid[2] = (p1[2] + p2[2]) / 2;
530 }
531
544
549 virtual void Initialize(vtkPolyData*);
550
556
562
568
570
572
573private:
575 void operator=(const vtkContourRepresentation&) = delete;
576};
577
578VTK_ABI_NAMESPACE_END
579#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:133
Incremental octree in support of both point location and point insertion.
a simple class to control print indentation
Definition vtkIndent.h:108
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:64
int vtkIdType
Definition vtkType.h:315
#define VTK_DOUBLE_MAX
Definition vtkType.h:154
#define VTK_MARSHALAUTO