VTK
dox/Common/DataModel/vtkStructuredVisibilityConstraint.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkStructuredVisibilityConstraint.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 =========================================================================*/
00028 #ifndef __vtkStructuredVisibilityConstraint_h
00029 #define __vtkStructuredVisibilityConstraint_h
00030 
00031 #include "vtkCommonDataModelModule.h" // For export macro
00032 #include "vtkObject.h"
00033 
00034 #include "vtkUnsignedCharArray.h" // Needed for inline methods.
00035 
00036 class VTKCOMMONDATAMODEL_EXPORT vtkStructuredVisibilityConstraint : public vtkObject
00037 {
00038 public:
00039   static vtkStructuredVisibilityConstraint *New();
00040 
00041   vtkTypeMacro(vtkStructuredVisibilityConstraint,vtkObject);
00042   void PrintSelf(ostream& os, vtkIndent indent);
00043 
00045   unsigned char IsVisible(vtkIdType id);
00046 
00050   void Blank(vtkIdType id);
00051 
00053   void UnBlank(vtkIdType id);
00054 
00056 
00057   vtkGetVectorMacro(Dimensions,int,3);
00059 
00062   void Initialize(int dims[3]);
00063 
00066   void Allocate();
00067 
00069 
00070   void SetVisibilityById(vtkUnsignedCharArray* vis);
00071   vtkGetObjectMacro(VisibilityById, vtkUnsignedCharArray);
00073 
00076   void ShallowCopy(vtkStructuredVisibilityConstraint* src);
00077 
00079   void DeepCopy(vtkStructuredVisibilityConstraint* src);
00080 
00082 
00084   unsigned char IsConstrained()
00085     {
00086       return this->VisibilityById ? 1 : 0;
00087     }
00089 
00090 protected:
00091   vtkStructuredVisibilityConstraint();
00092   ~vtkStructuredVisibilityConstraint();
00093 
00094   vtkUnsignedCharArray* VisibilityById;
00095   int Dimensions[3];
00096   vtkIdType NumberOfIds;
00097   unsigned char Initialized;
00098 
00099 private:
00100   vtkStructuredVisibilityConstraint(const vtkStructuredVisibilityConstraint&);  // Not implemented.
00101   void operator=(const vtkStructuredVisibilityConstraint&);  // Not implemented.
00102 };
00103 
00104 //----------------------------------------------------------------------------
00105 // These methods are inline for efficiency.
00106 
00107 //----------------------------------------------------------------------------
00108 inline void vtkStructuredVisibilityConstraint::Allocate()
00109 {
00110   if( !this->VisibilityById )
00111     {
00112     this->VisibilityById = vtkUnsignedCharArray::New();
00113     this->VisibilityById->SetNumberOfTuples( this->NumberOfIds );
00114     for( int i=0; i < this->NumberOfIds; ++i )
00115       {
00116       this->VisibilityById->SetValue( i, 1 );
00117       }
00118     }
00119 }
00120 //----------------------------------------------------------------------------
00121 inline unsigned char vtkStructuredVisibilityConstraint::IsVisible(
00122   vtkIdType id)
00123 {
00124   vtkUnsignedCharArray* vis = this->VisibilityById;
00125   return vis ? vis->GetValue(id) : 1;
00126 }
00127 
00128 //----------------------------------------------------------------------------
00129 inline void vtkStructuredVisibilityConstraint::Blank(vtkIdType id)
00130 {
00131   vtkUnsignedCharArray* vis = this->VisibilityById;
00132   if (!vis)
00133     {
00134     this->VisibilityById = vtkUnsignedCharArray::New();
00135     vis = this->VisibilityById;
00136     this->VisibilityById->SetNumberOfTuples(this->NumberOfIds);
00137     for (int i=0; i<this->NumberOfIds; ++i)
00138       {
00139       this->VisibilityById->SetValue(i, 1);
00140       }
00141     }
00142   vis->SetValue(id, 0);
00143 }
00144 
00145 //----------------------------------------------------------------------------
00146 inline void vtkStructuredVisibilityConstraint::UnBlank(vtkIdType id)
00147 {
00148   vtkUnsignedCharArray* vis = this->VisibilityById;
00149   if (!vis)
00150     {
00151     return;
00152     }
00153   vis->SetValue(id, 1);
00154 }
00155 
00156 //----------------------------------------------------------------------------
00157 inline void vtkStructuredVisibilityConstraint::Initialize(int dims[3])
00158 {
00159   if (this->Initialized)
00160     {
00161     return;
00162     }
00163   for (int i=0; i<3; i++)
00164     {
00165     this->Dimensions[i] = dims[i];
00166     }
00167   this->NumberOfIds = static_cast<vtkIdType>(dims[0])*
00168                       static_cast<vtkIdType>(dims[1])*
00169                       static_cast<vtkIdType>(dims[2]);
00170   this->Initialized = 1;
00171 }
00172 
00173 #endif
00174