スポンサーリンク

vtkProgressObserverをつかって進捗を表示

VTK9.3で、PLY読み込みなどを行う際に進捗状況を%表示する方法。

vtkProgressObserverを指定するSetProgressObserverメンバ関数はvtkAlgorithmで定義されているので、vtkAlgorithmを継承した処理でないとこの方法は使えない

1.vtkProgressObserverを継承したMyProgressObserverを定義

2.UpdateProgressをオーバーライドし、amountから進捗を取得

3.MyProgressObserverのインスタンスを作成

4.vtkPLYReaderなどのインスタンスを作成

5.SetProgressObserverにオブザーバーのポインタを与える

// 進捗管理用
#include <vtkProgressObserver.h>

// PLYファイル読み込み用
#include <vtkPLYReader.h>

// 読み込めているか確認用
#include <vtkPointData.h>

//////////////////////////////////////////////////
// 進捗管理のためにvtkProgressObserverを継承したクラスを作成
class MyProgressObserver : public vtkProgressObserver {
public:

  // UpdateProgressをオーバーライド
  virtual void UpdateProgress(double amount)override {
    // 進捗を表示
    printf("== %d\n", int(amount*100) );// amountは進捗状況を0.0~1.0で表現
  }
};
void myload() {

  const char* filename = "C:\\test\\mill.ply";

  ////////////////////////////////////////////////////////////

  // 進捗管理用のオブザーバを作成
  vtkSmartPointer<MyProgressObserver> observer = vtkSmartPointer<MyProgressObserver>(new MyProgressObserver);

  ////////////////////////////////////////////////////////////
  // PLYファイルを読み込むオブジェクト作成
  vtkSmartPointer<vtkPLYReader> plyReader = vtkSmartPointer<vtkPLYReader>::New();
  plyReader->SetProgressObserver(observer);// オブザーバを設定
  plyReader->SetFileName(filename);
  plyReader->Update();
  ////////////////////////////////////////////////////////////

  // 読み込んだデータを取得
  vtkSmartPointer<vtkPolyData> polyData = plyReader->GetOutput();
  vtkSmartPointer<vtkPoints> points = polyData->GetPoints();

  if (points == nullptr) {
    return;
  }
  for (vtkIdType i = 0; i < points->GetNumberOfPoints(); i++)
  {
    double p[3];
    points->GetPoint(i, p);
    printf("%lf %lf %lf\n", p[0], p[1], p[2]);
  }

}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: