본문 바로가기

Programming/VTK

[VTK] VTK에서 원 그리기 (C++, MFC)

vtk에서 3d 원을 그리는 법을 알아보겠습니다.

원을 그리기 위해서는 vtk의 vtkSphereSource class를 사용합니다.

아래 간단한 예제입니다.

// const vtkVector3d& center = {0.0, 0.0, 0.0}; 
// double radius = 10;

vtkSmartPointer<vtkSphereSource> circle = vtkSmartPointer<vtkSphereSource>::New();
circle->SetCenter(center.GetX(), center.GetY(), center.GetZ());
circle->SetRadius(radius);
circle->SetPhiResolution(20);
circle->SetThetaResolution(20);
circle->Update();

vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(circle->GetOutputPort());

vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper.Get());

이때 Actor의 세부 속성을 변경하고자 한다면 vtkActor class의 GetProperty()나 vtkProperty class의 SetProperty()로 circle의 디자인이나 속성을 변경할 수 있습니다.

자세한 방법은 아래와 같습니다.

  1. vtkActor class의 GetProperty()
vtkSmartPointer<vtkNamedColors> colors = vtkSmartPointer<vtkNamedColors>::New();

// Set circle properties
actor->GetProperty()->SetColor(colors->GetColor3d("white").GetData()); //actor 색상 변경  
actor->GetProperty()->SetOpacity(0.8); //투명도 조절, 0~1사이 값
  1. vtkProperty class의 SetProperty()
vtkSmartPointer<vtkNamedColors> colors = vtkSmartPointer<vtkNamedColors>::New();

// Set circle properties  
vtkSmartPointer circleProperty = vtkSmartPointer::New();  
circleProperty->SetColor(colors->GetColor3d("white").GetData()); //actor 색상 변경  
circleProperty->SetOpacity(0.8); //투명도 조절, 0~1사이 값  
actor->SetProperty(circleProperty);

 

 

만들어진 Actor를 클릭할 때마다 생기게 하고 싶은 경우, 원하는 Mouse event 함수를 override하여 AddActor(actor)후 Interactor->Render()하면 된답니다.

 

 

 

참 쉽죠 ~?

'Programming > VTK' 카테고리의 다른 글

[VTK] screen 좌표를 vtk world 좌표로 변환하기  (0) 2024.04.16