VTK
|
00001 #ifndef __vtkKMeansDistanceFunctor_h 00002 #define __vtkKMeansDistanceFunctor_h 00003 00015 #include "vtkObject.h" 00016 00017 class vtkVariantArray; 00018 class vtkAbstractArray; 00019 class vtkTable; 00020 00021 class VTK_INFOVIS_EXPORT vtkKMeansDistanceFunctor : public vtkObject 00022 { 00023 public: 00024 static vtkKMeansDistanceFunctor* New(); 00025 vtkTypeMacro(vtkKMeansDistanceFunctor,vtkObject); 00026 virtual void PrintSelf( ostream& os, vtkIndent indent ); 00027 00030 virtual vtkVariantArray* GetEmptyTuple( vtkIdType dimension ); 00031 00034 virtual void operator() ( double&, vtkVariantArray*, vtkVariantArray * ); 00035 00041 virtual void PairwiseUpdate( vtkTable* clusterCenters, vtkIdType row, vtkVariantArray* data, vtkIdType dataCardinality, vtkIdType totalCardinality ); 00042 00049 virtual void PerturbElement( vtkTable*, vtkTable*, vtkIdType, vtkIdType, vtkIdType, double ); 00050 00054 virtual void* AllocateElementArray( vtkIdType size ); 00055 00057 virtual void DeallocateElementArray( void* ); 00058 00062 virtual vtkAbstractArray* CreateCoordinateArray(); 00063 00067 virtual void PackElements( vtkTable* curTable, void* vElements ); 00068 00070 00073 virtual void UnPackElements( vtkTable* curTable, vtkTable* newTable, void* vLocalElements, void* vGlobalElements, int np ); 00074 virtual void UnPackElements( vtkTable* curTable, void* vLocalElements, vtkIdType numRows, vtkIdType numCols ); 00076 00078 virtual int GetDataType(); 00079 00080 protected: 00081 vtkKMeansDistanceFunctor(); 00082 virtual ~vtkKMeansDistanceFunctor(); 00083 00084 vtkVariantArray* EmptyTuple; // Used to quickly initialize Tuple for each datum 00085 vtkTable* CenterUpdates; // Used to hold online computation of next iteration's cluster center coords. 00086 00087 private: 00088 vtkKMeansDistanceFunctor( const vtkKMeansDistanceFunctor& ); // Not implemented. 00089 void operator = ( const vtkKMeansDistanceFunctor& ); // Not implemented. 00090 }; 00091 00092 #endif // __vtkKMeansDistanceFunctor_h