1

我正在开发一个 qt/vtk 应用程序,用户可以根据他的要求绘制大量的 vtk 演员/道具。现在需要提供一种功能来组合所有绘制的演员/道具以形成母演员/道具。我试过 vtkactorcollection ,但它分别存储所有演员。提供任何合适的示例或将我指向相关帖子。

4

2 回答 2

5

我猜你正在寻找一个 vtkAssembly:http ://www.vtk.org/doc/release/5.0/html/a01164.html

遗憾的是,提供的示例仅是 TCL/Py,因此您最好的选择是此处给出的交互器示例:http ://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/Assembly

但是:这仍然将原始演员保存在某个地方并且速度很慢,您可以通过 vtkAssembly 的转换进行转换,但它并不是快速的核心。这完全取决于你想做什么。也许您可以丢弃所有参与者并简单地合并多数据? http://www.cmake.org/Wiki/VTK/Examples/Cxx/Filtering/CombinePolydata

编辑:对于绘制的东西http://www.vtk.org/Wiki/VTK/Examples/Cxx/Filtering/AppendFilter也可以很好地工作(比组合多边形数据过滤器快一点)

尽管我不想阻止使用 stackoverflow,但对于 vtk 问题来说,vtk 邮件列表要好得多,因为所有 vtk 资深人士都在附近徘徊并为几乎所有要求提供最佳实践。

于 2012-11-28T07:51:35.740 回答
2
void Widget::loadObjModel() {
    QElapsedTimer t;
    t.start();
    auto renderer = vtkSmartPointer<vtkRenderer>::New();
    auto renWin = vtkSmartPointer<vtkRenderWindow>::New();
    renWin->AddRenderer(renderer);
    auto importer = vtkSmartPointer<vtkOBJImporter>::New();
    importer->SetRenderWindow(renWin);

    importer->SetFileName("E:/Garden/Garden.obj");
    importer->SetFileNameMTL("E:/Garden/Garden.mtl");
    importer->SetTexturePath("E:/Garden");
    importer->Update();

    auto actors = renderer->GetActors();
    actors->InitTraversal();

    auto assembly = vtkSmartPointer<vtkAssembly>::New();
    qDebug() << "There are " << actors->GetNumberOfItems() << " actors";
    for (vtkIdType a = 0; a < actors->GetNumberOfItems(); ++a) {
        vtkActor *actor = actors->GetNextActor();
        assembly->AddPart(actor);
    }
    assembly->RotateX(90);

    m_renderer->AddActor(assembly);


}
于 2020-04-10T06:27:29.327 回答