修改VTK中的polyData点/顶点

Modifying the polyData points/vertices in VTK

本文关键字:顶点 polyData VTK 中的 修改      更新时间:2023-10-16

我正在尝试使用VTK来更改点,即我将坐标(x,y,z)更改为(+1/-1)值。我正在读取一个.OBJ文件,然后访问模型的点,当我试图可视化模型中的变化时,RenderWindow不会显示任何内容。以下是我的代码:-

vtkSmartPointer<vtkOBJReader> reader = vtkSmartPointer<vtkOBJReader>::New();
reader->SetFileName(filename.c_str());
reader->Update();
vtkSmartPointer<vtkPolyData> polyData = reader->GetOutput();
polyData->Update();
Point3d point;
std::vector<Point3d> vertices; 
double p[3];        
vtkPoints* points = vtkPoints::New();       
vtkDoubleArray* pcoord = vtkDoubleArray::New();
pcoord->SetNumberOfComponents(3);       
pcoord->SetNumberOfTuples(polyData->GetNumberOfPoints());
for(vtkIdType i = 0; i < polyData->GetNumberOfPoints(); i++) 
{  
    polyData->GetPoint(i,p);
    p[0] +=1;
    p[1] +=1;
    p[2] +=1;
    pcoord->SetTuple(i, p);       
}
points->SetData(pcoord);
polyData->SetPoints(points);   
polyData->Modified();
//Visualize Code
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();
renderer->AddActor(actor);
vtkRenderWindow* renderWindow = vtkRenderWindow::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindowInteractor->Initialize();
renderWindowInteractor->Start();

我是这个3D和VTK的新手,请检查我缺少的地方,因为我想更改每个顶点(x,y,z)的坐标。我还需要进一步更改其他内容吗?

非常感谢。

首先,问题中包含的代码存在对齐问题。我相信你也错过了一个for循环。("i"在哪里定义?)

主要问题是根本没有渲染polyData。您正在渲染的唯一内容是.obj文件中的内容。这条线的证据:

mapper->SetInputConnection(reader->GetOutputPort());

为了呈现polyData,将上面的行替换为:

mapper->SetInputData(polyData);

这假设polyData是正确创建的。我无法从您提供的代码中轻易分辨出这一点。

下面是一个可能有所帮助的例子。