目標是從幾個點畫線 我有2個矢量tab_recupere_P1和tab_recupere_P2,每個矢量的大小是14. 我瀏覽了兩個矢量,我在每次迭代時都會得到PP1和PP2指向的一條線。如何用vtk同時繪製多行?
我用幾種方法但都給出了相同的結果
這裏是我的代碼:方法1:
for (std::vector<Coord_point*>::iterator i = tab_recupere_P1.begin();
i != tab_recupere_P1.end();
++i)
{
new_p = *i;
pp1[0] = new_p->p0[0];
pp1[1] = new_p->p0[1];
pp1[2] = new_p->p0[2];
std::cout << " x : "<< pp1[0] << " y : " << pp1[1] << " z : " << pp1[2] <<std::endl;
for (std::vector<Coord_point*>::iterator j = tab_recupere_P2.begin();
j != tab_recupere_P2.end();
j++)
{
new_p2 = *j;
pp2[0] = new_p2->p0[0];
pp2[1] = new_p2->p0[1];
pp2[2] = new_p2->p0[2];
std::cout << " x2 : "<< pp2[0] << " y2 : " << pp2[1] << " z2 : " << pp2[2] <<std::endl;
// Add the two poitns to a vtkPoints object
vtkSmartPointer<vtkPoints> pts = vtkSmartPointer<vtkPoints>::New();
pts->InsertNextPoint(pp1);
pts->InsertNextPoint(pp2);
// Create a line between the two points
vtkSmartPointer<vtkLine> line =
vtkSmartPointer<vtkLine>::New();
for(unsigned int h = 0; h < 2; h++)
{
line->GetPointIds()->SetId(h,h);
}
// Create a cell array to store the line in
vtkSmartPointer<vtkCellArray> lines =
vtkSmartPointer<vtkCellArray>::New();
lines->InsertNextCell(line);
// Create a polydata to store everything in
vtkSmartPointer<vtkPolyData> pdata =
vtkSmartPointer<vtkPolyData>::New();
// Add the points to the dataset
pdata->SetPoints(pts);
// Add the lines to the dataset
pdata->SetLines(lines);
#if VTK_MAJOR_VERSION <= 5
mapper->SetInput(pdata);
#else
mapper->SetInputData(pdata);
#endif
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindowInteractorLine->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
ui.qvtkWidget_Visualisation->SetRenderWindow(renderWindow);
ui.qvtkWidget_Visualisation->update();
renderWindowInteractorLine->Initialize();
renderWindowInteractorLine->Start();
break;
}
}
方法numbre 2:我行存儲在一個矢量,然後我去畫出每一行
for (std::vector<Coord_point*>::iterator i = tab_recupere_P1.begin();
i != tab_recupere_P1.end();
++i)
{
new_p = *i;
pp1[0] = new_p->p0[0];
pp1[1] = new_p->p0[1];
pp1[2] = new_p->p0[2];
std::cout << " x : "<< pp1[0] << " y : " << pp1[1] << " z : " << pp1[2] <<std::endl;
for (std::vector<Coord_point*>::iterator j = tab_recupere_P2.begin();
j != tab_recupere_P2.end();
j++)
{
new_p2 = *j;
pp2[0] = new_p2->p0[0];
pp2[1] = new_p2->p0[1];
pp2[2] = new_p2->p0[2];
std::cout << " x2 : "<< pp2[0] << " y2 : " << pp2[1] << " z2 : " << pp2[2] <<std::endl;
vtkSmartPointer<vtkLineSource> lineSource =
vtkSmartPointer<vtkLineSource>::New();
lineSource->SetPoint1(pp1);
lineSource->SetPoint2(pp2);
lineSource->Update();
tab_lineSource.push_back(lineSource);
break;
}
}
vtkSmartPointer<vtkLineSource> new_lineSource =
vtkSmartPointer<vtkLineSource>::New();
for (std::vector<vtkLineSource*>::iterator l = tab_lineSource.begin();
l != tab_lineSource.end();
l++)
{
new_lineSource = *l;
mapper->SetInputConnection(new_lineSource->GetOutputPort());
actor->SetMapper(mapper);
actor->GetProperty()->SetLineWidth(1);
actor->GetProperty()->SetColor(1,0,0);
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindowInteractorLine->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
ui.qvtkWidget_Visualisation->SetRenderWindow(renderWindow);
ui.qvtkWidget_Visualisation->updateGeometry();
renderWindowInteractorLine->Initialize();
renderWindowInteractorLine->Start();
}
問題是無論哪種方法,第一次迭代的行將被繪製並且沒有錯誤消息。但需要從矢量中存儲的點中繪製所有線。
請你幫我!!請!
您是否可以在兩種情況下粘貼由於cout語句而看到的輸出? –
另外,在第二個示例中,您將在第一次迭代後終止它的嵌套for循環中斷。這可能不是你的意思。 –