[ParaView] 3D 폴리곤 상의 매끄럽게 연결된 면만 추출

0. 소개



이번에는 ParaView를 사용하여 다음과 같이 다각형에서 매끄럽게 연결된 영역만 추출한다는 것을 해보겠습니다.


1. 필터 파이프라인



ParaView [Filter] -> [Alphabetical] 에서 다음 순서로 다각형을 필터링합니다.


2. GenerateSurfaceNormals로 다각형의 표면 분할


GenerateSurfaceNormals는 VTK의 vtkPolyDataNormals이라는 필터와 동일한 기능을 가지고 있습니다.

이 필터는 기본적으로 폴리곤의 노드/요소에 법선 벡터를 정의한다는 것입니다만, 내장 플래그를 ON 하는 것으로 여러가지 할 수 있습니다.
내장 플래그는 다음과 같습니다.


내장 플래그
기능


Splitting
Feature Angle 에서 설정한 각도(인접하는 요소들 사이의 이루는 각도)로 연결된 영역과 그렇지 않은 영역을 구별하여 분할한다.

Consistency
법선의 방향을 정돈한다. 아베코베에 법선이 정의되어 있을 때 등에 이용할 수 있다.

Filp Normals
모든 법선의 방향을 반전시킵니다.

Non-Manifold Traversal
Non-ManifoldEdges (3 개 이상의 요소의 가장자리가 겹칠 때 가능한 선분)를 처리 대상에 포함합니다.

Compute Cell Normals
요소의 법선 벡터를 찾습니다.

Piece Invariant
사용하는 프로세서의 수에 관계없이 동일한 결과를 얻는다.


이번에는 위의 플래그는 디폴트 + Conpute Cell Normals 를 ON 으로 하고 Feature Angle 를 설정한 후 [Apply] 를 선택합니다.


3. Connectivity로 분할된 각 면에 ID를 부여


Connectivity는 VTK의 vtkConnectivityFilter이라는 필터와 동일한 기능을 가지고 있습니다.

이 필터는 중복 노드가 있는 점을 경계로 하여 영역을 구별하여 [요구조사], 영역마다 노드/요소 단위로 RegionId(정수)를 흔들어줍니다.


4. Threshold에서 특정 ID가 있는 다각형만 추출


Threshold는 VTK의 vtkThreshold이라는 필터와 동일한 기능을 가지고 있습니다.

이 필터를 사용하면 설정된 범위의 수치가 있는 노드/요소만 추출할 수 있습니다. 이번에는 모델의 K 면을 추출해 보겠습니다.

먼저 뷰어 상단의 [Select Cells On (s)]를 선택합니다.

그런 다음 모델에서 추출하려는 부분의 일부를 드래그하면 아래 그림과 같이 요소를 선택할 수 있으므로,
그 상태에서 [Find data matching various criteria from the current source (v)]를 선택합니다.

그러면 Connectivity 에서 부여한 RegionId 를 알 수 있습니다.

이 값을 Threshold[Minimum][Maximum] 에 입력하고 [Apply] 를 선택하면 다음과 같이 K 의 면만 추출할 수 있습니다.


5. 다른 다각형에서도 시도



곡률이 큰 면이 많은 모델에서도 제대로 특정 면을 추출할 수 있습니다.


6. 결론



3D 폴리곤상의 매끄럽게 연결된 면만을 추출한다는 처리를 ParaView만으로 해 보았습니다.
ParaView의 필터는 기본적으로 VTK로 구현되어 있으므로 VTK 라이브러리를 사용하여 C++나 Python 등에서도 같은 처리를 기술할 수 있습니다.

또, 이번 일련의 작업은 ParaView상에서 [Tools] -> [Start Trace / Stop Trace] 를 이용하면, Python 스크립트로 할 수 있으므로, Python에서 같은 일을 하고 싶은 분은 그쪽을 이용해 주세요.

그 중 이번 방법으로 만든 부분표면 데이터와 이전 기사 에서 소개한 솔버간의 연계에 관해서도 쓸 수 있다고 생각합니다.

참고문헌


  • ParaView를 다하고 싶다. : Generate Surface Normals
  • 메쉬 위키: 법선 벡터 생성
  • 좋은 웹페이지 즐겨찾기