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의 디자인이나 속성을 변경할 수 있습니다.
자세한 방법은 아래와 같습니다.
- 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사이 값
- 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 |
---|