vtkCubeAxesActor SetUserTransform()没有影响力

时间:2018-03-01 16:05:54

标签: c++ vtk

我尝试在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看起来仍然与我之前的其他演员一样(未缩放),缩放工作没有任何问题。

问题所在的任何想法,或者我如何解决缩放问题?

1 个答案:

答案 0 :(得分:0)

欢迎来到SO goaran:)。

查看vtkCubeAxesActor.cxx来源和标题vtkCubeAxesActor.h,然后您就会看到答案。 以下是我到目前为止所发现的摘要:

    源代码中根本不存在
  1. UserTransform,即不存在 使用
  2. vtkAxisActorsvtkCubeAxesActor

    创建

    this->XAxes[i] = vtkAxisActor::New();

    this->YAxes[i] = vtkAxisActor::New();

    this->ZAxes[i] = vtkAxisActor::New();

  3. 上述属性不以任何方式暴露,例如: vtkCubeAxesActor->GetActors2D(collection);vtkCubeAxesActor->GetActors(collection);

  4. 这意味着默认情况下,您无法将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());
    }