6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[ParaView]3Dポリゴン上の滑らかに繋がった面だけを抽出する

Last updated at Posted at 2019-02-03

0.はじめに

今回はParaViewを使って以下のように、ポリゴン上から滑らかに繋がった領域だけを抽出するというのをやってみます。
Threshold.png

1.フィルタのパイプライン

ParaViewの[Filter] -> [Alphabetical]から、以下の順番でポリゴンにフィルタをかけていきます。
パイプライン.png

2.GenerateSurfaceNormalsでポリゴンの面を分割する

GenerateSurfaceNormalsは、VTKのvtkPolyDataNormalsというフィルタと同じ機能を持つものです。

このフィルタは、基本的にはポリゴンの節点/要素に法線ベクトルを定義するというものなのですが、内蔵フラグをONにすることで色々なことができます。
内蔵フラグは以下になります。

内蔵フラグ 機能
Splitting Feature Angleで設定した角度(隣接する要素間のなす角度)で、つながった領域とそうでない領域を区別して分割する。
Consistency 法線の向きを整える。あべこべに法線が定義されているときなどに利用できる。
Filp Normals 全法線の向きを反転させる。
Non-Manifold Traversal Non-ManifoldEdges(3つ以上の要素のエッジが重なったときにできる線分)を処理の対象に含める。
Conpute Cell Normals 要素の法線ベクトルを求める。
Piece Invariant 使用するプロセッサーの数に関係なく同じ結果とする。

今回は、上記のフラグはデフォルト + Conpute Cell NormalsをONにして、Feature Angleを設定した後に [Apply] を選択します。
GenerateSurfaceNormals.png

3.Connectivityで分割された面ごとにIDをつける

Connectivityは、VTKのvtkConnectivityFilterというフィルタと同じ機能を持つものです。

このフィルタは、重複節点のある点を境界として領域を区別して[要調査]、領域ごとに節点/要素単位でRegionId(整数)を振ってくれます。
Connectivity.png

4.Thresholdで特定のIDがついたポリゴンのみ抽出する

Thresholdは、VTKのvtkThresholdというフィルタと同じ機能を持つものです。

このフィルタを利用すると、設定した範囲の数値を持つ節点/要素のみを抽出することができます。今回はモデル上のKの面を抽出してみます。

まず、ビューアーの上の部分にある[Select Cells On (s)]を選択します。
Threshold2.png
その後、モデル上の抽出したい部分の一部をドラッグすると下図のように要素を選択できるので、
その状態で[Find data matching various criteria from the current source (v)]を選択します。
Threshold2_2.png
すると、Connectivityで付与したRegionIdがわかります。
Threshold2_3.png
この値をThreshold[Minimum][Maximum]に入力して[Apply]を選択すると、以下のようにKの面だけ抽出できます。
Threshold2_4.png

5.他のポリゴンでもやってみる

曲率の大きい面が多いモデルでもちゃんと特定の面を抽出できます。
うりぼー.png

6.おわりに

3Dポリゴン上の滑らかに繋がった面だけを抽出するという処理をParaViewだけでやってみました。
ParaViewのフィルタは基本的にVTKで実装されているので、VTKライブラリを使ってC++やPythonなどでも同じ処理を記述できます。

また、今回の一連の作業はParaView上で[Tools] -> [Start Trace / Stop Trace]を利用すると、Pythonスクリプトにすることができるので、Pythonで同じことをしたいという方はそちらをご利用ください。

そのうち今回の方法で作った部分表面データと、以前の記事で紹介したソルバー間の連携に関しても書ければと思ってます。

参考文献

  1. ParaViewを極めたい。:Generate Surface Normals
  2. メッシュWiki:法線ベクトルの生成
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?