0
我想用VTK改变点,即我用(+ 1/-1)值改变坐标(x,y,z)。我正在读取一个.OBJ文件,然后访问一个模型的点,当我试图将模型中的变化可视化时,RenderWindow不会显示任何内容。下面是我的代码: -修改VTK中的polyData点/顶点
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);
olyData->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)的坐标。我是否还需要进一步改变别的东西?
很多谢谢。
我也试图与命令行较早,但没有出现在渲染窗口:我VTK/ 命令是 mapper-> setInput设置(POLYDATA); –
它是这样编译的吗?它应该是“SetInputData”请参阅此链接(http://www.vtk.org/doc/nightly/html/classvtkPolyDataMapper.html#acc442e69006a90a371959eec6c1ee74e) –
是的,它使用mapper-> setInput(polyData)进行编译。 但实际上这并不显示模型中的任何变化..! 我做了什么额外的是 reader-> Modified(); 然后它开始显示模型,但仍然...顶点的变化没有被保存在Obj文件中。我使用下面的代码来保存更改: - vtkOBJExporter * objExporter = vtkOBJExporter :: New(); objExporter-> SetRenderWindow(renderWindow); objExporter-> Write(); –