メインコンテンツに移動

なんちゃって再構成

計算手法によっては, CellDataしか出力しない場合がある.で,PointDataが欲しいだろ?

境界条件なども考慮した精密な方法はユーザーが考えるべきであるが,とりあえず,その辺のセルデータの平均で格子点の値を計算してみるってのも良いだろう.いい加減な再構成だが,節約は大切だ.

で,サクッと再構成する例をvtkImageDataで示そう(他のデータ形式でも,もちろんできる)詳細はXCodeでVTK楽園を参照

#include <vtkCellDataToPointData.h>
...
vtkSmartPointer<vtkImageData> src_Image;
...
この辺でvtkImageのセルデータを追加する
...
auto* C2P=vtkCellDataToPointData::New();  //フィルターアルゴリズムを作成
C2P->PassCellDataOn();  //入力のCellDataを出力にコピー(デフォで出力はPointDataだけになる)
C2P->SetInputData(src_Image);                   //フィルター入力を指定
C2P->Update();                              //フィルターを実行
vtkSmartPointer<vtkImageData> dst_Image=C2P->GetImageDataOutput();
//改変された出力を入力イメージにコピーしましょう
src_Image->ShallowCopy(dst_Image);

これで, まあちょいといい加減だが, CellDataもPointDataも含んだデータを作成できる.

さて,これでわかるように,VTKには「フィルター」が沢山用意されており,それらでデータを加工できる.

フィルターには入力と出力がある.さらに,あるフィルターの出力を別のフィルターの入力に接続できる.こうして複雑な操作を行う一連の処理を「パイプライン」と呼ぶ.パイプラインの作成と実行については,ここで説明しよう.上の例は,パイプラインを構築せず,単一のフィルターを実行する例なのであるよ.