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(); –