You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.4 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkCoincidentPoints.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------*/
/**
* @class vtkCoincidentPoints
* @brief contains an octree of labels
*
*
* This class provides a collection of points that is organized such that
* each coordinate is stored with a set of point id's of points that are
* all coincident.
*/
#ifndef vtkCoincidentPoints_h
#define vtkCoincidentPoints_h
#include "vtkFiltersGeneralModule.h" // For export macro
#include "vtkObject.h"
class vtkIdList;
class vtkPoints;
class VTKFILTERSGENERAL_EXPORT vtkCoincidentPoints : public vtkObject
{
public:
static vtkCoincidentPoints* New();
vtkTypeMacro(vtkCoincidentPoints, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Accumulates a set of Ids in a map where the point coordinate
* is the key. All Ids in a given map entry are thus coincident.
* @param Id - a unique Id for the given \a point that will be stored in an vtkIdList.
* @param[in] point - the point coordinate that we will store in the map to test if any other
* points are coincident with it.
*/
void AddPoint(vtkIdType Id, const double point[3]);
/**
* Retrieve the list of point Ids that are coincident with the given \a point.
* @param[in] point - the coordinate of coincident points we want to retrieve.
*/
vtkIdList* GetCoincidentPointIds(const double point[3]);
/**
* Used to iterate the sets of coincident points within the map.
* InitTraversal must be called first or nullptr will always be returned.
*/
vtkIdList* GetNextCoincidentPointIds();
/**
* Initialize iteration to the beginning of the coincident point map.
*/
void InitTraversal();
/**
* Iterate through all added points and remove any entries that have
* no coincident points (only a single point Id).
*/
void RemoveNonCoincidentPoints();
/**
* Clear the maps for reuse. This should be called if the caller
* might reuse this class (another executive pass for instance).
*/
void Clear();
class implementation;
implementation* GetImplementation() { return this->Implementation; }
/**
* Calculate \a num points, at a regular interval, along a parametric
* spiral. Note this spiral is only in two dimensions having a constant
* z value.
*/
static void SpiralPoints(vtkIdType num, vtkPoints* offsets);
protected:
vtkCoincidentPoints();
~vtkCoincidentPoints() override;
private:
vtkCoincidentPoints(const vtkCoincidentPoints&) = delete;
void operator=(const vtkCoincidentPoints&) = delete;
implementation* Implementation;
friend class implementation;
};
#endif // vtkCoincidentPoints_h