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++
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
|