表面メッシュの押し出し(VTKライブラリ) †
表面メッシュを回転しながら押し出してボリュームメッシュを作成します。VTKライブラリには、表面メッシュを回転しながら押し出す関数vtkRotationalExtrusionFilterなどはありますが、ボリュームを作成しないので、非常に簡単ですが、ボリュームを作成するプログラムを書きました。
プログラムでは、"Text!"という文字列を三角形メッシュで作成し、それをz軸の周りに90°回転させながら押し出します。押し出した結果は、プリズム要素で、VTKライブラリの非構造メッシュ形式(*.vtu)で出力されます。
vtkNormalExtrusion.cxx †
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 *[])
{
vtkSmartPointer<vtkVectorText> vecText =
vtkSmartPointer<vtkVectorText>::New();
vecText->SetText("Text!");
vecText->Update();
vtkSmartPointer<vtkNormalExtrusionFilter> extrude =
vtkSmartPointer<vtkNormalExtrusionFilter>::New();
extrude->SetInputConnection(vecText->GetOutputPort());
extrude->SetAngle(90.0);
extrude->SetResolution(12);
extrude->SetTranslation(3.0);
extrude->Update();
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ファイル: