기본 콘텐츠로 건너뛰기

라벨이 Elbow인 게시물 표시

PCF 파일 뷰어 제작

PCF 파일은 배관 스풀의 정보를 가지는 텍스트 파일입니다. 아주 단순한 구조를 가지고 있기 때문에 내용을 파악하기 쉽습니다. 파이프의 경우 양 끝점과 BORE 사이즈를 가지고 있기 때문에 쉽게 3D을 생성할 수 있습니다. ELBOW의 경우에는 3D 형상을 그리기위해 몇가지 작업이 필요합니다. 일단 ELBOW는 양 끝점($P_1,P_2$)과 CENTER POINT(교차점),BORE 사이즈 그리고 각도를 가지고 있습니다. ELBOW를 그리는 방법은 먼저 $P_1$에 $\overrightarrow{CENTER - P_1}$을 법선 벡터로 가지는 지름이 BORE 사이즈인 원을 생성합니다. 그리고 생성한 원을 Origin 기준으로 $P_1,CENTER,P_2$로 이루어지는 평면의 법선을 축으로 하여 Angle만큼 회전하면 됩니다. $P_1,CENTER,P_2$로 이루어지는 평면의 법선 벡터는 아래와 같이 구할 수 있습니다. $\overrightarrow{Normal} = \overrightarrow{CENTER - P_1}\times \overrightarrow{P_2 - P_1}$ Origin 좌표를 구하기 위해 먼저 CENTER와 Origin사이의 거리(L)를 구합니다. $L=\frac{l}{sin(Angle/2)},(l = \left|\overrightarrow{CENTER - P_1}\right|)$ 거리를 구했으니 CENTER에서 Origin으로 향하는 방향 벡터만 구하면 Origin의 좌표를 구할 수 있습니다. 방향 벡터는 아래와 같이 구할 수 있습니다. $\overrightarrow{\text{방향 벡터}}=\overrightarrow{M-CENTER}, (M=\frac{P_1+P_2}{2})$ (삼각형 합동 규칙을 통하여 위 내용이 사실임을 확인할 수 있습니다.) 이제 방향 벡터까지 구했으니 Origin의 좌표를 구할 수 있습니다. Origin은 CENTER에서 방향 벡터 방향으로 L만큼 떨어진...

[VTK] Surface of Revolution

  VTK 에는 내가 원하는 Surface of Revolution API가 없습니다. vtkRotationalExtrusionFilter라는 클래스가 있지만 원하는 결과를 만들어 주지 않았습니다. 그렇게 원하는 API를 찾아봤는데 찾지 못했기 때문에 그 기능을 직접 구현하기로 했습니다. 먼저 회전시킬 곡선(Profile)을 생성합니다. Profile을 회전 축을 기준으로 Resolution만큼 회전시키면서 곡선들을 만들어 냅니다. # create a profile circle = vtk. vtkRegularPolygonSource ( ) circle. SetCenter ( ( pt1 [ 0 ] - self ._origin [ 0 ] , pt1 [ 1 ] - self ._origin [ 1 ] , pt1 [ 2 ] - self ._origin [ 2 ] ) ) circle. SetNormal ( ( pt1 [ 0 ] - center [ 0 ] , pt1 [ 1 ] - center [ 1 ] , pt1 [ 2 ] - center [ 2 ] ) ) circle. SetRadius ( radius ) circle. SetNumberOfSides ( 24 ) circle. Update ( ) circle_points = circle. GetOutput ( ) . GetPoints ( ) # get points from profile del circle   # Setup points and lines points = vtk. vtkPoints ( ) points. Allocate ( ( self ._resolution + 1 ) * circle_points. GetNumberOfPoints ( ) ) faces = vtk. vtkCellArray ( ) faces. SetNumberOfCells ( self ._resolution * circle_points. GetNumberOfPoints ( ) ) lines = v...