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.
162 lines
5.1 KiB
C++
162 lines
5.1 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkDataObjectTreeIterator.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.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkDataObjectTreeIterator
|
|
* @brief superclass for composite data iterators
|
|
*
|
|
* vtkDataObjectTreeIterator provides an interface for accessing datasets
|
|
* in a collection (vtkDataObjectTreeIterator).
|
|
*/
|
|
|
|
#ifndef vtkDataObjectTreeIterator_h
|
|
#define vtkDataObjectTreeIterator_h
|
|
|
|
#include "vtkCommonDataModelModule.h" // For export macro
|
|
#include "vtkCompositeDataIterator.h"
|
|
#include "vtkSmartPointer.h" //to store data sets
|
|
|
|
class vtkDataObjectTree;
|
|
class vtkDataObjectTreeInternals;
|
|
class vtkDataObjectTreeIndex;
|
|
class vtkDataObject;
|
|
class vtkInformation;
|
|
|
|
class VTKCOMMONDATAMODEL_EXPORT vtkDataObjectTreeIterator : public vtkCompositeDataIterator
|
|
{
|
|
public:
|
|
static vtkDataObjectTreeIterator* New();
|
|
vtkTypeMacro(vtkDataObjectTreeIterator, vtkCompositeDataIterator);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Move the iterator to the beginning of the collection.
|
|
*/
|
|
void GoToFirstItem() override;
|
|
|
|
/**
|
|
* Move the iterator to the next item in the collection.
|
|
*/
|
|
void GoToNextItem() override;
|
|
|
|
/**
|
|
* Test whether the iterator is finished with the traversal.
|
|
* Returns 1 for yes, and 0 for no.
|
|
* It is safe to call any of the GetCurrent...() methods only when
|
|
* IsDoneWithTraversal() returns 0.
|
|
*/
|
|
int IsDoneWithTraversal() override;
|
|
|
|
/**
|
|
* Returns the current item. Valid only when IsDoneWithTraversal() returns 0.
|
|
*/
|
|
vtkDataObject* GetCurrentDataObject() override;
|
|
|
|
/**
|
|
* Returns the meta-data associated with the current item.
|
|
* Note that, depending on iterator implementation, the returned information
|
|
* is not necessarily stored on the current object. So modifying the information
|
|
* is forbidden.
|
|
*/
|
|
vtkInformation* GetCurrentMetaData() override;
|
|
|
|
/**
|
|
* Returns if the a meta-data information object is present for the current
|
|
* item. Return 1 on success, 0 otherwise.
|
|
*/
|
|
int HasCurrentMetaData() override;
|
|
|
|
/**
|
|
* Flat index is an index obtained by traversing the tree in preorder.
|
|
* This can be used to uniquely identify nodes in the tree.
|
|
* Not valid if IsDoneWithTraversal() returns true.
|
|
*/
|
|
unsigned int GetCurrentFlatIndex() override;
|
|
|
|
//@{
|
|
/**
|
|
* If VisitOnlyLeaves is true, the iterator will only visit nodes
|
|
* (sub-datasets) that are not composite. If it encounters a composite
|
|
* data set, it will automatically traverse that composite dataset until
|
|
* it finds non-composite datasets. With this options, it is possible to
|
|
* visit all non-composite datasets in tree of composite datasets
|
|
* (composite of composite of composite for example :-) ) If
|
|
* VisitOnlyLeaves is false, GetCurrentDataObject() may return
|
|
* vtkCompositeDataSet. By default, VisitOnlyLeaves is 1.
|
|
*/
|
|
vtkSetMacro(VisitOnlyLeaves, vtkTypeBool);
|
|
vtkGetMacro(VisitOnlyLeaves, vtkTypeBool);
|
|
vtkBooleanMacro(VisitOnlyLeaves, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* If TraverseSubTree is set to true, the iterator will visit the entire tree
|
|
* structure, otherwise it only visits the first level children. Set to 1 by
|
|
* default.
|
|
*/
|
|
vtkSetMacro(TraverseSubTree, vtkTypeBool);
|
|
vtkGetMacro(TraverseSubTree, vtkTypeBool);
|
|
vtkBooleanMacro(TraverseSubTree, vtkTypeBool);
|
|
//@}
|
|
|
|
protected:
|
|
vtkDataObjectTreeIterator();
|
|
~vtkDataObjectTreeIterator() override;
|
|
|
|
// Use the macro to ensure MTime is updated:
|
|
vtkSetMacro(CurrentFlatIndex, unsigned int);
|
|
|
|
// Takes the current location to the next dataset. This traverses the tree in
|
|
// preorder fashion.
|
|
// If the current location is a composite dataset, next is its 1st child dataset.
|
|
// If the current is not a composite dataset, then next is the next dataset.
|
|
// This method gives no guarantees whether the current dataset will be
|
|
// non-null or leaf.
|
|
void NextInternal();
|
|
|
|
/**
|
|
* Returns the index for the current data object.
|
|
*/
|
|
vtkDataObjectTreeIndex GetCurrentIndex();
|
|
|
|
// Needs access to GetCurrentIndex().
|
|
friend class vtkDataObjectTree;
|
|
friend class vtkMultiDataSetInternal;
|
|
|
|
unsigned int CurrentFlatIndex;
|
|
|
|
private:
|
|
vtkDataObjectTreeIterator(const vtkDataObjectTreeIterator&) = delete;
|
|
void operator=(const vtkDataObjectTreeIterator&) = delete;
|
|
|
|
class vtkInternals;
|
|
vtkInternals* Internals;
|
|
friend class vtkInternals;
|
|
|
|
vtkTypeBool TraverseSubTree;
|
|
vtkTypeBool VisitOnlyLeaves;
|
|
|
|
/**
|
|
* Helper method used by vtkInternals to get access to the internals of
|
|
* vtkDataObjectTree.
|
|
*/
|
|
vtkDataObjectTreeInternals* GetInternals(vtkDataObjectTree*);
|
|
|
|
// Cannot be called when this->IsDoneWithTraversal() return 1.
|
|
void UpdateLocation();
|
|
};
|
|
|
|
#endif
|