VTK
dox/Filtering/vtkHyperOctreeCursor.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkHyperOctreeCursor.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00024 #ifndef __vtkHyperOctreeCursor_h
00025 #define __vtkHyperOctreeCursor_h
00026 
00027 #include "vtkObject.h"
00028 
00029 enum
00030 {
00031   VTK_OCTREE_CHILD_ZMIN_YMIN_XMIN=0,
00032   VTK_OCTREE_CHILD_ZMIN_YMIN_XMAX,
00033   VTK_OCTREE_CHILD_ZMIN_YMAX_XMIN,
00034   VTK_OCTREE_CHILD_ZMIN_YMAX_XMAX,
00035   VTK_OCTREE_CHILD_ZMAX_YMIN_XMIN,
00036   VTK_OCTREE_CHILD_ZMAX_YMIN_XMAX,
00037   VTK_OCTREE_CHILD_ZMAX_YMAX_XMIN,
00038   VTK_OCTREE_CHILD_ZMAX_YMAX_XMAX
00039 };
00040 
00041 const int VTK_QUADTREE_CHILD_SW=VTK_OCTREE_CHILD_ZMIN_YMIN_XMIN;
00042 const int VTK_QUADTREE_CHILD_SE=VTK_OCTREE_CHILD_ZMIN_YMIN_XMAX;
00043 const int VTK_QUADTREE_CHILD_NW=VTK_OCTREE_CHILD_ZMIN_YMAX_XMIN;
00044 const int VTK_QUADTREE_CHILD_NE=VTK_OCTREE_CHILD_ZMIN_YMAX_XMAX;
00045 
00046 const int VTK_BINARY_TREE_CHILD_LEFT=VTK_QUADTREE_CHILD_SW;
00047 const int VTK_BINARY_TREE_CHILD_RIGHT=VTK_QUADTREE_CHILD_SE;
00048 
00049 class VTK_FILTERING_EXPORT vtkHyperOctreeCursor : public vtkObject
00050 {
00051 public:
00052   vtkTypeMacro(vtkHyperOctreeCursor,vtkObject);
00053   void PrintSelf(ostream& os, vtkIndent indent);
00054   
00057   virtual int GetLeafId()=0;
00058   
00060   virtual int CurrentIsLeaf()=0;
00061   
00063   virtual int CurrentIsRoot()=0;
00064   
00067   virtual int GetCurrentLevel()=0;
00068   
00072   virtual int GetChildIndex()=0;
00073   
00074   // Are the children of the current node all leaves?
00075   // This query can be called also on a leaf node.
00076   // \post compatible: result implies !CurrentIsLeaf()
00077   virtual int CurrentIsTerminalNode()=0;
00078   
00081   virtual void ToRoot()=0;
00082   
00085   virtual void ToParent()=0;
00086   
00090   virtual void ToChild(int child)=0;
00091   
00095   virtual void ToSameNode(vtkHyperOctreeCursor *other)=0;
00096  
00099   virtual int IsEqual(vtkHyperOctreeCursor *other)=0;
00100   
00103   virtual vtkHyperOctreeCursor *Clone()=0;
00104     
00107   virtual int SameTree(vtkHyperOctreeCursor *other)=0;
00108   
00113   virtual int GetIndex(int d)=0;
00114   
00117   virtual int GetNumberOfChildren()=0;
00118   
00120   virtual int GetDimension()=0;
00121   
00123 
00129   virtual void MoveToNode(int *indices,
00130                           int level)=0;
00132   
00134   virtual int Found()=0;
00135   
00136 protected:
00137   // Constructor.
00138   vtkHyperOctreeCursor();
00139   virtual ~vtkHyperOctreeCursor();
00140 private:
00141   vtkHyperOctreeCursor(const vtkHyperOctreeCursor&);  // Not implemented.
00142   void operator=(const vtkHyperOctreeCursor&);    // Not implemented.
00143 };
00144 #endif