프로그래밍/VTK

선분 그리기

이재만박사 2016. 10. 21. 03:58

1. vtkPolyData 객체 생성


vtkSmartPointer<vtkPolyData> linesPolyData = vtkSmartPointer<vtkPolyData>::New();



2. vtkPoints 객체 생성 후 점 추가


double origin[3] = { 0.0, 0.0, 0.0 };

double p0[3] = { 1.0, 0.0, 0.0 };

double p1[3] = { 0.0, 1.0, 0.0 };


vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();


points->InsertNextPoint(origin);

points->InsertNextPoint(p0);

points->InsertNextPoint(p1);



3. vtkLine 객체 생성 후 vtkCellArray 에 등록


vtkSmartPointer<vtkLine> line0 = vtkSmartPointer<vtkLine>::New();

line0->GetPointIds()->SetId(0, 0);

line0->GetPointIds()->SetId(1, 1);


vtkSmartPointer<vtkLine> line1 = vtkSmartPointer<vtkLine>::New();

line1->GetPointIds()->SetId(0, 0);

line1->GetPointIds()->SetId(1, 2);


vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();

lines->InsertNextCell(line0);

lines->InsertNextCell(line1);



4. 색상 지정


unsigned char red[3] = { 255, 0, 0 };

unsigned char green[3] = { 0, 255, 0 };


vtkSmartPointer<vtkUnsignedCharArray> colors = vtkSmartPointer<vtkUnsignedCharArray>::New();

colors->SetNumberOfComponents(3);

colors->InsertNextTupleValue(red);

colors->InsertNextTupleValue(green);



5. linesPolyData 에 point, line, color 지정


linesPolyData->SetPoints(points);

linesPolyData->SetLines(lines);

linesPolyData->GetCellData()->SetScalars(colors);



6. Mapper 객체 생성 후 linesPolyData 설정


vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();

mapper->SetInputData(linesPolyData);



7. Actor 객체 생성 후 mapper 등록



vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();

actor->SetMapper(actor);



8. Renderer 객체 생성 후 actor 등록


vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();

renderer->AddActor(actor);



9. RenderWindow 객체 생성 후 Renderer 추가


vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();

renderWindow->AddRenderer(renderer);


10. RenderWindowInteractor 객체 생성 후 RenderWindow 객체 설정


vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();

interactor->SetRenderWindow(renderWindow);



11. 렌더링 후 스타트

renderWindow->Render();

interactor->Start();