我有以下代码可以从 STL 文件中读取网格数据并将其显示在窗口中。代码工作正常;但我需要访问顶点和索引数组才能进行一些数据处理;更改网格然后渲染它。我想知道如何访问那些具有网格顶点坐标和它们的索引号以形成网格三角形的数组。这似乎是一个非常基本的步骤,但我在 VTK 的 wiki 中找不到任何答案。
int main ( int argc, char *argv[] ) { std::string inputFilename = "Scapula.stl"; vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New(); reader->SetFileName(inputFilename.c_str()); reader->Update(); // Visualize vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(reader->GetOutputPort()); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor->SetRenderWindow(renderWindow); renderer->AddActor(actor); renderer->SetBackground(.3, .6, .3); // Background color green renderWindow->Render(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }
最佳答案
所有这些信息都存储在 vtkPolyData 中,可以从 vtkSTLreader 中提取。这是我可以获取存储在 STL 文件中的网格的顶点和索引的方法:
//Data source
std::string inputFilename = "reamer.stl";
vtkSmartPointer<vtkSTLReader> reader =
vtkSmartPointer<vtkSTLReader>::New();
reader->SetFileName(inputFilename.c_str());
reader->Update();
vtkSmartPointer<vtkPolyData> mesh = reader->GetOutput();
vtkSmartPointer<vtkPoints> points = mesh->GetPoints();
vtkSmartPointer<vtkDataArray> dataArray = points->GetData();
vtkIdType numberOfFaces = mesh->GetNumberOfCells();
mesh->GetCellPoints(i, faceIndex);
vertexIndex = faceIndex->GetId(0);
vertexArray[0] = dataArray->GetComponent(vertexIndex, 0);
vertexArray[1] = dataArray->GetComponent(vertexIndex, 1);
vertexArray[2] = dataArray->GetComponent(vertexIndex, 2);
vertexIndex = faceIndex->GetId(1);
vertexArray[3] = dataArray->GetComponent(vertexIndex, 0);
vertexArray[4] = dataArray->GetComponent(vertexIndex, 1);
vertexArray[5] = dataArray->GetComponent(vertexIndex, 2);
vertexIndex = faceIndex->GetId(2);
vertexArray[6] = dataArray->GetComponent(vertexIndex, 0);
vertexArray[7] = dataArray->GetComponent(vertexIndex, 1);
vertexArray[8] = dataArray->GetComponent(vertexIndex, 2);
其中 vertexArray 是具有 i=0 的网格的第一个索引三角形坐标的数组。您可以遍历 i 以获取其余三角形的坐标。
关于c++ - 如何访问从 VTK 中的 STLreader 获得的网格的顶点和索引数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612063/