00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00026 #include "vtkToolkits.h"
00027 #ifndef __vtkPVTreeComposite_h
00028 #define __vtkPVTreeComposite_h
00029
00030 #ifdef VTK_USE_MPI
00031 #include "vtkMPICommunicator.h"
00032 class vtkMPIController;
00033 #endif
00034
00035 #include "vtkCompositeRenderManager.h"
00036
00037 class vtkDataArray;
00038 class vtkFloatArray;
00039
00040 class VTK_EXPORT vtkPVTreeComposite : public vtkCompositeRenderManager
00041 {
00042 public:
00043 static vtkPVTreeComposite *New();
00044 vtkTypeRevisionMacro(vtkPVTreeComposite,vtkCompositeRenderManager);
00045 void PrintSelf(ostream& os, vtkIndent indent);
00046
00048
00051 virtual void CheckForAbortRender();
00052 virtual int CheckForAbortComposite();
00054
00056
00059 vtkSetMacro(EnableAbort, int);
00060 vtkGetMacro(EnableAbort, int);
00061 vtkBooleanMacro(EnableAbort, int);
00063
00064
00066 virtual void InitializeRMIs();
00067
00069 virtual void CheckForDataRMI();
00070
00071 vtkGetMacro(CompositeTime, double);
00072 vtkGetMacro(GetBuffersTime, double);
00073 vtkGetMacro(SetBuffersTime, double);
00074 vtkGetMacro(MaxRenderTime, double);
00075
00077 float GetZ(int x, int y);
00078
00079 void SetUseChar(int useChar);
00080 vtkGetMacro(UseChar, int);
00081 vtkBooleanMacro(UseChar, int);
00082
00083 void SetUseRGB(int useRGB);
00084 vtkGetMacro(UseRGB, int);
00085 vtkBooleanMacro(UseRGB, int);
00086
00087 static void ResizeFloatArray(vtkFloatArray *fa, int numComp, vtkIdType size);
00088 static void ResizeUnsignedCharArray(vtkUnsignedCharArray *uca, int numComp,
00089 vtkIdType size);
00090 static void DeleteArray(vtkDataArray *da);
00091
00092 protected:
00093 vtkPVTreeComposite();
00094 ~vtkPVTreeComposite();
00095
00096 int CheckForData();
00097 int ShouldIComposite();
00098 void InternalStartRender();
00099 void MagnifyFullFloatImage();
00100 virtual void PreRenderProcessing();
00101 virtual void PostRenderProcessing();
00102
00103 virtual void WriteFullImage();
00104 void WriteFullFloatImage();
00105
00106
00107
00108 enum Tags {
00109 CHECK_FOR_DATA_TAG=442445
00110 };
00111
00112
00113 int EnableAbort;
00114
00115 int LocalProcessId;
00116 int RenderAborted;
00117
00118
00119 int Initialized;
00120
00121 double CompositeTime;
00122 double GetBuffersTime;
00123 double SetBuffersTime;
00124 double MaxRenderTime;
00125
00126
00127 #ifdef VTK_USE_MPI
00128 void SatelliteFinalAbortCheck();
00129 void SatelliteAbortCheck();
00130 void RootAbortCheck();
00131 void RootFinalAbortCheck();
00132 void RootWaitForSatelliteToFinish(int satelliteId);
00133 void RootSendFinalCompositeDecision();
00134
00135
00136 vtkMPIController *MPIController;
00137 vtkMPICommunicator::Request ReceiveRequest;
00138
00139
00140
00141 int RootWaiting;
00142 int ReceivePending;
00143 int ReceiveMessage;
00144 #endif
00145
00146
00147 void ReallocDataArrays();
00148 virtual void ReadReducedImage();
00149 virtual void MagnifyReducedFloatImage();
00150 virtual void SetRenderWindowFloatPixelData(vtkFloatArray *pixels,
00151 const int pixelDimensions[2]);
00152
00153 int UseChar;
00154 int UseRGB;
00155
00156 vtkFloatArray *ReducedFloatImage;
00157 vtkFloatArray *FullFloatImage;
00158 vtkFloatArray *TmpFloatPixelData;
00159
00160 private:
00161 vtkPVTreeComposite(const vtkPVTreeComposite&);
00162 void operator=(const vtkPVTreeComposite&);
00163 };
00164
00165 #endif