VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkXdmfWriter.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 =========================================================================*/ 00015 00028 #ifndef _vtkXdmfWriter_h 00029 #define _vtkXdmfWriter_h 00030 00031 #include "vtkIOXdmf2Module.h" // For export macro 00032 00033 #include "vtkDataObjectAlgorithm.h" 00034 00035 class vtkExecutive; 00036 00037 class vtkCompositeDataSet; 00038 class vtkDataArray; 00039 class vtkDataSet; 00040 class vtkDataObject; 00041 class vtkFieldData; 00042 class vtkInformation; 00043 class vtkInformationVector; 00044 class vtkXdmfWriterDomainMemoryHandler; 00045 00046 namespace xdmf2 00047 { 00048 class XdmfArray; 00049 class XdmfDOM; 00050 class XdmfGrid; 00051 } 00052 00053 class VTKIOXDMF2_EXPORT vtkXdmfWriter : public vtkDataObjectAlgorithm 00054 { 00055 public: 00056 static vtkXdmfWriter *New(); 00057 vtkTypeMacro(vtkXdmfWriter,vtkDataObjectAlgorithm); 00058 void PrintSelf(ostream& os, vtkIndent indent); 00059 00061 virtual void SetInputData(vtkDataObject* dobj); 00062 00064 00065 vtkSetStringMacro(FileName); 00066 vtkGetStringMacro(FileName); 00068 00070 00072 vtkSetStringMacro(HeavyDataFileName); 00073 vtkGetStringMacro(HeavyDataFileName); 00075 00077 00079 vtkSetStringMacro(HeavyDataGroupName); 00080 vtkGetStringMacro(HeavyDataGroupName); 00082 00086 virtual int Write(); 00087 00089 00091 vtkSetMacro(LightDataLimit, int); 00092 vtkGetMacro(LightDataLimit, int); 00094 00096 00098 vtkSetMacro(WriteAllTimeSteps, int); 00099 vtkGetMacro(WriteAllTimeSteps, int); 00100 vtkBooleanMacro(WriteAllTimeSteps, int); 00102 00104 00106 vtkSetMacro(Piece, int); 00107 vtkSetMacro(NumberOfPieces, int); 00109 00110 //TODO: control choice of heavy data format (xml, hdf5, sql, raw) 00111 00112 //TODO: These controls are available in vtkXdmfWriter, but are not used here. 00113 //GridsOnly 00114 //Append to Domain 00115 00116 protected: 00117 vtkXdmfWriter(); 00118 ~vtkXdmfWriter(); 00119 00120 //Choose composite executive by default for time. 00121 virtual vtkExecutive* CreateDefaultExecutive(); 00122 00123 //Can take any one data object 00124 virtual int FillInputPortInformation(int port, vtkInformation *info); 00125 00126 //Overridden to ... 00127 virtual int RequestInformation(vtkInformation*, 00128 vtkInformationVector**, 00129 vtkInformationVector*); 00130 //Overridden to ... 00131 virtual int RequestUpdateExtent(vtkInformation*, 00132 vtkInformationVector**, 00133 vtkInformationVector*); 00134 //Overridden to ... 00135 virtual int RequestData(vtkInformation*, 00136 vtkInformationVector**, 00137 vtkInformationVector*); 00138 00139 //These do the work: recursively parse down input's structure all the way to arrays, 00140 //use XDMF lib to dump everything to file. 00141 00142 virtual int CreateTopology(vtkDataSet *ds, xdmf2::XdmfGrid *grid, vtkIdType PDims[3], vtkIdType CDims[3], vtkIdType &PRank, vtkIdType &CRank, void *staticdata); 00143 virtual int CreateGeometry(vtkDataSet *ds, xdmf2::XdmfGrid *grid, void *staticdata); 00144 00145 virtual int WriteDataSet(vtkDataObject *dobj, xdmf2::XdmfGrid *grid); 00146 virtual int WriteCompositeDataSet(vtkCompositeDataSet *dobj, xdmf2::XdmfGrid *grid); 00147 virtual int WriteAtomicDataSet(vtkDataObject *dobj, xdmf2::XdmfGrid *grid); 00148 virtual int WriteArrays(vtkFieldData* dsa, xdmf2::XdmfGrid *grid, int association, 00149 vtkIdType rank, vtkIdType *dims, const char *name); 00150 virtual void ConvertVToXArray(vtkDataArray *vda, xdmf2::XdmfArray *xda, 00151 vtkIdType rank, vtkIdType *dims, 00152 int AllocStrategy, const char *heavyprefix); 00153 00154 char *FileName; 00155 char *HeavyDataFileName; 00156 char *HeavyDataGroupName; 00157 00158 int LightDataLimit; 00159 00160 int WriteAllTimeSteps; 00161 int NumberOfTimeSteps; 00162 int CurrentTimeIndex; 00163 00164 int Piece; 00165 int NumberOfPieces; 00166 00167 xdmf2::XdmfDOM *DOM; 00168 xdmf2::XdmfGrid *TopTemporalGrid; 00169 00170 vtkXdmfWriterDomainMemoryHandler *DomainMemoryHandler; 00171 00172 private: 00173 vtkXdmfWriter(const vtkXdmfWriter&); // Not implemented 00174 void operator=(const vtkXdmfWriter&); // Not implemented 00175 }; 00176 00177 #endif /* _vtkXdmfWriter_h */