1 /*========================================================================= 2 * 3 * Copyright Insight Software Consortium 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0.txt 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 *=========================================================================*/ 18 /*========================================================================= 19 * 20 * Portions of this file are subject to the VTK Toolkit Version 3 copyright. 21 * 22 * Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 23 * 24 * For complete copyright, license and disclaimer of warranty information 25 * please refer to the NOTICE file at the top of the ITK source tree. 26 * 27 *=========================================================================*/ 28 #ifndef itkRegion_h 29 #define itkRegion_h 30 31 #include "itkObject.h" 32 33 namespace itk 34 { 35 /** \class Region 36 * \brief A region represents some portion or piece of data. 37 * 38 * Region is an abstract class that represents some portion or 39 * piece of a DataObject. A region is used by the pipeline when 40 * processing just a portion of the data, either because 1) memory 41 * limits dictate that the pipeline cannot fit the entire dataset 42 * into memory; 2) the user has requested that only a piece of the 43 * dataset is to be processed; or 3) parallel (multi-threaded) 44 * processing of the data is required. 45 * 46 * There are two types of regions in itk: a structured region that 47 * specifies a rectangular piece of an image (ImageRegion), and a 48 * unstructured region that specifies piece i of N total pieces 49 * (MeshRegion). Depending on the filter (its input and output 50 * types, and its position in the pipeline), ImageRegion or MeshRegion 51 * will be used to describe the region. 52 * 53 * Region is a light-weight object and not reference counted. This 54 * means that is behaves differently than ITK classes that are 55 * reference counted. For example, smart pointer access is not 56 * provided, and the (subclasses') constructor, destructor, 57 * copy constructor and operator= are all public. 58 * 59 * \sa ImageRegion 60 * \sa MeshRegion 61 * \ingroup DataRepresentation 62 * \ingroup ITKCommon 63 */ 64 class ITKCommon_EXPORT Region 65 { 66 public: 67 /** Standard class type aliases. */ 68 using Self = Region; 69 70 /** Enums used to describe the extent types. */ 71 enum RegionType { ITK_UNSTRUCTURED_REGION, ITK_STRUCTURED_REGION }; 72 73 /** Standard part of all itk objects. */ 74 itkTypeMacroNoParent(Region); 75 76 /** Subclasses must return a region type describing whether the region 77 * is structured or unstructured. */ 78 virtual RegionType GetRegionType() const = 0; 79 80 /** Print the region. */ 81 virtual void Print(std::ostream & os, Indent indent = 0) const; 82 83 Region() = default; 84 virtual ~Region() = default; 85 86 protected: 87 /** Methods invoked by Print() to print information about the object 88 * including superclasses. Typically not called by the user (use Print() 89 * instead) but used in the hierarchical print process to combine the 90 * output of several classes. */ 91 virtual void PrintSelf(std::ostream & os, Indent indent) const; 92 93 virtual void PrintHeader(std::ostream & os, Indent indent) const; 94 95 virtual void PrintTrailer(std::ostream & os, Indent indent) const; 96 97 private: 98 }; 99 } // end namespace itk 100 101 #endif 102