如何将许多vtkprop或vtkactor合并以形成更大的actor或prop?

问题描述 投票:1回答:2

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

c++ opengl vtk
2个回答
3
投票

我想您正在寻找vtkAssembly:http://www.vtk.org/doc/release/5.0/html/a01164.html

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

BUT:这仍将原始角色保存在某个地方并且速度很慢,您可以通过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退伍军人都流连忘返,并为几乎所有需求提供了最佳实践。


1
投票
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);


}
© www.soinside.com 2019 - 2024. All rights reserved.