我正在开发一个qt / vtk应用程序,用户可以根据他的要求绘制大量的vtk演员/道具。现在需要提供一种功能来组合所有绘制的演员/道具以形成母演员/道具。我尝试了vtkactorcollection,但它分别存储了所有的actor。提供任何合适的例子或指向相关的帖子。
答案 0 :(得分: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
但是:这仍然可以保存原来的演员并且很慢,你可以通过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问题,因为所有vtk资深人士都会徘徊,并为几乎所有需求提供最佳实践。
答案 1 :(得分: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);
}