00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00026 #ifndef __vtkPVCompositeUtilities_h
00027 #define __vtkPVCompositeUtilities_h
00028
00029 #include "vtkObject.h"
00030
00031 class vtkCollection;
00032 class vtkDataArray;
00033 class vtkUnsignedCharArray;
00034 class vtkFloatArray;
00035 class vtkPVCompositeBuffer;
00036 class vtkMultiProcessController;
00037
00038 class VTK_EXPORT vtkPVCompositeUtilities : public vtkObject
00039 {
00040 public:
00041 static vtkPVCompositeUtilities *New();
00042 vtkTypeRevisionMacro(vtkPVCompositeUtilities,vtkObject);
00043 void PrintSelf(ostream& os, vtkIndent indent);
00044
00046
00048 vtkFloatArray *NewFloatArray(int numTuples, int numComponents);
00049 vtkUnsignedCharArray *NewUnsignedCharArray(int numTuples,
00050 int numComponents);
00052
00054 vtkPVCompositeBuffer* NewCompositeBuffer(int numPixels);
00055
00057
00058 vtkPVCompositeBuffer* NewCompositeBuffer(
00059 vtkUnsignedCharArray* pData,
00060 vtkFloatArray* zData);
00062
00064
00065 static void SendBuffer(vtkMultiProcessController* controller,
00066 vtkPVCompositeBuffer* buf, int otherProc, int tag);
00068
00070
00072 vtkPVCompositeBuffer* ReceiveNewBuffer(vtkMultiProcessController* controller,
00073 int otherProc, int tag);
00075
00077
00079 static void Compress(vtkFloatArray *zIn, vtkUnsignedCharArray *pIn,
00080 vtkPVCompositeBuffer* outBuf);
00082
00085 static int GetCompressedLength(vtkFloatArray* zIn);
00086
00087 static void Uncompress(vtkPVCompositeBuffer* inBuf,
00088 vtkUnsignedCharArray *pOut);
00089
00091
00093 static int GetCompositedLength(vtkPVCompositeBuffer* b1,
00094 vtkPVCompositeBuffer* b2);
00096
00097 static void CompositeImagePair(vtkPVCompositeBuffer* inBuf1,
00098 vtkPVCompositeBuffer* inBuf2,
00099 vtkPVCompositeBuffer* outBuf);
00100
00101 static void MagnifyBuffer(vtkDataArray* in, vtkDataArray* out,
00102 int inWinSize[2], int factor);
00103
00105
00107 vtkSetMacro(MaximumMemoryUsage, unsigned long);
00108 vtkGetMacro(MaximumMemoryUsage, unsigned long);
00110
00112 unsigned long GetTotalMemoryUsage();
00113
00114 protected:
00115 vtkPVCompositeUtilities();
00116 ~vtkPVCompositeUtilities();
00117
00118 vtkCollection* FloatArrayCollection;
00119 vtkCollection* UnsignedCharArrayCollection;
00120
00121 unsigned long MaximumMemoryUsage;
00122 unsigned long FloatMemoryUsage;
00123 unsigned long UnsignedCharMemoryUsage;
00124
00125
00126 int RemoveOldestUnused(vtkCollection* arrayCollection);
00127
00128 private:
00129 vtkPVCompositeUtilities(const vtkPVCompositeUtilities&);
00130 void operator=(const vtkPVCompositeUtilities&);
00131 };
00132
00133 #endif