*表面メッシュの押し出し(VTKライブラリ) [#kfb39c21]

表面メッシュを回転しながら押し出してボリュームメッシュを作成します。[[VTK:http://www.vtk.org]]ライブラリには、表面メッシュを回転しながら押し出す関数[[vtkRotationalExtrusionFilter:http://www.vtk.org/doc/nightly/html/classvtkRotationalExtrusionFilter.html]]などはありますが、ボリュームを作成しないので、非常に簡単ですが、ボリュームを作成するプログラムを書きました。

プログラムでは、"Text!"という文字列を三角形メッシュで作成し、それをz軸の周りに90°回転させながら押し出します。押し出した結果は、プリズム要素で、[[VTK:http://www.vtk.org]]ライブラリの非構造メッシュ形式(*,vtu)で出力されます。
プログラムでは、"Text!"という文字列を三角形メッシュで作成し、それをz軸の周りに90°回転させながら押し出します。押し出した結果は、プリズム要素で、[[VTK:http://www.vtk.org]]ライブラリの非構造メッシュ形式(*.vtu)で出力されます。

#ref(vtkNormalExtrusion.png,center,nowrap,70%,回転押し出し);

**vtkNormalExtrusion.cxx[#y88ae58d]
#code(c){{
#include <vtkSmartPointer.h>
#include <vtkVectorText.h>
#include <vtkXMLUnstructuredGridWriter.h>

#include <string>

#include "vtkNormalExtrusionFilter.h"

int main(int, char *[])
{
  // Create vector text
  vtkSmartPointer<vtkVectorText> vecText = 
     vtkSmartPointer<vtkVectorText>::New();
  vecText->SetText("Text!");
  vecText->Update();

  // Apply normal extrusion
  vtkSmartPointer<vtkNormalExtrusionFilter> extrude =
    vtkSmartPointer<vtkNormalExtrusionFilter>::New();
  extrude->SetInputConnection(vecText->GetOutputPort());
  extrude->SetAngle(90.0);
  extrude->SetResolution(12);
  extrude->SetTranslation(3.0);
  extrude->Update();

  // Write an Unstructured data file
  std::string outputFileName = "extrude.vtu";
  vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer =
    vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
  writer->SetFileName(outputFileName.c_str());
  writer->SetInputConnection(extrude->GetOutputPort());
  writer->Write();

  return EXIT_SUCCESS;
}

}}

**ダウンロードとビルド [#k551ac14]
ソースコードと'''CMakeLists.txt'''ファイル:
#ref(vtkNormalExtrusion.zip)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS