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
|
3 weeks ago
|
/*=========================================================================
|
||
|
|
|
||
|
|
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 "vtkRenderingLabelModule.h" // For export macro
|
||
|
|
#include "vtkObject.h"
|
||
|
|
#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);
|
||
|
|
virtual void PrintSelf( ostream& os, vtkIndent indent );
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 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();
|
||
|
|
virtual ~vtkLabelHierarchyIterator();
|
||
|
|
|
||
|
|
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& ) VTK_DELETE_FUNCTION;
|
||
|
|
void operator = ( const vtkLabelHierarchyIterator& ) VTK_DELETE_FUNCTION;
|
||
|
|
};
|
||
|
|
|
||
|
|
#endif // vtkLabelHierarchyIterator_h
|