我尝试在vtkCubeAxesActor上设置转换。这是我设置actor并设置转换
的代码// define axis actor
vtkNew<vtkCubeAxesActor> axesActor;
axesActor->SetBounds(bounds);
axesActor->SetCamera(renderer->GetActiveCamera());
axesActor->DrawXGridlinesOn();
axesActor->DrawYGridlinesOn();
axesActor->DrawZGridlinesOn();
axesActor->SetGridLineLocation(axesActor->VTK_GRID_LINES_FURTHEST);
axesActor->XAxisMinorTickVisibilityOff();
axesActor->YAxisMinorTickVisibilityOff();
axesActor->ZAxisMinorTickVisibilityOff();
// transform to nice scale for plotting
vtkNew<vtkTransform> transform;
transform->Scale(1.0, 2.0 , 3.0);
axesActor->SetUserTransform(transform);
然而,当我这样做时,vtkCubeAxesActor看起来仍然与我之前的其他演员一样(未缩放),缩放工作没有任何问题。
问题所在的任何想法,或者我如何解决缩放问题?
答案 0 :(得分:0)
欢迎来到SO goaran:)。
查看vtkCubeAxesActor.cxx来源和标题vtkCubeAxesActor.h,然后您就会看到答案。 以下是我到目前为止所发现的摘要:
UserTransform
,即不存在
使用 vtkAxisActors
由vtkCubeAxesActor
this->XAxes[i] = vtkAxisActor::New();
this->YAxes[i] = vtkAxisActor::New();
this->ZAxes[i] = vtkAxisActor::New();
上述属性不以任何方式暴露,例如: vtkCubeAxesActor->GetActors2D(collection);
或vtkCubeAxesActor->GetActors(collection);
这意味着默认情况下,您无法将vtkCubeAxesActor
转换为其他vtkActor
。
你可以做的是改变vtkCubeAxesActor.h
的标题以暴露演员,将它们放入容器中,迭代它并调用变换。
vtkSmartPointer<vtkPropCollection> collection = vtkSmartPointer<vtkPropCollection>::New();
cubeAxesActor->GetActors2D(collection);
collection->InitTraversal();
cubeAxesActor->GetXAxesGridlinesProperty()-
for(int i = 0; i < collection->GetNumberOfItems(); i++)
{
vtkSmartPointer<vtkActor> actor = vtkActor::SafeDownCast(collection->GetNextProp());
actor->SetUserMatrix(transform->GetMatrix());
}