1. 개요 이전 글에서 Picker의 종류들과 각각의 사용방법에 대해 알아봤었다. 이번에는 vtkPicker 를 사용하는데 알아두면 좋을 vtkPickingManager와 PickList를 알아보려고 한다. 2. vtkPickingManager Picking 은 Renderer 의 Scene 에서 기하학적 계산을 많이 하므로 매우 computation 소모가 큰 작업이다. 그렇기에 VTK 에서는 vtkRenderWindowInteractor 에서 관리하는 vtkPickingManager를 객체를 만들었고, 이를 통해서 중복적으로 picker 객체를 사용하는 것을 방지하기 위한 관리용 객체를 정의하고 있다. PickingManager는 하나의 interactor 에서 여러개의 picker가 중복적으로 사용..
1. 개요 vtkTransform 의 PreMultiply와 PostMultiply 방식을 비교한다. 2. PreMultiply Matrix 곱을 수행할 때 기존의 matrix를 pre 즉 앞단에 놓고 계산을 한다. 함수의 명칭때문에 헷갈리지만 명칭의 기준이 기존 matrix 값을 의미한다. Matrix = PrevMatrix * NewMatrix 로 표현할 수 있다. 이럴 경우 matrix의 좌표계는 상대 좌표계로 계산된다. 3. PostMultiply PreMultipy 와 반대로 기존 matrix 값을 post 뒷단에 놓고 계산 한다. Matrix = NewMatrix * PrevMatrix 로 표현할 수 있다. 이럴 경우 matrix의 좌표계는 월드 좌표계로 계산된다. 3. 구현 vtkAnnota..
1. 개요 World 에 있는 PolyData 형상과 면이 있을 때 면과 형상의 수직(normal) 벡터의 시점으로 cutting을 수행하고 cutting contour 를 해당 면으로 투영하는 기능을 수행한다. Polydata cutting 기능은 이전에 설명하였고 추가적으로 projection에 관한 기능과 코드의 흐름은 주석을 보면 알 수 있다. 2.코드 public void TestCutterPolydataProjection() { // Plane 을 실시간으로 변경하여 테스트 할 수 있는 Widget 생성 var planeWidget = vtkPlaneWidget.New(); planeWidget.SetNormal(0, 0, -1); planeWidget.SetOrigin(-1, -1, 0); ..
Camera 제어에서 Clipping 영역을 넘어가는 Actor가 있으면 짤려서 보이지를 않는다. 이를 해결하기 위한 방법 renderer.StartEvt += (sender, arg) =>{ renderer.ResetCameraClippingRange(); } ResetCameraClippingRange : Reset camera에서 clipping 요소만 reset을 한다.
1. 개요 VTK 스크린 화면에 정보를 출력할 때 쉽게 사용할 수 있는 vktCornerAnnotation 을 알아보려고 한다. 구현은 매우 쉬우므로 TextPosition의 정의와 정의되어 있는 Tag를 활용하는 방법을 설명한다. 2. TextPosition Renderer 의 화면을 총 8개의 위치로 정의하며 각 위치별 index와 명칭은 아래와 같다. public void TestTextPosition() { annotation.SetText((int) VtkTextPosition.LowerLeft, $"{(int) VtkTextPosition.LowerLeft}-{VtkTextPosition.LowerLeft}"); annotation.SetText((int) VtkTextPosition.Lowe..
1. 개요 카메라를 정의하는데 필요한 속성 정보는 이전에 설명한 내용과 같고 이를 설명하는데 있어 개념적으로 헷갈릴 수 있는 부분을 보충하기 위한 내용을 작성한다. [VTK] Camera 제어하기 — 로봇을 품은 개발자 이야기 (tistory.com) [VTK] Camera 제어하기 Camera 속성알기 Position : camera 가 3차원공간에 있는 위치이다. FocalPoint : camera 3차원 공간을 바라보고 있는 초점의 위치이다. View Angle : Pinhole 카메라 모델을 적용하였을 때에 camera가 보는 시점의 화 richardworld.tistory.com 카메라의 속성에서 가장 중요한 것은 Position 과 Focal point이다. 이는 Camera가 바라보는 방향 ..
1. 개요 PolyData를 단면으로 절단하면 새로운 절단된 면이 생긴다. 절단된 면은 Points 로 구성되며 같은 데이터를 이용하여 단면을 이루는 외곽선을 그릴 수 있다. 2. 구현 vtkCutter : 입력된 PolyData 를 입력된 vtkImplicitFunction을 이용하여 절단 기능을 수행한다. 절단된 된 면의 포인트와 라인을 갖는 Polydata를 생성한다. vtkDelaunay2D : 입력된 points 데이터를 이용하여 삼각형 polygons을 생성한다. vtkStripper : 삼각형 polydata 를 stripper 데이터로 생성한다. Stripper는 중복되는 데이터를 정리하여 메모리 소모를 줄일 수 있다. vtkCutter의 출력데이터를 입력하면 한개의 line 으로 만들고,..
1. 개요 VTK 에는 여러개의 기준 좌표계가 존재한다. 그리고 좌표계 간의 위치 값을 변환해주는 클래스가 vtkCoordinate 이다. vtkCoordinate 를 이용하여 변환을 할 수 있는 좌표계는 아래와 같다. Display 윈도우 화면의 X, Y 좌표값 좌측하단이 0,0 이고 우측 상단이 window 사이즈 값이다 Nornmalized Display Display 를 정규화한 값이다 0~1 Viewport Renderer로 그린 viewport 영역에서의 X,Y 좌표 값 좌측하단이 0,0 이고 우측 상단이 viewport 사이즈 값이다 Normalized Viewport Viewport 를 정규화한 값이다 0~1 View Pose 좌표계에서의 X,Y,Z 값 -1~1 Pose 카메라의 좌표계 W..
VTK 에서 vtkProp 은 화면에 그리고자 하는 사물의 위치와 회전 정보를 갖고 있다. 보통 Prop의 DataSet은 건드리지 않고 공간상의 위치와 회전을 변경하는 방식을 많이 사용하게 된다. 이때 고려해야 할 것들을 정리한다. 1. 1. vtkProp 기본 제어 Prop 의 원점과 위치 제어는 API 명령을 통해 쉽게 할 수 있다. Origin 과 Position 이 다른 것은 Origin은 나중에 Transform을 수행할 때의 Pivot 점으로 사용된다. prop.SetOrigin(x,y,z); prop.SetPosition(x,y,z); 회전은 Degree 값을 회전을 하는데 PostMultiply (상대축회전) 로는 RotZ->RotX->RotY 순으로 PreMultiply (절대축회전) ..
VTK 의 RenderWindow에서 interaction 을 수행하기 위한 이벤트 처리에 대한 흐름 내용과 Interaction Style을 구현하는 방법을 공부한 것을 간단하게 정리하려고 한다. 개념적인 부분에 대한 설명에서는 개인적인 이해에 따라 작성한 것이므로 잘못된 내용이 있거나 설명이 부족할 수도 있다. 1. 개요 RenderWindow의 interactor는 사용자와의 상호작용을 수행하기 위한 관리자와 같다. Observer 패턴으로 구현되어 있어 사용자는 처리하고 싶은 이벤트를 등록하고 observer에서 해당 이벤트가 발생하면 사용자가 등록한 callback 함수를 수행하도록 한다. 2. Interactor Observer vtkRenderWindowInteractor는 RenderWin..