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.

174 lines
4.8 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkLabelHierarchyIterator.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 vtkLabelHierarchyIterator
* @brief iterator over vtkLabelHierarchy
*
*
* Abstract superclass for iterators over vtkLabelHierarchy.
*/
#ifndef vtkLabelHierarchyIterator_h
#define vtkLabelHierarchyIterator_h
#include "vtkObject.h"
#include "vtkRenderingLabelModule.h" // For export macro
#include "vtkStdString.h" // for std string
#include "vtkUnicodeString.h" // for unicode string
class vtkIdTypeArray;
class vtkLabelHierarchy;
class vtkPolyData;
class VTKRENDERINGLABEL_EXPORT vtkLabelHierarchyIterator : public vtkObject
{
public:
vtkTypeMacro(vtkLabelHierarchyIterator, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Initializes the iterator. lastLabels is an array holding labels
* which should be traversed before any other labels in the hierarchy.
* This could include labels placed during a previous rendering or
* a label located under the mouse pointer. You may pass a null pointer.
*/
virtual void Begin(vtkIdTypeArray*) {}
/**
* Advance the iterator.
*/
virtual void Next() {}
/**
* Returns true if the iterator is at the end.
*/
virtual bool IsAtEnd() { return true; }
/**
* Retrieves the current label location.
*/
virtual void GetPoint(double x[3]);
/**
* Retrieves the current label size.
*/
virtual void GetSize(double sz[2]);
/**
* Retrieves the current label maximum width in world coordinates.
*/
virtual void GetBoundedSize(double sz[2]);
/**
* Retrieves the current label type.
*/
virtual int GetType();
/**
* Retrieves the current label string.
*/
virtual vtkStdString GetLabel();
/**
* Retrieves the current label as a unicode string.
*/
virtual vtkUnicodeString GetUnicodeLabel();
/**
* Retrieves the current label orientation.
*/
virtual double GetOrientation();
/**
* Retrieves the current label id.
*/
virtual vtkIdType GetLabelId() { return -1; }
//@{
/**
* Get the label hierarchy associated with the current label.
*/
vtkGetObjectMacro(Hierarchy, vtkLabelHierarchy);
//@}
/**
* Sets a polydata to fill with geometry representing
* the bounding boxes of the traversed octree nodes.
*/
virtual void SetTraversedBounds(vtkPolyData*);
/**
* Retrieve the coordinates of the center of the current hierarchy node
* and the size of the node.
* Nodes are n-cubes, so the size is the length of any edge of the cube.
* This is used by BoxNode().
*/
virtual void GetNodeGeometry(double ctr[3], double& size) = 0;
/**
* Add a representation to TraversedBounds for the current octree node.
* This should be called by subclasses inside Next().
* Does nothing if TraversedBounds is NULL.
*/
virtual void BoxNode();
/**
* Add a representation for all existing octree nodes to the specified polydata.
* This is equivalent to setting TraversedBounds, iterating over the entire hierarchy,
* and then resetting TraversedBounds to its original value.
*/
virtual void BoxAllNodes(vtkPolyData*);
//@{
/**
* Set/get whether all nodes in the hierarchy should be added to the TraversedBounds
* polydata or only those traversed.
* When non-zero, all nodes will be added.
* By default, AllBounds is 0.
*/
vtkSetMacro(AllBounds, int);
vtkGetMacro(AllBounds, int);
//@}
protected:
vtkLabelHierarchyIterator();
~vtkLabelHierarchyIterator() override;
void BoxNodeInternal3(const double* ctr, double sz);
void BoxNodeInternal2(const double* ctr, double sz);
/**
* The hierarchy being traversed by this iterator.
*/
virtual void SetHierarchy(vtkLabelHierarchy* h);
vtkLabelHierarchy* Hierarchy;
vtkPolyData* TraversedBounds;
double BoundsFactor;
int AllBounds;
int AllBoundsRecorded;
private:
vtkLabelHierarchyIterator(const vtkLabelHierarchyIterator&) = delete;
void operator=(const vtkLabelHierarchyIterator&) = delete;
};
#endif // vtkLabelHierarchyIterator_h