00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00025 #ifndef __vtkRedistributePolyData_h
00026 #define __vtkRedistributePolyData_h
00027
00028 #include "vtkPolyDataToPolyDataFilter.h"
00029
00030
00031 class vtkDataArray;
00032 class vtkDataSetAttributes;
00033 class vtkMultiProcessController;
00034 class vtkSocketController;
00035
00036 class VTK_EXPORT vtkRedistributePolyData : public vtkPolyDataToPolyDataFilter
00037 {
00038 public:
00039 vtkTypeRevisionMacro(vtkRedistributePolyData, vtkPolyDataToPolyDataFilter);
00040 void PrintSelf(ostream& os, vtkIndent indent);
00041
00042 static vtkRedistributePolyData *New();
00043
00045
00046 virtual void SetController(vtkMultiProcessController*);
00047 vtkGetObjectMacro(Controller, vtkMultiProcessController);
00049
00050 vtkGetMacro(ColorProc,int);
00051 vtkSetMacro(ColorProc,int);
00052 void SetColorProc() { this->ColorProc = 1; };
00053
00055
00056 virtual void SetSocketController(vtkSocketController*) {};
00057 virtual void SetPassThrough(int) {};
00058 virtual int GetPassThrough() { return 0; };
00059 vtkBooleanMacro(PassThrough, int);
00061
00062 protected:
00063 vtkRedistributePolyData();
00064 ~vtkRedistributePolyData();
00065
00066
00067 enum {
00068 CELL_ID_TAG = 10,
00069 POINT_COORDS_TAG = 20,
00070 NUM_POINTS_TAG = 30,
00071 NUM_CELLS_TAG = 40,
00072 BOUNDS_TAG = 60,
00073 CNT_SEND_TAG = 80,
00074 CNT_REC_TAG = 90,
00075 SEND_PROC_TAG = 100,
00076 SEND_NUM_TAG = 110,
00077 REC_PROC_TAG = 120,
00078 REC_NUM_TAG = 130,
00079 NUM_CURR_CELLS_TAG = 140,
00080
00081 CELL_CNT_TAG = 150,
00082 CELL_TAG = 160,
00083 POINTS_SIZE_TAG = 170,
00084 POINTS_TAG = 180
00085 };
00086
00087 class VTK_EXPORT vtkCommSched
00088 {
00089 public:
00090 vtkCommSched();
00091 ~vtkCommSched();
00092
00093 int SendCount;
00094 int ReceiveCount;
00095 int* SendTo;
00096 int* ReceiveFrom;
00097 vtkIdType* NumberOfCells;
00098 vtkIdType** SendNumber;
00099 vtkIdType** ReceiveNumber;
00100
00101 vtkIdType*** SendCellList;
00102 vtkIdType** KeepCellList;
00103
00104 private:
00105 vtkCommSched(const vtkCommSched&);
00106 void operator=(const vtkCommSched&);
00107 };
00108
00109
00110
00111 virtual void MakeSchedule (vtkCommSched*);
00112 void OrderSchedule (vtkCommSched*);
00113
00114 void SendCellSizes (vtkIdType*, vtkIdType*, vtkPolyData*, int,
00115 vtkIdType&, vtkIdType*, vtkIdType**);
00116 void CopyCells (vtkIdType*,vtkPolyData*, vtkPolyData*, vtkIdType**);
00117 void SendCells (vtkIdType*, vtkIdType*, vtkPolyData*, vtkPolyData*,
00118 int, vtkIdType&, vtkIdType*, vtkIdType**);
00119 void ReceiveCells (vtkIdType*, vtkIdType*, vtkPolyData*, int,
00120 vtkIdType*, vtkIdType*, vtkIdType, vtkIdType);
00121
00122 void FindMemReq (vtkIdType*, vtkPolyData*, vtkIdType&, vtkIdType*);
00123
00124 void AllocateCellDataArrays (vtkDataSetAttributes*, vtkIdType**,
00125 int, vtkIdType*);
00126 void AllocatePointDataArrays (vtkDataSetAttributes*, vtkIdType*,
00127 int, vtkIdType);
00128 void AllocateArrays (vtkDataArray*, vtkIdType);
00129
00130 void CopyDataArrays(vtkDataSetAttributes*, vtkDataSetAttributes*,
00131 vtkIdType, vtkIdType*, int);
00132
00133 void CopyCellBlockDataArrays(vtkDataSetAttributes* ,
00134 vtkDataSetAttributes* ,
00135 vtkIdType , vtkIdType,
00136 vtkIdType, vtkIdType, int);
00137
00138 void CopyArrays (vtkDataArray*, vtkDataArray*, vtkIdType, vtkIdType*,
00139 int);
00140
00141 void CopyBlockArrays (vtkDataArray*, vtkDataArray*, vtkIdType,
00142 vtkIdType, vtkIdType, vtkIdType, int);
00143
00144 void SendDataArrays (vtkDataSetAttributes*, vtkDataSetAttributes*,
00145 vtkIdType, int, vtkIdType*, int);
00146
00147 void SendCellBlockDataArrays (vtkDataSetAttributes*,
00148 vtkDataSetAttributes*,
00149 vtkIdType, int, vtkIdType, int);
00150
00151 void SendArrays (vtkDataArray*, vtkIdType, int,
00152 vtkIdType*, int);
00153
00154 void SendBlockArrays (vtkDataArray*, vtkIdType, int,
00155 vtkIdType, int);
00156
00157 void ReceiveDataArrays (vtkDataSetAttributes*, vtkIdType, int,
00158 vtkIdType*, int);
00159
00160 void ReceiveArrays (vtkDataArray*, vtkIdType, int,
00161 vtkIdType*, int);
00162
00163 void Execute();
00164
00165
00166 void CompleteInputArrays(vtkPolyData* input);
00167 void ReceiveInputArrays(vtkDataSetAttributes* attr, int recFrom);
00168 void SendInputArrays(vtkDataSetAttributes* attr, int sendTo);
00169 int DoubleCheckArrays(vtkPolyData* input);
00170
00171 vtkMultiProcessController *Controller;
00172
00173 int ColorProc;
00174
00175 private:
00176 vtkRedistributePolyData(const vtkRedistributePolyData&);
00177 void operator=(const vtkRedistributePolyData&);
00178
00179 };
00180
00181
00182
00183 #endif
00184
00185