表面メッシュの押し出し(VTKライブラリ)

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

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

回転押し出し

vtkNormalExtrusion.cxx

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 
 
 
 
 
 
 
 
-
-
!
|
|
|
|
-
!
|
|
|
|
|
|
|
-
!
|
|
|
|
|
|
|
!
 
#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;
}

ダウンロードとビルド

ソースコードとCMakeLists.txtファイル:


添付ファイル: filevtkNormalExtrusion.png 844件 [詳細] filevtkNormalExtrusion.zip 694件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-07-23 (火) 16:27:04 (1602d)