728x90
VTK 의 기본 Geometry 를 구현하기 위해서는 몇 가지의 클래스를 알아야 한다.
vtkPoints | 3차원 위치 정보를 갖는 최소단위의 데이터를 Array타입으로 갖는 클래스. 1~N 개의 Point 데이터를 갖는다. |
|
vtkCell | 여러 Geometry 타입의 클래스들의 추상화 클래스이다. Cell은 구현 클래스에 따라 Cell을 구성하는 포인트의 갯수가 달라진다. Cell의 vertex index에 연결할 vtkPoints 의 index 값을 지정하여 Cell 을 만든다. ex) vtkVertex : 1개 vtkLine : 2개 vtkTriangle : 3개 vtkPolygon : N개 |
|
vtkCellArray | Cell의 형상을 구성하는 vertex의 id 와 vtkPoints 데이터의 id를 연결한다. Cell 객체를 array로 갖는 클래스 또는 Cell 과 같이 형상을 구성하는 데이터를 직접 구성한다. |
|
vtkPolyData | Cell의 클래스에 따라 입력된 vtkPoints 데이터와 CellArray 정보를 이용하여 형상을 관리하는 클래스 SetPoints (vtkPoints): 기본 위치 데이터를 입력받는다. SetVerts, SetLines, SetPolys, SetStrips : 형상에 따라 필요한 id 정보를 갖는 CellArray 정보를 입력한다. |
vtkCell 을 이용한 PolyData 만들기
vtkCell의 구현 타입을 활용하여 쉽게 CellArray 데이터를 생성할 수 있다.
GetPointIds().SetId(cell id, point id) 함수를 이용하여 cell과 point 데이터를 연결한다.
// Create a triangle
vtkPoints points = vtkPoints.New();
//vertex
points.InsertNextPoint(0.0, 0.0, 0.0);
//line
points.InsertNextPoint(0.0, 1.0, 0.0);
points.InsertNextPoint(0.0, 3.0, 0.0);
//triangle
points.InsertNextPoint(-1.0, 0.0, 0.0);
points.InsertNextPoint(-3.0, 0.0, 0.0);
points.InsertNextPoint(-2.0, 2.5, 0.0);
//Polygon
points.InsertNextPoint(1.0, 0.0, 0.0);
points.InsertNextPoint(5.0, 0.0, 0.0);
points.InsertNextPoint(5.0, 6.0, 0.0);
points.InsertNextPoint(1.0, 5.0, 0.0);
points.InsertNextPoint(0.5, 4.0, 0.0);
vtkVertex vertex = vtkVertex.New();
vertex.GetPointIds().SetId(0, 0);
vtkLine line = vtkLine.New();
line.GetPointIds().SetId(0, 1);
line.GetPointIds().SetId(1, 2);
vtkTriangle triangle = vtkTriangle.New();
triangle.GetPointIds().SetId(0, 3);
triangle.GetPointIds().SetId(1, 4);
triangle.GetPointIds().SetId(2, 5);
vtkPolygon polygon = vtkPolygon.New();
polygon.GetPointIds().SetNumberOfIds(5);
polygon.GetPointIds().SetId(0, 6);
polygon.GetPointIds().SetId(1, 7);
polygon.GetPointIds().SetId(2, 8);
polygon.GetPointIds().SetId(3, 9);
polygon.GetPointIds().SetId(4, 10);
vtkPolyData point = vtkPolyData.New();
point.SetPoints(points);
var cellVert = vtkCellArray.New();
cellVert.InsertNextCell(vertex);
point.SetVerts(cellVert);
var cellLine = vtkCellArray.New();
cellLine.InsertNextCell(line);
point.SetLines(cellLine);
var cellTri = vtkCellArray.New();
cellTri.InsertNextCell(triangle);
point.SetStrips(cellTri);
var cellPoly = vtkCellArray.New();
cellPoly.InsertNextCell(polygon);
point.SetPolys(cellPoly);
vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
mapper.SetInputData(point);
vtkActor actor = vtkActor.New();
actor.SetMapper(mapper);
vtkCellArray 직접 지정방법
vtkCell 타입의 객체를 사용하지 않고 cellArray 에 직접 데이터를 입력할 수도 있다.
vtkCellArray 객체에 cell 정보를 입력하는 방법만 다를 뿐 결과는 동일하다.
vtkPolyData point = vtkPolyData.New();
point.SetPoints(points);
var cellVert = vtkCellArray.New();
cellVert.InsertNextCell(1);
cellVert.InsertCellPoint(0);
point.SetVerts(cellVert);
var cellLine = vtkCellArray.New();
cellLine.InsertNextCell(2);
cellLine.InsertCellPoint(1);
cellLine.InsertCellPoint(2);
point.SetLines(cellLine);
var cellTri = vtkCellArray.New();
cellTri.InsertNextCell(3);
cellTri.InsertCellPoint(3);
cellTri.InsertCellPoint(4);
cellTri.InsertCellPoint(5);
point.SetStrips(cellTri);
var cellPoly = vtkCellArray.New();
cellPoly.InsertNextCell(5);
cellPoly.InsertCellPoint(6);
cellPoly.InsertCellPoint(7);
cellPoly.InsertCellPoint(8);
cellPoly.InsertCellPoint(9);
cellPoly.InsertCellPoint(10);
point.SetPolys(cellPoly);
728x90
728x90