gpt4 book ai didi

c++ - 如何访问从 VTK 中的 STLreader 获得的网格的顶点和索引数组?

转载 作者:行者123 更新时间:2023-11-30 02:32:18 25 4
gpt4 key购买 nike

我有以下代码可以从 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/

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