VTK
|
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