時間ステップを指定
ここまでの方法では,時間は[1番目][2番目]...として設定するしかありませんでした.やはり,浮動小数の時間変数を入れたいわけです.これは空間を考慮するVTKでは不可能で,ParaViewなど画像処理プログラムの設定になります.
PVDwriteクラス
サンプルとして, PVDwriteクラスを作成しました.rect_4に入っています.
#include <iostream> #include <fstream> #include <map> #include <boost/filesystem.hpp> class PVDwrite { boost::filesystem::path _filename; boost::filesystem::path _basedir; std::map _array; public: void Append(boost::filesystem::path &P,double time){ _array[time]=P; }; void Write(){ boost::filesystem::ofstream ofs(_filename); ofs << "<?xml version=\"1.0\"?>"; ofs << "<VTKFile type=\"Collection\" version=\"0.1\" byte_order=\"LittleEndian\" compressor=\"vtkZLibDataCompressor\" >"; ofs << "<Collection>" << std::endl; for(auto& pair:_array) ofs << << "<DataSet timestep=\"" << pair.first << "\" group=\"\" part=\"0\" file=" << boost::filesystem::relative(pair.second,_basedir) << " />" << std::endl; ofs<<"</Collection></VTKFile>" << std::endl; } PVDwrite(boost::filesystem::path filename):_filename(filename){ _basedir=_filename.parent_path(); }; ~PVDwrite(){ _array.clear(); }; };
まあこんな感じですかね.ようするにPVDwriteオブジェクトを*.pvdファイル名を与えて初期化
PVDwrite BodyTime(bodyFolder/"body.pvd");
時間データを保存するごとにデータと物理時間の対応を追加:
BodyTime.Append(fileName, time);
ほんで,プログラム終了時にPVDファイルを書き出すわけですよ:
BodyTime.Write();
すると,PVDファイルが出現するってぇ寸法でぃ.
実際にRECT_4を実行してParaViewで開くと:
PVDファイルを開くと,時間が設定されている!
にゃお,PVDファイルの内容は,こんなノリです:
<?xml version="1.0"?><VTKFile type="Collection" version="0.1" byte_order="LittleEndian" compressor="vtkZLibDataCompressor" ><Collection> <DataSet timestep="0.2" group="" part="0" file="data/body0001.vtm" /> <DataSet timestep="0.4" group="" part="0" file="data/body0002.vtm" /> <DataSet timestep="0.6" group="" part="0" file="data/body0003.vtm" /> <DataSet timestep="0.8" group="" part="0" file="data/body0004.vtm" /> <DataSet timestep="1" group="" part="0" file="data/body0005.vtm" /> <DataSet timestep="1.2" group="" part="0" file="data/body0006.vtm" /> <DataSet timestep="1.4" group="" part="0" file="data/body0007.vtm" /> <DataSet timestep="1.6" group="" part="0" file="data/body0008.vtm" /> <DataSet timestep="1.8" group="" part="0" file="data/body0009.vtm" /> <DataSet timestep="2" group="" part="0" file="data/body0010.vtm" /> </Collection></VTKFile>