gpt4 book ai didi

vtk - 在 Visualization Toolkit 中,哪些类型的对象需要调用 Update() 和 Modified() 以及何时调用?

转载 作者:行者123 更新时间:2023-12-05 01:03:59 27 4
gpt4 key购买 nike

我正在查看一些可能无法正常工作的 VTK 代码。这是一个片段:

vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New();
cam->SetFocalPoint(0, 0, 0);
cam->SetViewUp(perp[0], perp[1], perp[2]);

cam->SetPosition(first_cam_pos);
cam->SetViewAngle(20);
cam->Modified();

在我看来,调用 Modified()应该没有必要,调用四个 Set 函数应该会自动发出相机已被修改的信号。

确实, Kitware VTK camera example不使用 Modified()为相机。
vtkSmartPointer<vtkCamera> camera = vtkSmartPointer<vtkCamera>::New();
camera->SetPosition(0, 0, 20);
camera->SetFocalPoint(0, 0, 0);

// Create a renderer, render window, and interactor
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();

renderer->SetActiveCamera(camera);

在其他情况下,我正在查看的可能不工作的 VTK 代码使用 Update()手动更新——不是针对相机对象,而是针对其他地方。同样,我认为这可能没有必要。但是 显然 Update()Modified()有没有因为某种原因 .

是否有一些规则可以确定何时 Modified()Update()需要打电话,什么时候不需要? 是否有某些类型的对象需要它们而某些类型不需要?还是与调用它们的函数类型有关?

我正在使用 VTK 6.1,但如果这里有一些历史背景,我很想得到一个一般性的答案。

最佳答案

如果要在管道为您更新对象之前使用对象,则需要 Update()。一个例子是:

vtkSmartPointer<vtkXMLPolyDataReader> reader = \
vtkSmartPointer<vtkPolyDataReader>::New();

reader->SetFileName("myfile.vtp");

// At this point, the reader hasn't yet read the file, so the
// following line with result in polydata being null (or
// something like that)

vtkPolyData* badPolydata = reader->GetOutput();

// However, once you tell the reader "update right now, don't wait
// for the pipeline to update you" with:

reader->Update();

// you can now get access to the data it has read:

vtkPolyData* goodPolydata = reader->GetOutput();

另一方面,如果你要带读者,将其附加到映射器,将映射器附加到 Actor ,并在渲染窗口中显示 Actor ,那么当渲染器说“好的,现在我需要驱动整个链的数据”,管道将返回并在阅读器上调用 Update()。这是管道执行模型的全部原因/好处。

当您想通知管道“在下一次传递时,您需要重新处理此对象”时,需要使用 Modified()。这是由大多数 Set* 函数在内部完成的,所以我猜你只需要查看实现,看看 Modified() 是否被你调用的任何函数调用,你希望下一次生效通过管道。

关于vtk - 在 Visualization Toolkit 中,哪些类型的对象需要调用 Update() 和 Modified() 以及何时调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com